*libecoli*.
- utilities: logging, string, strings vector, hash table, ...
-The grammar tree
-----------------
+The grammar graph
+-----------------
-The *ecoli nodes* are organized in a tree. An *ecoli grammar tree*
+The *ecoli nodes* are organized in a graph. Actually, it is mostly a
+tree, but loops are allowed in some cases. An *ecoli grammar tree*
describes how the input is parsed and completed. Let's take a simple
example:
.. figure:: simple-tree.svg
- A simple *ecoli grammar tree*.
+ A simple *ecoli grammar graph*.
We can also represent it as text like this::
.. figure:: simple-tree2.svg
- Another simple *ecoli grammar tree*.
+ Another simple *ecoli grammar graph*.
In that case, there is no lexer (the *sh_lex* node), so the input must
be a string vector that is already split. For instance, it matches:
- ``[]`` (empty vector)
At the time the input is parsed, a *parse tree* is built. When it
-matches, it describes which part of the *ecoli grammar tree* that
+matches, it describes which part of the *ecoli grammar graph* that
actually matched, and what input matched for each node.
Passing ``["bar", "1"]`` to the previous tree would result in the
The *ecoli parse tree*, result of parsing.
-Each node of the *parse tree* references the node of the *grammar tree*
+Each node of the *parse tree* references the node of the *grammar graph*
that matched. It also stores the string vector that matched.
.. figure:: parse-tree2.svg
.. figure:: simple-tree3.svg
- A simple *ecoli grammar tree*, that matches ``[]``, ``[foo]``,
+ A simple *ecoli grammar graph*, that matches ``[]``, ``[foo]``,
``[foo, foo]``, ...
Here is the resulting *parse tree* when the input vector is ``[foo, foo,
- params are consumed
- nodes
- attributes
+- extending lib with external nodes (in dev guide?)