%{ #include #include "expression.h" int yylex(); int yyerror(void* scanner, void* lvalp, char* str); %} %pure-parser %lex-param {void *scanner} %parse-param {void *scanner} {union expression** root} %union { union expression* exp; } %token WEBDICE_TOKEN_EOL %token WEBDICE_TOKEN_CONST %token WEBDICE_TOKEN_ROLL %token WEBDICE_TOKEN_LPAREN %token WEBDICE_TOKEN_RPAREN %left WEBDICE_TOKEN_ADD %left WEBDICE_TOKEN_SUB %left WEBDICE_TOKEN_MUL %left WEBDICE_TOKEN_DIV %type expression %start lines %% expression: expression WEBDICE_TOKEN_ADD expression { $$ = webdice_add($1,$3); } | expression WEBDICE_TOKEN_SUB expression { $$ = webdice_sub($1,$3); } | expression WEBDICE_TOKEN_MUL expression { $$ = webdice_mul($1,$3); } | expression WEBDICE_TOKEN_DIV expression { $$ = webdice_div($1,$3); } | WEBDICE_TOKEN_CONST { $$ = $1; } | WEBDICE_TOKEN_ROLL { $$ = $1; } | WEBDICE_TOKEN_LPAREN expression WEBDICE_TOKEN_RPAREN { $$ = $2; } ; lines: | lines WEBDICE_TOKEN_EOL {} | lines expression WEBDICE_TOKEN_EOL { (*root) = $2; } ; %%