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