%{ #include %} %union { int val; char var; } %token NUMBER %token NAME %type expr %right '=' %left '-' '+' %% stmt: NAME '=' expr { $$ = $3; printf(%c = %d\n, $1, $3); } | expr { printf("= %d\n", $1); } ; expr: expr '+' NUMBER { $$ = $1 + $3; } |expr '-' NUMBER { $$ = $1 - $3; } | NUMBER { $$ = $1; } %% main() {return yyparse();} int yyerror(char *s) { printf(%s\n, s); return 0;}