%{ #include #include #include #include "lex.yy.c" extern int yylval; int symcount=0; typedef int YYSTYPE; %} %token IF %token ELSE %token ENDIF %token ID %token ASSIGN %token NUM %token PRINT %left '+' '-' %left '*' '/' %left UMINUS %token THEN %start stmtlist %% stmtlist: stmtlist stmt | stmt ; stmt: ID ASSIGN expr ';' { sym_tbl[$1].value=$3;} | PRINT expr ';' { printf("%d\n", $2); } ; expr : expr '+' expr { $$=$1+$3;} | expr '-' expr { $$ =$1-$3; } | expr '/' expr { $$ = $1/$3;} | expr '*' expr { $$ = $1*$3; } | '(' expr ')' { $$ = $2;} | ID { $$=sym_tbl[$1].value;} | NUM {$$ = sym_tbl[$1].value;} ; %% void main() { do { yyparse(); } while(!feof(stdin)); } void yyerror(char *msg) { printf("%s\n",msg); }