factorial.dot 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. digraph {
  2. node[shape="point"]
  3. mid_var_1[width="0"]
  4. mid_var_2[width="0"]
  5. mid_var_3[width="0"]
  6. mid_var_4[width="0"]
  7. HELP_var_1 [label="integer_subtraction",shape="rectangle"]
  8. HELP_var_2 [label="integer_multiplication",shape="rectangle"]
  9. HELP_var_3 [label="integer_gt",shape="rectangle"]
  10. HELP_var_4 [label="factorial",shape="rectangle"]
  11. var_1 -> HELP_var_1 [style="dotted"]
  12. var_2 -> HELP_var_2 [style="dotted"]
  13. var_3 -> HELP_var_3 [style="dotted"]
  14. var_4 -> HELP_var_4 [style="dotted"]
  15. root -> globals [label="__globals"]
  16. globals -> mid_var_1 [arrowhead="none"]
  17. mid_var_1 -> var_1 [constraint="false"]
  18. mid_var_1 -> var_value_1
  19. var_value_1 -> signature_1 [label="value"]
  20. signature_1 -> body_1 [label="body"]
  21. signature_1 -> params_1 [label="params"]
  22. params_1 -> params_1_a [label="a"]
  23. params_1 -> params_1_b [label="b"]
  24. globals -> mid_var_2 [arrowhead="none"]
  25. mid_var_2 -> var_2 [constraint="false"]
  26. mid_var_2 -> var_value_2
  27. var_value_2 -> signature_2 [label="value"]
  28. signature_2 -> body_2 [label="body"]
  29. signature_2 -> params_2 [label="params"]
  30. params_2 -> params_2_a [label="a"]
  31. params_2 -> params_2_b [label="b"]
  32. globals -> mid_var_3 [arrowhead="none"]
  33. mid_var_3 -> var_3 [constraint="false"]
  34. mid_var_3 -> var_value_3
  35. var_value_3 -> signature_3 [label="value"]
  36. signature_3 -> body_3 [label="body"]
  37. signature_3 -> params_3 [label="params"]
  38. params_3 -> params_3_a [label="a"]
  39. params_3 -> params_3_b [label="b"]
  40. globals -> mid_var_4 [arrowhead="none"]
  41. mid_var_4 -> var_4 [constraint="false"]
  42. mid_var_4 -> var_value_4
  43. var_value_4 -> signature_4 [label="value"]
  44. signature_4 -> if_1 [label="body"]
  45. signature_4 -> params_4 [label="params"]
  46. params_4 -> params_4_a [label="n"]
  47. // The actual function begins here
  48. value_1 [shape="oval",label="1"]
  49. value_2 [shape="oval",label="1"]
  50. value_3 [shape="oval",label="1"]
  51. value_a [shape="oval",label="a"]
  52. value_b [shape="oval",label="b"]
  53. value_a2 [shape="oval",label="a"]
  54. value_b2 [shape="oval",label="b"]
  55. value_a3 [shape="oval",label="a"]
  56. value_b3 [shape="oval",label="b"]
  57. value_n [shape="oval",label="n"]
  58. value_n2 [shape="oval",label="n"]
  59. access_resolve_1 [shape="oval",label="ACCESS"]
  60. access_resolve_3 [shape="oval",label="ACCESS"]
  61. access_resolve_4 [shape="oval",label="ACCESS"]
  62. access_resolve_5 [shape="oval",label="ACCESS"]
  63. access_resolve_7 [shape="oval",label="ACCESS"]
  64. if_1 [shape="oval",label="IF"]
  65. call_1 [shape="oval",label="CALL"]
  66. call_2 [shape="oval",label="CALL"]
  67. call_3 [shape="oval",label="CALL"]
  68. call_4 [shape="oval",label="CALL"]
  69. resolve_1 [shape="oval",label="RESOLVE"]
  70. resolve_2 [shape="oval",label="RESOLVE"]
  71. resolve_3 [shape="oval",label="RESOLVE"]
  72. resolve_4 [shape="oval",label="RESOLVE"]
  73. resolve_5 [shape="oval",label="RESOLVE"]
  74. resolve_6 [shape="oval",label="RESOLVE"]
  75. resolve_10[label="RESOLVE",shape="oval"]
  76. access_1 [shape="oval",label="ACCESS"]
  77. access_2 [shape="oval",label="ACCESS"]
  78. access_3 [shape="oval",label="ACCESS"]
  79. return_1 [shape="oval",label="RETURN"]
  80. return_2 [shape="oval",label="RETURN"]
  81. const_1 [shape="oval",label="CONST"]
  82. const_2 [shape="oval",label="CONST"]
  83. const_3 [shape="oval",label="CONST"]
  84. if_1 -> call_1 [label="cond"]
  85. if_1 -> return_2 [label="then"]
  86. if_1 -> return_1 [label="else"]
  87. // Condition
  88. call_1 -> access_resolve_1 [label="func"]
  89. access_resolve_1 -> resolve_1 [label="var"]
  90. resolve_1 -> var_3 [label="var"]
  91. call_1 -> param_1a [label="params"]
  92. param_1a -> value_a [label="name"]
  93. param_1a -> access_1 [label="value"]
  94. access_1 -> resolve_2 [label="var"]
  95. resolve_2 -> params_4_a [label="var",constraint="false"]
  96. param_1a -> param_1b [label="next_param"]
  97. param_1b -> value_b [label="name"]
  98. param_1b -> const_1 [label="value"]
  99. const_1 -> value_1 [label="node"]
  100. call_1 -> param_1b [label="last_param"]
  101. // Else
  102. return_1 -> const_2 [label="value"]
  103. const_2 -> value_2 [label="node"]
  104. // Then
  105. return_2 -> call_2 [label="value"]
  106. call_2 -> access_resolve_3 [label="func"]
  107. access_resolve_3 -> resolve_3 [label="var"]
  108. resolve_3 -> var_2 [label="var"]
  109. call_2 -> param_2a [label="params"]
  110. call_2 -> param_2b [label="last_param"]
  111. param_2a -> value_a2 [label="name"]
  112. param_2a -> param_2b [label="next_param"]
  113. param_2a -> access_2 [label="value"]
  114. access_2 -> resolve_10 [label="var"]
  115. resolve_10 -> params_4_a [label="var"]
  116. param_2b -> value_b2 [label="name"]
  117. param_2b -> call_3 [label="value"]
  118. // call to self
  119. call_3 -> access_resolve_4 [label="func"]
  120. access_resolve_4 -> resolve_4 [label="var"]
  121. resolve_4 -> var_4 [label="var"]
  122. call_3 -> param_3a [label="params"]
  123. call_3 -> param_3a [label="last_param"]
  124. param_3a -> value_n [label="name"]
  125. param_3a -> call_4 [label="value"]
  126. // Subtraction
  127. call_4 -> access_resolve_5 [label="func"]
  128. access_resolve_5 -> resolve_5 [label="var"]
  129. resolve_5 -> var_1 [label="var"]
  130. call_4 -> param_4a [label="params"]
  131. param_4a -> value_a3 [label="name"]
  132. param_4a -> access_3 [label="value"]
  133. access_3 -> resolve_6 [label="var"]
  134. resolve_6 -> params_4_a [label="var"]
  135. param_4a -> param_4b [label="next_param"]
  136. param_4b -> value_b3 [label="name"]
  137. param_4b -> const_3 [label="value"]
  138. const_3 -> value_3 [label="node"]
  139. call_4 -> param_4b [label="last_param"]
  140. // Global initial IP
  141. const_4 [shape="oval",label="CONST"]
  142. value_4 [shape="oval",label="3"]
  143. resolve_7 [shape="oval",label="RESOLVE"]
  144. invoke_factorial [shape="oval",label="CALL"]
  145. globals -> invoke_factorial [label="__IP"]
  146. invoke_factorial -> access_resolve_7 [label="func"]
  147. access_resolve_7 -> resolve_7 [label="var"]
  148. resolve_7 -> var_4 [label="var"]
  149. invoke_factorial -> invoke_params [label="params"]
  150. invoke_factorial -> invoke_params [label="last_param"]
  151. invoke_params -> const_4 [label="value"]
  152. invoke_params -> value_n2 [label="name"]
  153. const_4 -> value_4 [label="node"]
  154. }