|
|
|
%{
|
|
|
|
#include <stdlib.h>
|
|
|
|
#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 <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 {}
|
|
|
|
| lines expression WEBDICE_TOKEN_EOL { (*root) = $2; }
|
|
|
|
;
|
|
|
|
|
|
|
|
%%
|