Arithmetic evaluation: Difference between revisions

m
m (→‎{{header|Phix}}: demo\rosetta\Arithmetic_evaluation.exw)
Line 66:
 
Dict[String, Symbol] symbol_table
Array[String] tokens
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(‘(number)’).nud = self -> selfnud
symbol(‘(end)’)
 
1,481

edits