%class calc %start stmt %left '+' '-' %left '*' '/' 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/$ ')' .