summaryrefslogtreecommitdiff
path: root/chapter03/docs/03-graph2.gv
diff options
context:
space:
mode:
authorDibyendu Majumdar <dibyendumajumdar@users.noreply.github.com>2023-10-01 18:01:54 +0100
committerGitHub <noreply@github.com>2023-10-01 10:01:54 -0700
commitdf5294e88cc409d7adf3e10666bfcb40e34472b9 (patch)
treea890d2a65704870a27211613b81f1e950f73a588 /chapter03/docs/03-graph2.gv
parent3f2e9e84e137462272ae1bb592f47cecc362bdff (diff)
downloadSimple-df5294e88cc409d7adf3e10666bfcb40e34472b9.tar.gz
Simple-df5294e88cc409d7adf3e10666bfcb40e34472b9.zip
Chapter 3 - add vars and lexical scope. (#7)
* Chapter 3 - add vars and lexical scope. * Fix typo * Overhaul graph viz Makes the scopes pointing into the graph being build more visually appealing. Constants are a printed with just the constant value. * Fix control edge color * Fix missing grouping operator parse Add a parens test. Shorten names 'Identifier' to 'Id' _lexer.match -> match require() passes a Node thru, so can be flow-coded. Uniform syntax error messages. Handy Lexer.toString for debugging. Drop Optional for null returns; less total code; less objects; less confusion. camelCase some fcns. * All parser helpers return Node, not void. Drop _ret. parseBlock and parseStatement now the same. * CLosely align chap2 and chap3 parsers Mostly whitespace aligned; dragged a few functions around to make more sense. I think the diff from Ch2 and Ch3 is down a few differences about what is a statement, plus all the symbol stuff for scopes and variables. * Add examples illustrating the symbol table creation. * Update docs and comments --------- Co-authored-by: Cliff Click <cliffc@acm.org>
Diffstat (limited to 'chapter03/docs/03-graph2.gv')
-rw-r--r--chapter03/docs/03-graph2.gv29
1 files changed, 29 insertions, 0 deletions
diff --git a/chapter03/docs/03-graph2.gv b/chapter03/docs/03-graph2.gv
new file mode 100644
index 00000000..c6c55028
--- /dev/null
+++ b/chapter03/docs/03-graph2.gv
@@ -0,0 +1,29 @@
+digraph chapter03 {
+ rankdir=BT;
+ subgraph cluster_Nodes {
+ Start1 [ shape=box style=filled fillcolor=yellow label="Start" ];
+ Con_2 [ label="#1" ];
+ Con_3 [ label="#2" ];
+ Con_5 [ label="#3" ];
+ Add6 [ label="Add" ];
+ Return7 [ shape=box style=filled fillcolor=yellow label="Return" ];
+ }
+ node [shape=plaintext];
+ subgraph cluster_0 {
+ scope0 [label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD BGCOLOR="aqua">0</TD><TD PORT="scope0_a">a</TD><TD PORT="scope0_b">b</TD><TD PORT="scope0_c">c</TD></TR>
+ </TABLE>>];
+ }
+ Con_2 -> Start1 [style=dotted];
+ Con_3 -> Start1 [style=dotted];
+ Con_5 -> Start1 [style=dotted];
+ Add6 -> Con_2;
+ Add6 -> Con_5;
+ Return7 -> Start1 [color=red];
+ Return7 -> Add6;
+ edge [style=dashed color=cornflowerblue];
+ scope0:scope0_a -> Con_2;
+ scope0:scope0_b -> Con_3;
+ scope0:scope0_c -> Add6;
+}