You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
986 B
45 lines
986 B
%{ |
|
#include "expression.h" |
|
|
|
int yylex(); |
|
int yyerror(char*); |
|
|
|
%} |
|
|
|
%parse-param {union expression** root}; |
|
|
|
%union { |
|
union expression* exp; |
|
} |
|
|
|
%token WEBDICE_TOKEN_EOL |
|
%token <exp> WEBDICE_TOKEN_CONST |
|
%token <exp> 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 <exp> 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 { (*root) = NULL; } |
|
| lines expression WEBDICE_TOKEN_EOL { (*root) = $2; } |
|
; |
|
|
|
%%
|
|
|