Arithmetic evaluation: Difference between revisions
Content added Content deleted
Alextretyak (talk | contribs) (Added 11l) |
Alextretyak (talk | contribs) m (→{{header|11l}}) |
||
Line 67: | Line 67: | ||
Dict[String, Symbol] symbol_table |
Dict[String, Symbol] symbol_table |
||
Array[String] tokens |
Array[String] tokens |
||
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 |
||
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() |
||
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) |
||
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) |
||
V expr = expression() |
|||
advance(‘)’) |
advance(‘)’) |
||
R expr |
R expr |