mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-28 08:59:37 -05:00
47 lines
800 B
Plaintext
47 lines
800 B
Plaintext
|
%{
|
||
|
#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;
|
||
|
}
|