Explorar o código

Add figures of rules of the AL

Yentl Van Tendeloo %!s(int64=7) %!d(string=hai) anos
pai
achega
1b484765a0
Modificáronse 37 ficheiros con 798 adicións e 2 borrados
  1. 1 2
      .gitignore
  2. 10 0
      doc/al_rules/render.sh
  3. 15 0
      doc/al_rules/rule_access__eval.dot
  4. 19 0
      doc/al_rules/rule_access__init.dot
  5. 16 0
      doc/al_rules/rule_assign__assign.dot
  6. 19 0
      doc/al_rules/rule_assign__init.dot
  7. 23 0
      doc/al_rules/rule_assign__value.dot
  8. 18 0
      doc/al_rules/rule_break.dot
  9. 30 0
      doc/al_rules/rule_call__call-no-params.dot
  10. 34 0
      doc/al_rules/rule_call__call-params.dot
  11. 37 0
      doc/al_rules/rule_call__params-first-multi.dot
  12. 38 0
      doc/al_rules/rule_call__params-first-single.dot
  13. 40 0
      doc/al_rules/rule_call__params-last.dot
  14. 39 0
      doc/al_rules/rule_call__params-next.dot
  15. 21 0
      doc/al_rules/rule_call__resolve-no-params.dot
  16. 19 0
      doc/al_rules/rule_call__resolve-params.dot
  17. 20 0
      doc/al_rules/rule_const.dot
  18. 16 0
      doc/al_rules/rule_continue.dot
  19. 25 0
      doc/al_rules/rule_declare__init.dot
  20. 25 0
      doc/al_rules/rule_global__init.dot
  21. 19 0
      doc/al_rules/rule_if__cond.dot
  22. 23 0
      doc/al_rules/rule_if__false-else.dot
  23. 16 0
      doc/al_rules/rule_if__false-nothing.dot
  24. 23 0
      doc/al_rules/rule_if__true.dot
  25. 25 0
      doc/al_rules/rule_input.dot
  26. 13 0
      doc/al_rules/rule_next__next.dot
  27. 19 0
      doc/al_rules/rule_next__no-next.dot
  28. 19 0
      doc/al_rules/rule_output__init.dot
  29. 23 0
      doc/al_rules/rule_output__output.dot
  30. 27 0
      doc/al_rules/rule_resolve__no-attr-global.dot
  31. 20 0
      doc/al_rules/rule_resolve__no-attr.dot
  32. 16 0
      doc/al_rules/rule_return__eval.dot
  33. 15 0
      doc/al_rules/rule_return__no-value.dot
  34. 19 0
      doc/al_rules/rule_return__value.dot
  35. 19 0
      doc/al_rules/rule_while__cond.dot
  36. 14 0
      doc/al_rules/rule_while__false.dot
  37. 23 0
      doc/al_rules/rule_while__true.dot

+ 1 - 2
.gitignore

@@ -1,9 +1,8 @@
 *.pyc
 *.pyc
 *.pickle
 *.pickle
-*.dot
 .cache
 .cache
 *.swp
 *.swp
 *.swo
 *.swo
 __pycache__
 __pycache__
 hybrid_server/server.py
 hybrid_server/server.py
-perf_data.txt
+perf_data.txt

+ 10 - 0
doc/al_rules/render.sh

@@ -0,0 +1,10 @@
+#!/bin/bash
+for f in *.dot
+do
+    dot -Teps -Gratio=1 -Gsize=30 $f > ${f%%.*}.eps
+done
+
+for f in *.eps
+do
+    epstopdf $f
+done

+ 15 - 0
doc/al_rules/rule_access__eval.dot

