aboutsummaryrefslogtreecommitdiff
path: root/demos/sample-files/calc.g
blob: aa5b5db4beca4541c33cfb7b86bc718240345729 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-terminal PLUS MINUS TIMES MORE LESS EQUA
          LPAREN RPAREN QMARK COLON NUM;

-nonterminal EP E.

-stacktype { int }.

-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); }.