mirror of https://github.com/vitalif/lime
29 lines
669 B
Plaintext
29 lines
669 B
Plaintext
%class calc
|
|
%start stmt
|
|
|
|
%left '+' '-'
|
|
%left '*' '/' '%'
|
|
%right '^'
|
|
%right T_INC
|
|
|
|
stmt = exp { echo " -> "; echo $1; echo "\n"; }
|
|
| var/v '=' exp/e {
|
|
echo "$v = $e\n";
|
|
set_variable($v, $e);
|
|
}
|
|
.
|
|
|
|
|
|
exp = num
|
|
| var { $$ = get_variable($1); }
|
|
| exp '+' exp { $$ = '(' . $1 . ' + ' . $3 . ')'; }
|
|
| exp '-' exp { $$ = '(' . $1 . ' - ' . $3 . ')'; }
|
|
| exp '*' exp { $$ = '(' . $1 . ' * ' . $3 . ')'; }
|
|
| exp '/' exp { $$ = '(' . $1 . ' / ' . $3 . ')'; }
|
|
| exp '^' exp { $$ = '(' . $1 . ' ^ ' . $3 . ')'; }
|
|
| exp '%' exp { $$ = '(' . $1 . ' % ' . $3 . ')'; }
|
|
| '+' exp %prec T_INC { $$ = '(+ ' . $2 . ')'; }
|
|
| '-' exp %prec T_INC { $$ = '(- ' . $2 . ')'; }
|
|
| '(' exp/$ ')'
|
|
.
|