diff options
| author | kartofen <kartofen.mail.0@protonmail.com> | 2025-08-03 23:53:24 +0300 |
|---|---|---|
| committer | kartofen <kartofen.mail.0@protonmail.com> | 2025-08-03 23:53:24 +0300 |
| commit | 1c83c514c8108fccfec9764da5e4563b98eb871b (patch) | |
| tree | ccc6657a0b24900a17cf90cfd0676c8123492566 /demos/sample-files/calc.g | |
| parent | 059ee9afcc575572f87f224c93288e2835cd1a52 (diff) | |
calc implemented in my grammar
Diffstat (limited to 'demos/sample-files/calc.g')
| -rw-r--r-- | demos/sample-files/calc.g | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/demos/sample-files/calc.g b/demos/sample-files/calc.g new file mode 100644 index 0000000..804e072 --- /dev/null +++ b/demos/sample-files/calc.g @@ -0,0 +1,26 @@ +-terminal PLUS MINUS TIMES MORE LESS EQUA + LPAREN RPAREN QMARK COLON NUM; + +-nonterminal EP E. + +-left LPAREN; +-left 5; +-left TIMES; +-left MINUS PLUS; +-left MORE LESS EQUA; +-left COLON 7; +-left QMARK. + +EP: E { v = A(0); }; + +E: E PLUS E { v = A(0) + A(2); } + | E MINUS E { v = A(0) - A(2); } + | E TIMES E { v = A(0) * A(2); } + | LPAREN E RPAREN { v = A(1); } + | MINUS E { v = - A(1); } + | E QMARK E COLON E { v = A(0) ? A(2) : A(4); } + | E QMARK E { v = A(0) ? A(2) : 0; } + | E MORE E { v = A(0) > A(2); } + | E LESS E { v = A(0) < A(2); } + | E EQUA E { v = A(0) == A(2); } + | NUM { v = A(0); }. |
