%{ #include #include "syntree.h" #define YYDEBUG 1 extern int yylex(); extern int yyerror(char* s); int table[26]; %} %left '+' '-' %left '*' '/' %union { int num; char chr; nodeType* ptr; } %token PRINT %token NUM %token ID %type expr stmt %% S : S stmt { interpret($2, table); freeNode($2); } | ; stmt : PRINT '(' expr ')' ';' { $$ = unOp(PRINT, $3); } | ID '=' expr ';' { $$ = binOp('=', id($1 - 'a'), $3); } ; expr : expr '+' expr { $$ = binOp('+', $1, $3); } | expr '-' expr { $$ = binOp('-', $1, $3); } | expr '*' expr { $$ = binOp('*', $1, $3); } | expr '/' expr { $$ = binOp('/', $1, $3); } | '(' expr ')' { $$ = $2; } | NUM { $$ = con($1); } | ID { $$ = id($1 - 'a'); } ; %% int main() { yydebug = 0; yyparse(); return 0; }