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 TIMES term { $$ = new BinOpNode('*', $1, $3); }
| expression DIVIDE term { $$ = new BinOpNode('/', $1, $3); }
| expression MOD term { $$ = new BinOpNode('%', $1, $3); }
| expression POW term { $$ = new BinOpNode('^', $1, $3); }
expression: expression TIMES expression { $$ = new BinOpNode('*', $1, $3); }
| expression DIVIDE expression { $$ = new BinOpNode('/', $1, $3); }
| expression PLUS expression { $$ = new BinOpNode('+', $1, $3); }
| expression MINUS expression { $$ = new BinOpNode('-', $1, $3); }
| expression MOD expression { $$ = new BinOpNode('%', $1, $3); }
| expression POW expression { $$ = new BinOpNode('^', $1, $3); }
| MINUS expression %prec UMINUS {
$$ = new BinOpNode('-', new NumberNode(0.0), $2);
}
| stmt_expression { $$ = $1; }
| function_call { $$ = $1; }
| number { $$ = $1; }
| VARREF { $$ = $1; }
| LPAREN expression RPAREN { $$ = $2; }
;
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 {
$$ = new AssignmentNode($1, $3);
}

View File

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