reworked expressions to implement precedence properly

git-svn-id: svn://anubis/fart/trunk@367 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2010-10-08 01:59:30 +00:00
parent c77697c39d
commit 4e3ce00056
2 changed files with 11 additions and 19 deletions

View File

@ -355,16 +355,20 @@ vector3: LESS expression COMMA expression COMMA expression GREATER {
} }
; ;
expression: term { $$ = $1; } expression: expression TIMES expression { $$ = new BinOpNode('*', $1, $3); }
| expression TIMES term { $$ = new BinOpNode('*', $1, $3); } | expression DIVIDE expression { $$ = new BinOpNode('/', $1, $3); }
| expression DIVIDE term { $$ = new BinOpNode('/', $1, $3); } | expression PLUS expression { $$ = new BinOpNode('+', $1, $3); }
| expression MOD term { $$ = new BinOpNode('%', $1, $3); } | expression MINUS expression { $$ = new BinOpNode('-', $1, $3); }
| expression POW term { $$ = new BinOpNode('^', $1, $3); } | expression MOD expression { $$ = new BinOpNode('%', $1, $3); }
| expression POW expression { $$ = new BinOpNode('^', $1, $3); }
| MINUS expression %prec UMINUS { | MINUS expression %prec UMINUS {
$$ = new BinOpNode('-', new NumberNode(0.0), $2); $$ = new BinOpNode('-', new NumberNode(0.0), $2);
} }
| stmt_expression { $$ = $1; } | stmt_expression { $$ = $1; }
| function_call { $$ = $1; } | function_call { $$ = $1; }
| number { $$ = $1; }
| VARREF { $$ = $1; }
| LPAREN expression RPAREN { $$ = $2; }
; ;
maybe_expression: /* empty */ maybe_expression: /* empty */
@ -405,16 +409,6 @@ bool_expression: expression LESS expression {
} }
; ;
term: factor { $$ = $1; }
| term PLUS factor { $$ = new BinOpNode('+', $1, $3); }
| term MINUS factor { $$ = new BinOpNode('-', $1, $3); }
;
factor: number { $$ = $1; }
| VARREF { $$ = $1; }
| LPAREN expression RPAREN { $$ = $2; }
;
assignment: VARREF ASSIGN expression { assignment: VARREF ASSIGN expression {
$$ = new AssignmentNode($1, $3); $$ = new AssignmentNode($1, $3);
} }

View File

@ -105,8 +105,6 @@ scene
light light
{ {
position <100, -100, 100> position <100, -100, 100>
radius 0.3
jitter 3
} }
plane plane