@@ -0,0 +1,15 @@
+digraph {
+    node [shape="point"]
+    Inst [shape="oval",label="Access"]
+    Phase [shape="oval",label="'eval'",color="blue"]
+    NewPhase [shape="oval",label="'finish'",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Inst [label="'IP'"]
+    Frame -> NewReturnValue [label="'returnvalue'",color="green",penwidth=4]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> ReturnValue [label="'returnvalue'",color="blue",style="dashed"]
+    ReturnValue -> NewReturnValue [label="'value'"]
+}

+ 19 - 0
doc/al_rules/rule_access__init.dot

@@ -0,0 +1,19 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'init'",shape="oval"]
+    Inst [label="Access",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'eval'",shape="oval",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Cond [label="'var'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Cond [label="'IP'",color="green",penwidth=4]
+}

+ 16 - 0
doc/al_rules/rule_assign__assign.dot

@@ -0,0 +1,16 @@
+digraph {
+    node [shape="point"]
+    Inst [shape="oval",label="Assign"]
+    OldPhase [shape="oval",label="'assign'",color="blue"]
+    NewPhase [shape="oval",label="'finish'",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Inst [label="'IP'"]
+    Frame -> ReturnValue [label="'returnvalue'"]
+    Frame -> Var [label="'variable'",color="blue",style="dashed"]
+    Var -> ReturnValue [label="'value'",color="green",penwidth=4]
+    Var -> OldValue [label="'value'",color="blue",style="dashed"]
+    Frame -> OldPhase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+}

+ 19 - 0
doc/al_rules/rule_assign__init.dot

@@ -0,0 +1,19 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'init'",shape="oval"]
+    Inst [label="Assign",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'value'",shape="oval",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Cond [label="'var'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Cond [label="'IP'",color="green",penwidth=4]
+}

+ 23 - 0
doc/al_rules/rule_assign__value.dot

@@ -0,0 +1,23 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'value'",shape="oval",color="blue"]
+    Inst [label="Assign",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'assign'",shape="oval",color="green"]
+    NewPhase [label="'init'",shape="oval",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Cond [label="'value'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Cond [label="'IP'",color="green",penwidth=4]
+    Frame -> Returnvalue [label="'returnvalue'"]
+    Frame -> Returnvalue [label="'variable'",color="green",penwidth=4]
+}

+ 18 - 0
doc/al_rules/rule_break.dot

@@ -0,0 +1,18 @@
+digraph {
+    Root [shape="point"]
+    UserRoot [shape="point"]
+    Frame [shape="point"]
+
+    OldPhase [label="'init'",color="blue"]
+    NewPhase [label="'finish'",color="green"]
+    OldIP [label="Break"]
+    NewIP [label="While"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> OldPhase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> OldIP [label="'IP'",color="blue",style="dashed"]
+    Frame -> NewIP [label="'IP'",color="green",penwidth=4]
+    OldIP -> NewIP [label="'while'"]
+}

+ 30 - 0
doc/al_rules/rule_call__call-no-params.dot

@@ -0,0 +1,30 @@
+digraph {
+    node [shape="point"]
+    Call [label="Call",shape="oval"]
+    Phase [label="'call'",shape="oval",color="blue"]
+    NewPhase [label="'finish'",shape="oval",color="green"]
+    Param [color="red"]
+    NPhase [label="'init'",shape="oval",color="green"]
+    NEvalStack [color="green"]
+    NSymbols [color="green"]
+    NewFrame [color="green"]
+    NewReturnValue [color="green"]
+    
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'",color="blue",style="dashed"]
+    UserRoot -> NewFrame [label="'frame'",color="green",penwidth=4]
+    Frame -> Call [label="'IP'"]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Call -> Param [label="'last_param'",color="red",style="dotted"]
+    Frame -> ReturnValue [label="'returnvalue'"]
+    ReturnValue -> Body [label="'body'"]
+
+    NewFrame -> NEvalStack [label="'evalstack'",color="green",penwidth=4]
+    NewFrame -> NSymbols [label="'symbols'",color="green",penwidth=4]
+    NewFrame -> NPhase [label="'phase'",color="green",penwidth=4]
+    NewFrame -> Frame [label="'prev'",color="green",penwidth=4]
+    NewFrame -> Call [label="'caller'",color="green",penwidth=4]
+    NewFrame -> Body [label="'IP'", color="green",penwidth=4]
+    NewFrame -> NewReturnValue [label="'returnvalue'",color="green",penwidth=4]
+}

+ 34 - 0
doc/al_rules/rule_call__call-params.dot

@@ -0,0 +1,34 @@
+digraph {
+    node [shape="point"]
+    Call [label="Call",shape="oval"]
+    Phase [label="'call'",shape="oval",color="blue"]
+    NewPhase [label="'finish'",color="green",shape="oval"]
+    NVariable [color="green"]
+    mid [color="green",width=0]
+    ParamA_mid [width=0]
+    Name_actual [label="a",shape="oval"]
+    
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'",color="blue",style="dashed"]
+    UserRoot -> NewFrame [label="'frame'",color="green",penwidth=4]
+    Frame -> Call [label="'IP'"]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Call -> ParamN [label="'last_param'"]
+    Frame -> ReturnValue [label="'returnvalue'"]
+
+    ParamN -> Name_actual [label="'name'"]
+
+    NewFrame -> NSymbols [label="'symbols'"]
+    NewFrame -> Frame [label="'prev'"]
+    NewFrame -> Call [label="'caller'"]
+    NewFrame -> Body [label="'IP'"]
+    Signature -> Body [label="'body'"]
+    Signature -> Params [label="'params'"]
+
+    NSymbols -> mid [arrowhead="none",color="green",penwidth=4]
+    mid -> NVariable [color="green",penwidth=4]
+    NVariable -> ReturnValue [color="green",label="'value'",penwidth=4]
+    mid -> ParamA [color="green",penwidth=4]
+    Params -> ParamA [label="a"]
+}

+ 37 - 0
doc/al_rules/rule_call__params-first-multi.dot

@@ -0,0 +1,37 @@
+digraph {
+    node [shape="point"]
+    Call [label="Call",shape="oval"]
+    NewEvalStack [color="green"]
+    NPhase [label="'init'",shape="oval",color="green"]
+    NEvalStack [color="green"]
+    NSymbols [color="green"]
+    NewFrame [color="green"]
+    NewPhase [label="'init'",color="green",shape="oval"]
+    NewReturnValue [color="green"]
+    
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Call [label="'IP'",color="blue",style="dashed"]
+    Frame -> ParamValue [label="'IP'",color="green",penwidth=4]
+    Frame -> Param [label="'phase'",color="blue",style="dashed"]
+    Param -> ParamValue [label="'value'"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Param -> Param2 [label="'next_param'"]
+    OldEvalStack -> Call [label="'inst'",color="green",penwidth=4]
+    Call -> Param [label="'params'"]
+    OldEvalStack -> Param2 [label="'phase'",color="green",penwidth=4]
+    Frame -> ReturnValue [label="'returnvalue'"]
+    ReturnValue -> Body [label="'body'"]
+    ReturnValue -> Params [label="'params'"]
+
+    NewFrame -> NEvalStack [label="'evalstack'",color="green",penwidth=4]
+    NewFrame -> NSymbols [label="'symbols'",color="green",penwidth=4]
+    NewFrame -> NPhase [label="'phase'",color="green",penwidth=4]
+    NewFrame -> Frame [label="'prev'",color="green",penwidth=4]
+    NewFrame -> Call [label="'caller'",color="green",penwidth=4]
+    NewFrame -> Body [label="'IP'", color="green",penwidth=4]
+    NewFrame -> NewReturnValue [label="'returnvalue'",color="green",penwidth=4]
+}

+ 38 - 0
doc/al_rules/rule_call__params-first-single.dot

@@ -0,0 +1,38 @@
+digraph {
+    node [shape="point"]
+    Call [label="Call",shape="oval"]
+    CallString [label="'call'",shape="oval",color="green"]
+    NewEvalStack [color="green"]
+    NPhase [label="'init'",shape="oval",color="green"]
+    NEvalStack [color="green"]
+    NSymbols [color="green"]
+    NewFrame [color="green"]
+    NewPhase [label="'init'",color="green",shape="oval"]
+    NReturnValue [color="green"]
+    
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Call [label="'IP'",color="blue",style="dashed"]
+    Frame -> ParamValue [label="'IP'",color="green",penwidth=4]
+    Param -> ParamValue [label="'value'"]
+    Frame -> Param [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Call -> Param [label="'params'"]
+    Call -> Param [label="'last_param'"]
+    OldEvalStack -> Call [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> CallString [label="'phase'",color="green",penwidth=4]
+    Frame -> ReturnValue [label="'returnvalue'"]
+    ReturnValue -> Body [label="'body'"]
+    ReturnValue -> Params [label="'params'"]
+
+    NewFrame -> NEvalStack [label="'evalstack'",color="green",penwidth=4]
+    NewFrame -> NSymbols [label="'symbols'",color="green",penwidth=4]
+    NewFrame -> NPhase [label="'phase'",color="green",penwidth=4]
+    NewFrame -> Frame [label="'prev'",color="green",penwidth=4]
+    NewFrame -> Call [label="'caller'",color="green",penwidth=4]
+    NewFrame -> Body [label="'IP'", color="green",penwidth=4]
+    NewFrame -> NReturnValue [label="'returnvalue'", color="green",penwidth=4]
+}

+ 40 - 0
doc/al_rules/rule_call__params-last.dot

@@ -0,0 +1,40 @@
+digraph {
+    node [shape="point"]
+    Call [label="Call",shape="oval"]
+    CallString [label="'call'",shape="oval",color="green"]
+    NewEvalStack [color="green"]
+    NewPhase [label="'init'",color="green",shape="oval"]
+    NVariable [color="green"]
+    mid [color="green",width=0]
+    NameA [label="a",shape="oval"]
+    
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Call [label="'IP'",color="blue",style="dashed"]
+    Frame -> Param2Value [label="'IP'",color="green",penwidth=4]
+    Param2 -> Param2Value [label="'value'"]
+    Frame -> Param2 [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Call -> Param2 [label="'last_param'"]
+    Param1 -> Param2 [label="'next_param'"]
+    Param1 -> NameA [label="'name'"]
+    OldEvalStack -> Call [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> CallString [label="'phase'",color="green",penwidth=4]
+    Frame -> ReturnValue [label="'returnvalue'"]
+
+    NewFrame -> NSymbols [label="'symbols'"]
+    NewFrame -> Frame [label="'prev'"]
+    NewFrame -> Call [label="'caller'"]
+    NewFrame -> Body [label="'IP'"]
+    Signature -> Body [label="'body'"]
+    Signature -> Params [label="'params'"]
+
+    NSymbols -> mid [arrowhead="none",color="green",penwidth=4]
+    mid -> NVariable [color="green",penwidth=4]
+    NVariable -> ReturnValue [color="green",label="'value'",penwidth=4]
+    mid -> ParamA [color="green",penwidth=4]
+    Params -> ParamA [label="a"]
+}

+ 39 - 0
doc/al_rules/rule_call__params-next.dot

@@ -0,0 +1,39 @@
+digraph {
+    node [shape="point"]
+    Call [label="Call",shape="oval"]
+    NewEvalStack [color="green"]
+    NewPhase [label="'init'",color="green",shape="oval"]
+    NVariable [color="green"]
+    mid [color="green",width=0]
+    NameA [label="a",shape="oval"]
+    
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Call [label="'IP'",color="blue",style="dashed"]
+    Frame -> Param2Value [label="'IP'",color="green",penwidth=4]
+    Param2 -> Param2Value [label="'value'"]
+    Frame -> Param2 [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Param1 -> Param2 [label="'next_param'"]
+    Param2 -> Param3 [label="'next_param'"]
+    Param1 -> NameA [label="'name'"]
+    OldEvalStack -> Call [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> Param3 [label="'phase'",color="green",penwidth=4]
+    Frame -> ReturnValue [label="'returnvalue'"]
+
+    NewFrame -> NSymbols [label="'symbols'"]
+    NewFrame -> Frame [label="'prev'"]
+    NewFrame -> Call [label="'caller'"]
+    NewFrame -> Body [label="'IP'"]
+    Signature -> Body [label="'body'"]
+    Signature -> Params [label="'params'"]
+
+    NSymbols -> mid [arrowhead="none",color="green",penwidth=4]
+    mid -> NVariable [color="green",penwidth=4]
+    NVariable -> ReturnValue [color="green",label="'value'",penwidth=4]
+    mid -> ParamA [color="green",penwidth=4]
+    Params -> ParamA [label="a"]
+}

+ 21 - 0
doc/al_rules/rule_call__resolve-no-params.dot

@@ -0,0 +1,21 @@
+digraph {
+    node [shape="point"]
+    Call [label="Call",shape="oval"]
+    CallString [label="'call'",shape="oval",color="green"]
+    Phase [label="'init'",shape="oval"]
+    NewEvalStack [color="green"]
+    Param [color="red"]
+    
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Call [label="'IP'",color="blue",style="dashed"]
+    Frame -> Phase [label="'phase'"]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Call -> Func [label="'func'"]
+    Call -> Param [label="'params'",color="red",style="dotted"]
+    Frame -> Func [label="'IP'",color="green",penwidth=4]
+    OldEvalStack -> Call [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> CallString [label="'phase'",color="green",penwidth=4]
+}

+ 19 - 0
doc/al_rules/rule_call__resolve-params.dot

@@ -0,0 +1,19 @@
+digraph {
+    node [shape="point"]
+    Call [label="Call",shape="oval"]
+    Phase [label="'init'",shape="oval"]
+    NewEvalStack [color="green"]
+    
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Call [label="'IP'",color="blue",style="dashed"]
+    Frame -> Phase [label="'phase'"]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Call -> Func [label="'func'"]
+    Call -> Param [label="'params'"]
+    Frame -> Func [label="'IP'",color="green",penwidth=4]
+    OldEvalStack -> Call [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> Param [label="'phase'",color="green",penwidth=4]
+}

+ 20 - 0
doc/al_rules/rule_const.dot

@@ -0,0 +1,20 @@
+digraph {
+    Root [shape="point"]
+    UserRoot [shape="point"]
+    Frame [shape="point"]
+    n [shape="point"]
+    OldReturnValue [shape="point"]
+
+    OldPhase [label="'init'",color="blue"]
+    NewPhase [label="'finish'",color="green"]
+    OldIP [label="Const"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> OldPhase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> OldIP [label="'IP'"]
+    OldIP -> n [label="'node'"]
+    Frame -> n [label="'returnvalue'",color="green",penwidth=4]
+    Frame -> OldReturnValue [label="'returnvalue'",color="blue",style="dashed"]
+}

+ 16 - 0
doc/al_rules/rule_continue.dot

@@ -0,0 +1,16 @@
+digraph {
+    Root [shape="point"]
+    UserRoot [shape="point"]
+    Frame [shape="point"]
+
+    OldPhase [label="'init'"]
+    OldIP [label="Break"]
+    NewIP [label="While"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> OldPhase [label="'phase'"]
+    Frame -> OldIP [label="'IP'",color="blue",style="dashed"]
+    Frame -> NewIP [label="'IP'",color="green",penwidth=4]
+    OldIP -> NewIP [label="'while'"]
+}

+ 25 - 0
doc/al_rules/rule_declare__init.dot

@@ -0,0 +1,25 @@
+digraph {
+    Root [shape="point"]
+    UserRoot [shape="point"]
+    Frame [shape="point"]
+
+    OldPhase [label="'init'",color="blue"]
+    NewPhase [label="'finish'",color="green"]
+    IP [label="Declare"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> OldPhase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> IP [label="'IP'"]
+    IP -> Formal [label="'var'"]
+
+    Symbols [shape="point"]
+    Empty [shape="point",color="green"]
+    Formal [shape="point"]
+    Frame -> Symbols [label="'symbols'"]
+    Symbols -> mid [arrowhead="none", color="green",penwidth=4]
+    mid [shape="point",color="green"]
+    mid -> Empty [color="green",penwidth=4]
+    mid -> Formal [color="green",penwidth=4]
+}

+ 25 - 0
doc/al_rules/rule_global__init.dot

@@ -0,0 +1,25 @@
+digraph {
+    Root [shape="point"]
+    UserRoot [shape="point"]
+    Frame [shape="point"]
+
+    OldPhase [label="'init'",color="blue"]
+    NewPhase [label="'finish'",color="green"]
+    IP [label="Global"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> GlobalSymbols [label="globals"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> OldPhase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> IP [label="'IP'"]
+    IP -> Formal [label="'var'"]
+
+    GlobalSymbols [shape="point"]
+    Empty [shape="point",color="green"]
+    Formal [shape="point"]
+    GlobalSymbols -> mid [arrowhead="none", color="green",penwidth=4]
+    mid [shape="point",color="green"]
+    mid -> Empty [color="green",penwidth=4]
+    mid -> Formal [color="green",penwidth=4]
+}

+ 19 - 0
doc/al_rules/rule_if__cond.dot

@@ -0,0 +1,19 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'init'",shape="oval"]
+    Inst [label="If",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'cond'",shape="oval",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Cond [label="'cond'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Cond [label="'IP'",color="green",penwidth=4]
+}

+ 23 - 0
doc/al_rules/rule_if__false-else.dot

@@ -0,0 +1,23 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'cond'",shape="oval"]
+    Inst [label="If",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'finish'",shape="oval",color="green"]
+    ReturnValue [label="False",shape="oval"]
+    NewPhase [label="'init'",shape="oval",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Block [label="'else'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Block [label="'IP'",color="green",penwidth=4]
+    Frame -> ReturnValue [label="'returnvalue'"]
+}

+ 16 - 0
doc/al_rules/rule_if__false-nothing.dot

@@ -0,0 +1,16 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'cond'",shape="oval",color="blue"]
+    NewPhase [label="'finish'",shape="oval",color="green"]
+    Inst [label="If",shape="oval"]
+    ReturnValue [label="False",shape="oval"]
+    Block [color="red"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'"]
+    Inst -> Block [label="'else'",color="red",style="dotted"]
+    Frame -> ReturnValue [label="'returnvalue'"]
+}

+ 23 - 0
doc/al_rules/rule_if__true.dot

@@ -0,0 +1,23 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'cond'",shape="oval",color="blue"]
+    Inst [label="If",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'finish'",shape="oval",color="green"]
+    NewPhase [label="'init'",shape="oval",color="green"]
+    ReturnValue [label="True",shape="oval"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Block [label="'then'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Block [label="'IP'",color="green",penwidth=4]
+    Frame -> ReturnValue [label="'returnvalue'"]
+}

+ 25 - 0
doc/al_rules/rule_input.dot

@@ -0,0 +1,25 @@
+digraph {
+    Root [shape="point"]
+    UserRoot [shape="point"]
+    Frame [shape="point"]
+    InputNext [shape="point"]
+    IP [label="Input"]
+    Value [shape="point"]
+
+    OldPhase [label="'init'",color="blue"]
+    NewPhase [label="'finish'",color="green"]
+    OldReturnvalue [shape="point",color="blue"]
+    Input [shape="point",color="blue"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    UserRoot -> Input [label="'input'",color="blue",style="dashed"]
+    Input -> InputNext [label="'next'",color="blue",style="dashed"]
+    UserRoot -> InputNext [label="'input'",color="green",penwidth=4]
+    Input -> Value [label="'value'",color="blue",style="dashed"]
+    Frame -> OldPhase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> OldReturnvalue [label="'returnvalue'",color="blue",style="dashed"]
+    Frame -> Value [label="'returnvalue'",color="green",penwidth=4]
+    Frame -> IP [label="'IP'"]
+}

+ 13 - 0
doc/al_rules/rule_next__next.dot

@@ -0,0 +1,13 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'finish'",color="blue",shape="oval"]
+    NewPhase [label="'init'",color="green",shape="oval"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> NextInst [label="'next'"]
+    Frame -> NextInst [label="'IP'",color="green",penwidth=4]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+}

+ 19 - 0
doc/al_rules/rule_next__no-next.dot

@@ -0,0 +1,19 @@
+digraph {
+    node [shape="point"]
+    Phase [color="blue",label="'finish'",shape="oval"]
+    NoInst [color="red"]
+    NewEvalStack [color="blue"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> NoInst [label="'next'",color="red",style="dotted"]
+    Frame -> NextInst [label="'IP'",color="green",penwidth=4]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NextPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> NewEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="blue",style="dashed"]
+    OldEvalStack -> NextInst [label="'inst'",color="blue",style="dashed"]
+    OldEvalStack -> NextPhase [label="'phase'",color="blue",style="dashed"]
+}

+ 19 - 0
doc/al_rules/rule_output__init.dot

@@ -0,0 +1,19 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'init'",shape="oval"]
+    Inst [label="Output",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'output'",shape="oval",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Cond [label="'value'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Cond [label="'IP'",color="green",penwidth=4]
+}

+ 23 - 0
doc/al_rules/rule_output__output.dot

@@ -0,0 +1,23 @@
+digraph {
+    Root [shape="point"]
+    UserRoot [shape="point"]
+    Frame [shape="point"]
+    IP [label="Output"]
+
+    OldPhase [label="'output'",color="blue"]
+    NewPhase [label="'finish'",color="green"]
+    Returnvalue [shape="point"]
+    Output [shape="point"]
+    OutputNext [shape="point",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    UserRoot -> Output [label="'last_output'",color="blue",style="dashed"]
+    Output -> OutputNext [label="'next'",color="green",penwidth=4]
+    UserRoot -> OutputNext [label="'last_output'",color="green",penwidth=4]
+    Output -> Returnvalue [label="'value'",color="green",penwidth=4]
+    Frame -> OldPhase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Returnvalue [label="'returnvalue'"]
+    Frame -> IP [label="'IP'"]
+}

+ 27 - 0
doc/al_rules/rule_resolve__no-attr-global.dot

@@ -0,0 +1,27 @@
+digraph {
+    node [shape="point"]
+    Inst [shape="oval",label="Resolve"]
+    Phase [shape="oval",label="'init'",color="blue"]
+    NewPhase [shape="oval",label="'finish'",color="green"]
+    mid [width=0]
+    mid2 [width=0]
+    NonExisting [color="red"]
+
+    Root -> UserRoot [label="username"]
+    Root -> Global [label="'__global'"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Inst [label="'IP'"]
+    Frame -> NewReturnValue [label="'returnvalue'",color="green",penwidth=4]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Symbols -> mid [arrowhead="none",color="red",style="dotted"]
+    mid -> NonExisting [color="red",style="dotted"]
+    mid -> Var [color="red",style="dotted",constraint="none"]
+    Frame -> ReturnValue [label="'returnvalue'",color="blue",style="dashed"]
+    Frame -> Symbols [label="'symbols'"]
+    Inst -> Var [label="'var'"]
+
+    Global -> mid2 [arrowhead="none"]
+    mid2 -> NewReturnValue
+    mid2 -> Var [constraint="none"]
+}

+ 20 - 0
doc/al_rules/rule_resolve__no-attr.dot

@@ -0,0 +1,20 @@
+digraph {
+    node [shape="point"]
+    Inst [shape="oval",label="Resolve"]
+    Phase [shape="oval",label="'init'",color="blue"]
+    NewPhase [shape="oval",label="'finish'",color="green"]
+    mid [width=0]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Inst [label="'IP'"]
+    Frame -> NewReturnValue [label="'returnvalue'",color="green",penwidth=4]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Symbols -> mid [arrowhead="none"]
+    mid -> NewReturnValue
+    mid -> Var
+    Frame -> ReturnValue [label="'returnvalue'",color="blue",style="dashed"]
+    Frame -> Symbols [label="'symbols'"]
+    Inst -> Var [label="'var'"]
+}

+ 16 - 0
doc/al_rules/rule_return__eval.dot

@@ -0,0 +1,16 @@
+digraph {
+    node [shape="point"]
+    Frame [color="blue"]
+    Phase [label="'eval'",shape="oval",color="blue"]
+    Inst [label="Return",shape="oval"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'",color="blue",style="dashed"]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> PrevFrame [label="'prev'",color="blue",style="dashed"]
+    Frame -> ReturnValue [label="'returnvalue'",color="blue",style="dashed"]
+    PrevFrame -> ReturnValue [label="'returnvalue'",color="green",penwidth=4]
+    UserRoot -> PrevFrame [label="'frame'",color="green",penwidth=4]
+    PrevFrame -> OldReturnValue [label="'returnvalue'",color="blue",style="dashed"]
+}

+ 15 - 0
doc/al_rules/rule_return__no-value.dot

@@ -0,0 +1,15 @@
+digraph {
+    node [shape="point"]
+    Frame [color="blue"]
+    Phase [label="'init'",shape="oval",color="blue"]
+    Inst [label="Return",shape="oval"]
+    Value [color="red"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'",color="blue",style="dashed"]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> PrevFrame [label="'prev'",color="blue",style="dashed"]
+    UserRoot -> PrevFrame [label="'frame'",color="green",penwidth=4]
+    Inst -> Value [label="'value'",color="red",style="dotted"]
+}

+ 19 - 0
doc/al_rules/rule_return__value.dot

@@ -0,0 +1,19 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'init'",shape="oval"]
+    Inst [label="Return",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'eval'",shape="oval",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Cond [label="'value'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Cond [label="'IP'",color="green",penwidth=4]
+}

+ 19 - 0
doc/al_rules/rule_while__cond.dot

@@ -0,0 +1,19 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'init'",shape="oval"]
+    Inst [label="While",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'cond'",shape="oval",color="green"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'"]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Cond [label="'cond'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Cond [label="'IP'",color="green",penwidth=4]
+}

+ 14 - 0
doc/al_rules/rule_while__false.dot

@@ -0,0 +1,14 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'cond'",shape="oval",color="blue"]
+    NewPhase [label="'finish'",shape="oval",color="green"]
+    Inst [label="While",shape="oval"]
+    ReturnValue [label="False",shape="oval"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'"]
+    Frame -> ReturnValue [label="'returnvalue'"]
+}

+ 23 - 0
doc/al_rules/rule_while__true.dot

@@ -0,0 +1,23 @@
+digraph {
+    node [shape="point"]
+    Phase [label="'cond'",shape="oval",color="blue"]
+    NewPhase [label="'init'",shape="oval",color="green"]
+    Inst [label="While",shape="oval"]
+    NewEvalStack [color="green"]
+    StackPhase [label="'init'",shape="oval",color="green"]
+    ReturnValue [label="True",shape="oval"]
+
+    Root -> UserRoot [label="username"]
+    UserRoot -> Frame [label="'frame'"]
+    Frame -> Phase [label="'phase'",color="blue",style="dashed"]
+    Frame -> NewPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> NewEvalStack [label="'evalstack'",color="green",penwidth=4]
+    Frame -> OldEvalStack [label="'evalstack'",color="blue",style="dashed"]
+    NewEvalStack -> OldEvalStack [label="'prev'",color="green",penwidth=4]
+    Frame -> Inst [label="'IP'",color="blue",style="dashed"]
+    Inst -> Block [label="'body'"]
+    OldEvalStack -> Inst [label="'inst'",color="green",penwidth=4]
+    OldEvalStack -> StackPhase [label="'phase'",color="green",penwidth=4]
+    Frame -> Block [label="'IP'",color="green",penwidth=4]
+    Frame -> ReturnValue [label="'returnvalue'"]
+}