rendered paste body%token INTEGER VARIABLE
%left '+' '-'
%left '*' '/'
%{
#include<stdio.h>
void yyerror(char *);
int yylex(void);
int sym[26];
FILE *yyin;
%}
%%
program:
program statement '\n'
|error '\n' { yyclearin;yyerrok;printf("error in");}
|
;
statement:
|expr { printf("%d\n", $1); }
| VARIABLE '=' expr { sym[$1] = $3; }
;
expr:
INTEGER
| VARIABLE { $$ = sym[$1]; }
| expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1 / $3; }
| '(' expr ')' { $$ = $2; }
;
%%
void yyerror(char *s) {
fprintf(stderr, "%s\n", s);
return;
}
int main(void) {
yyin=fopen("inp.dat","r");
yyparse();
return 0;
}