From df5294e88cc409d7adf3e10666bfcb40e34472b9 Mon Sep 17 00:00:00 2001 From: Dibyendu Majumdar Date: Sun, 1 Oct 2023 18:01:54 +0100 Subject: 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 --- chapter03/docs/03-graph2.gv | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 chapter03/docs/03-graph2.gv (limited to 'chapter03/docs/03-graph2.gv') 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=< + + +
0abc
>]; + } + 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; +} -- cgit v1.2.3