%{ #include #include "syntree.h" #define YYDEBUG 1 extern int yylex(); extern int yyerror(char* s); %} %left '+' '-' %left '*' '/' %union { int num; nodeType* ptr; } %token PRINT %token NUM %type E %% S : PRINT '(' E ')' ';' { compile($3); printf("print\n"); freeNode($3); } E : E '+' E { $$ = binOp('+', $1, $3); } | E '-' E { $$ = binOp('-', $1, $3); } | E '*' E { $$ = binOp('*', $1, $3); } | E '/' E { $$ = binOp('/', $1, $3); } | '(' E ')' { $$ = $2; } | NUM { $$ = con($1); } ; %% int main() { yydebug = 0; yyparse(); return 0; }