lime/examples/calc.lime

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/$ ')'
.