Author: bernhard
Date: Wed Mar 14 13:57:33 2007
New Revision: 17482
Modified:
trunk/languages/plumhead/TODO
trunk/languages/plumhead/src/partridge/Plumhead.pg
trunk/languages/plumhead/src/partridge/PlumheadPAST.tg
Log:
[Plumhead partridge]
Get associativity right for '1 - 2 - 10'
Modified: trunk/languages/plumhead/TODO
==============================================================================
--- trunk/languages/plumhead/TODO (original)
+++ trunk/languages/plumhead/TODO Wed Mar 14 13:57:33 2007
@@ -1,6 +1,7 @@
# $Id$
TODO:
+ - add --target option for the non-partridge variants
- segfault array_3.php with Partridge antlr3
- unified testing
- Implementation with PGE, make it the default implementation
Modified: trunk/languages/plumhead/src/partridge/Plumhead.pg
==============================================================================
--- trunk/languages/plumhead/src/partridge/Plumhead.pg (original)
+++ trunk/languages/plumhead/src/partridge/Plumhead.pg Wed Mar 14 13:57:33 2007
@@ -72,9 +72,9 @@
rule bitwise_tail { <BITWISE_OP> <adding_expression> }
# BUG: this gets precedence wrong
-rule adding_expression { <multiplying_expression> <adding_tail>? }
+rule adding_expression { <multiplying_expression> <adding_tail>* }
-rule adding_tail { <ADD_OP> <adding_expression> }
+rule adding_tail { <ADD_OP> <multiplying_expression> }
# TODO: this gets precedence wrong
rule multiplying_expression { <unary_expression> <multiplicand>? }
Modified: trunk/languages/plumhead/src/partridge/PlumheadPAST.tg
==============================================================================
--- trunk/languages/plumhead/src/partridge/PlumheadPAST.tg (original)
+++ trunk/languages/plumhead/src/partridge/PlumheadPAST.tg Wed Mar 14
13:57:33 2007
@@ -70,12 +70,12 @@
$P0 = node['statement']
if null $P0 goto handled_statement
- .local pmc iter
- iter = new .Iterator, $P0
+ .local pmc statement_iter
+ statement_iter = new .Iterator, $P0
iter_loop:
- unless iter goto iter_end
+ unless statement_iter goto iter_end
.local pmc cnode, past_else_block, past_condition,
past_expression, past_var, past_array_elem, past_assign, past_rel_expression,
past_echo, past_if, past_if_block, past_sea
- cnode = shift iter
+ cnode = shift statement_iter
if null cnode goto iter_loop
$P1 = cnode['ECHO']
@@ -258,25 +258,30 @@
$P0 = node['adding_expression']
if null $P0 goto no_adding_expression
- .local pmc past_mult, adding_tail, adding_tail_0, past_adding_tail_0
+ .local pmc adding_tail_iter, past_mult, past_prev, adding_tail
+ past = tree.'get'('past', $P0, 'Plumhead::Grammar::expression')
adding_tail = $P0['adding_tail']
- if null adding_tail goto no_adding_tail
- past_mult = tree.'get'('past', $P0,
'Plumhead::Grammar::expression')
- adding_tail_0 = adding_tail[0]
- .local string add_op, pirop
- pirop = 'n_add'
- add_op = adding_tail_0['ADD_OP']
- if add_op != '-' goto not_minus
- pirop = 'n_sub'
- not_minus:
- add_op = 'infix:' . add_op
- past_adding_tail_0 = tree.'get'('past', adding_tail_0,
'Plumhead::Grammar::expression')
- past = new 'PAST::Op'
- past.init( past_mult, past_adding_tail_0, 'name' => add_op,
'pirop' => pirop )
+ if null adding_tail goto handled_expression
+ .local pmc past_prev, cnode
+ adding_tail_iter = new .Iterator, adding_tail
+ iter_loop:
+ unless adding_tail_iter goto iter_end
+ .local pmc cnode
+ cnode = shift adding_tail_iter
+ past_mult = tree.'get'('past', cnode,
'Plumhead::Grammar::expression')
+ past_prev = past
+ .local string add_op, pirop
+ pirop = 'n_add'
+ add_op = cnode['ADD_OP']
+ if add_op != '-' goto not_minus
+ pirop = 'n_sub'
+ not_minus:
+ add_op = 'infix:' . add_op
+ past = new 'PAST::Op'
+ past.init( past_prev, past_mult, 'name' => add_op, 'pirop' =>
pirop )
+ goto iter_loop
+ iter_end:
goto handled_expression
- no_adding_tail:
- past = tree.'get'('past', $P0, 'Plumhead::Grammar::expression')
- goto handled_expression
no_adding_expression:
$P0 = node['multiplying_expression']