From 57920e5e3a9dbd31653acc97ff702c2b986b4c3e Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Tue, 7 Jul 2020 22:10:02 +0900 Subject: [PATCH] doc: Add graph of the hierarchy of grammatical structures --- doc/parser.dot | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 doc/parser.dot diff --git a/doc/parser.dot b/doc/parser.dot new file mode 100644 index 0000000..e477129 --- /dev/null +++ b/doc/parser.dot @@ -0,0 +1,94 @@ +digraph parser { + expr [label = "expression"]; + assignexpr [label = "assignment-expression", fillcolor="#26c326", style=filled]; + condexpr [label = "conditional-expression", fillcolor="#26c326", style=filled]; + assignop [label = "assignment-operator", fillcolor="#26c326", style=filled]; + unaryexpr [label = "unary-expression"]; + + pfixexpr [label = "postfix-expression"]; + castexpr [label = "cast-expression", fillcolor="#26c326", style=filled]; + unaryop [label = "unary-operator", fillcolor="#d2d2d2", style=filled]; + + priexpr [label = "primary-expression", fillcolor="#26c326", style=filled]; + argexprlist [label = "argument-expression-list"]; + + identifier [label = "identifier", fillcolor="#26c326", style=filled]; + constant [label = "constant", fillcolor="#26c326", style=filled]; + string [label = "string", fillcolor="#26c326", style=filled]; + typename [label = "type-name"]; + + logorexpr [label = "logical-OR-expression", fillcolor="#26c326", style=filled]; + logandexpr [label = "logical-AND-expression", fillcolor="#26c326", style=filled]; + incorexpr [label = "inclusive-OR-expression", fillcolor="#26c326", style=filled]; + excorexpr [label = "exclusive-OR-expression", fillcolor="#26c326", style=filled]; + andexpr [label = "AND-expression", fillcolor="#26c326", style=filled]; + eqexpr [label = "equality-expression", fillcolor="#26c326", style=filled]; + relexpr [label = "relational-expression", fillcolor="#26c326", style=filled]; + shiftexpr [label = "shift-expression", fillcolor="#26c326", style=filled]; + addexpr [label = "additive-expression", fillcolor="#26c326", style=filled]; + mulexpr [label = "multiplicative-expression", fillcolor="#26c326", style=filled]; + + expr -> assignexpr; + assignexpr -> condexpr; + assignexpr -> unaryexpr; + assignexpr -> assignexpr; + assignexpr -> assignop; + + unaryexpr -> unaryop; + unaryexpr -> castexpr; + unaryexpr -> pfixexpr; + unaryexpr -> unaryexpr; + unaryexpr -> typename; + + condexpr -> logorexpr; + condexpr -> expr; + condexpr -> condexpr; + + logorexpr -> logorexpr; + logorexpr -> logandexpr; + + logandexpr -> logandexpr; + logandexpr -> incorexpr; + + incorexpr -> incorexpr; + incorexpr -> excorexpr; + + excorexpr -> excorexpr; + excorexpr -> andexpr; + + andexpr -> andexpr; + andexpr -> eqexpr; + + eqexpr -> relexpr; + eqexpr -> eqexpr; + + relexpr -> shiftexpr; + relexpr -> relexpr; + + shiftexpr -> addexpr; + shiftexpr -> shiftexpr; + + addexpr -> addexpr; + addexpr -> mulexpr; + + mulexpr -> castexpr; + mulexpr -> mulexpr; + + castexpr -> unaryexpr; + castexpr -> castexpr; + castexpr -> typename; + + pfixexpr -> priexpr; + pfixexpr -> pfixexpr; + pfixexpr -> expr; + pfixexpr -> identifier; + pfixexpr -> argexprlist; + + argexprlist -> argexprlist; + argexprlist -> assignexpr; + + priexpr -> identifier; + priexpr -> constant; + priexpr -> string; + priexpr -> expr; +} -- 2.47.3