Arithmetic evaluation: Difference between revisions

Content added Content deleted
(Added 11l)
Line 67: Line 67:
Dict[String, Symbol] symbol_table
Dict[String, Symbol] symbol_table
Array[String] tokens
Array[String] tokens
A tokeni = -1
V tokeni = -1
ASTNode token_node
ASTNode token_node


Line 78: Line 78:
:token_node.symbol = :symbol_table[‘(end)’]
:token_node.symbol = :symbol_table[‘(end)’]
R
R
A token = :tokens[:tokeni]
V token = :tokens[:tokeni]
:token_node.symbol = :symbol_table[I token.is_digit() {‘(number)’} E token]
:token_node.symbol = :symbol_table[I token.is_digit() {‘(number)’} E token]
I token.is_digit()
I token.is_digit()
Line 86: Line 86:
ASTNode t = :token_node
ASTNode t = :token_node
advance()
advance()
A left = t.symbol.nud(t)
V left = t.symbol.nud(t)
L rbp < :token_node.symbol.lbp
L rbp < :token_node.symbol.lbp
t = :token_node
t = :token_node
Line 101: Line 101:
F symbol(id, bp = 0) -> &
F symbol(id, bp = 0) -> &
I !(id C :symbol_table)
I !(id C :symbol_table)
A s = Symbol()
V s = Symbol()
s.id = id
s.id = id
s.lbp = bp
s.lbp = bp
Line 130: Line 130:


F nud_parens(ASTNode self)
F nud_parens(ASTNode self)
A expr = expression()
V expr = expression()
advance(‘)’)
advance(‘)’)
R expr
R expr