import of rt 3.0.4
[freeside.git] / rt / docs / design_docs / rql_parser_machine.graphviz
diff --git a/rt/docs/design_docs/rql_parser_machine.graphviz b/rt/docs/design_docs/rql_parser_machine.graphviz
new file mode 100644 (file)
index 0000000..36463ec
--- /dev/null
@@ -0,0 +1,32 @@
+
+/* GraphViz graph representing the state diagram of the RQL parser.
+*/
+
+digraph G {
+
+    PAREN -> PAREN;
+    PAREN -> KEYWORD;
+    PAREN -> AGGREG;
+
+    AGGREG -> KEYWORD;
+    AGGREG -> PAREN;
+
+    KEYWORD -> OP;
+
+    OP -> VALUE;
+
+    VALUE -> PAREN;
+    VALUE -> AGGREG;
+
+/*
+    Blue lines represent added complexity of q[IN (x,y,z)] support.
+    The only place that the "blue tree" can be entered is at IN, and
+    exited at PAREN.
+*/
+    KEYWORD -> IN [color=blue];
+    IN -> PAREN [color=blue];
+    PAREN -> VALUE [color=blue];
+    VALUE -> COMMA [color=blue];
+    COMMA -> VALUE [color=blue]; 
+    VALUE -> PAREN [color=blue];
+}