Arithmetic evaluation: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: demo\rosetta\Arithmetic_evaluation.exw) |
Alextretyak (talk | contribs) m (→{{header|11l}}) |
||
Line 66: | Line 66: | ||
Dict[String, Symbol] symbol_table |
Dict[String, Symbol] symbol_table |
||
[String] tokens |
|||
V tokeni = -1 |
V tokeni = -1 |
||
ASTNode token_node |
ASTNode token_node |
||
Line 75: | Line 75: | ||
:tokeni++ |
:tokeni++ |
||
:token_node = ASTNode() |
:token_node = ASTNode() |
||
I :tokeni == tokens.len |
I :tokeni == :tokens.len |
||
:token_node.symbol = :symbol_table[‘(end)’] |
:token_node.symbol = :symbol_table[‘(end)’] |
||
R |
R |
||
Line 84: | Line 84: | ||
F expression(rbp = 0) |
F expression(rbp = 0) |
||
ASTNode t = :token_node |
ASTNode t = move(:token_node) |
||
advance() |
advance() |
||
V left = t.symbol.nud(t) |
V left = t.symbol.nud(move(t)) |
||
L rbp < :token_node.symbol.lbp |
L rbp < :token_node.symbol.lbp |
||
t = :token_node |
t = move(:token_node) |
||
advance() |
advance() |
||
left = t.symbol.led(t, left) |
left = t.symbol.led(t, move(left)) |
||
R left |
R left |
||
Line 108: | Line 108: | ||
F infix(id, bp) |
F infix(id, bp) |
||
F led(ASTNode self, left) |
F led(ASTNode self, ASTNode left) |
||
self.first_child = left |
self.first_child = left |
||
self.second_child = expression(self.symbol.led_bp) |
self.second_child = expression(self.symbol.led_bp) |
||
Line 119: | Line 119: | ||
R self |
R self |
||
symbol(id).set_nud_bp(bp, nud) |
symbol(id).set_nud_bp(bp, nud) |
||
infix(‘+’, 1) |
infix(‘+’, 1) |
||
infix(‘-’, 1) |
infix(‘-’, 1) |
||
Line 126: | Line 125: | ||
prefix(‘-’, 3) |
prefix(‘-’, 3) |
||
F nud(ASTNode self) |
|||
⚫ | |||
R self |
|||
⚫ | |||
symbol(‘(end)’) |
symbol(‘(end)’) |
||