aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/evaluation.md1
-rw-r--r--docs/parser-states.dot35
2 files changed, 36 insertions, 0 deletions
diff --git a/docs/evaluation.md b/docs/evaluation.md
index 04d8854..055e4ec 100644
--- a/docs/evaluation.md
+++ b/docs/evaluation.md
@@ -1,2 +1,3 @@
Evaluation process
==================
+[Parser states](parser-states.dot.png)
diff --git a/docs/parser-states.dot b/docs/parser-states.dot
new file mode 100644
index 0000000..16d714f
--- /dev/null
+++ b/docs/parser-states.dot
@@ -0,0 +1,35 @@
+digraph ParserStates {
+label="Parser states";
+
+init [label="Init"];
+disabled [label="Parser disabled"];
+error [label="Error"];
+
+init -> disabled [label="If _EVAEN is not empty"];
+init -> Parser [label="If _EVAEN is empty"];
+Parser -> disabled [label="_EVADI located"];
+disabled -> Parser [label="_EVAEN located"];
+
+Parser {
+nomacro [label="No macro"];
+macro_start [label="Macro/command start"];
+macro [label="Macro/command located"];
+args [label="Arguments"];
+expansion [label="Macro/command expansion (Secondary parser)"];
+
+Parser -> nomacro [style="dotted"];
+expansion -> Parser [style="dotted"];
+nomacro -> macro_start [label="_INIT located"];
+macro_start -> macro [label="_MACR matches text after _INIT"];
+macro_start -> error [label="else"];
+macro -> args [label="_ARGST matches after _MACR"];
+args -> args [label="_ARGSE localted"];
+args -> macro_start [label="_INIT located"];
+args -> expansion [label="_ARGEN located"];
+macro -> expansion [label="else"];
+expansion -> args [label="If some macro arguments are still opened"];
+expansion -> nomacro [label="If last opened macro argument was closed"];
+
+}
+
+}