/vendor/peg/examples/calc.leg
http://github.com/feyeleanor/RubyGoLightly · Unknown · 46 lines · 36 code · 10 blank · 0 comment · 0 complexity · b58454ed1688209cb3005885466e0df4 MD5 · raw file
- %{
- #include <stdio.h>
- int vars[26];
- %}
- Stmt = - e:Expr EOL { printf("%d\n", e); }
- | ( !EOL . )* EOL { printf("error\n"); }
- Expr = i:ID ASSIGN s:Sum { $$= vars[i]= s; }
- | s:Sum { $$= s; }
- Sum = l:Product
- ( PLUS r:Product { l += r; }
- | MINUS r:Product { l -= r; }
- )* { $$= l; }
- Product = l:Value
- ( TIMES r:Value { l *= r; }
- | DIVIDE r:Value { l /= r; }
- )* { $$= l; }
- Value = i:NUMBER { $$= atoi(yytext); }
- | i:ID !ASSIGN { $$= vars[i]; }
- | OPEN i:Expr CLOSE { $$= i; }
- NUMBER = < [0-9]+ > - { $$= atoi(yytext); }
- ID = < [a-z] > - { $$= yytext[0] - 'a'; }
- ASSIGN = '=' -
- PLUS = '+' -
- MINUS = '-' -
- TIMES = '*' -
- DIVIDE = '/' -
- OPEN = '(' -
- CLOSE = ')' -
- - = [ \t]*
- EOL = '\n' | '\r\n' | '\r' | ';'
- %%
- int main()
- {
- while (yyparse());
- return 0;
- }