/* calc2.y * YACC desk calculator example, adopted from ALSU, sec. 4.9 * handles double arithmetic, uses lex as scanner * * to compile, use: lex calc2.l yacc calc2.y gcc -o calc2 y.tab.c -ly */ %{ #include #define YYSTYPE double %} %token NUM %% lines : lines expr '\n' { printf("= %g\n", $2); } | lines '\n' | /* epsilon */ | error '\n' ; expr : expr '+' term { $$ = $1 + $3; } | expr '-' term { $$ = $1 - $3; } | term { $$ = $1; /* default rule */ } ; term : term '*' factor { $$ = $1 * $3; } | term '/' factor { $$ = $1 / $3; } | factor ; factor : '(' expr ')' { $$ = $2; } | NUM ; %% #include "lex.yy.c"