Parsing/Shunting-yard algorithm: Difference between revisions

→‎{{header|RPL}}: code improvement
(→‎{{header|RPL}}: code improvement)
Line 4,329:
≫ ≫ ‘<span style="color:blue">LEXER</span>’ STO <span style="color:grey">@ ( "1+(2*3)" → { 1 "+" "(" 2 "*" 3 ")" } )</span>
≪ '''IF''' ←depthOVER '''THEN'''
"^*/+-" DUP 45 PICK POS SWAP ROT POS
{ 4 3 3 2 2 } { 1 0 0 0 0 }
o1 o2 o1 prec rasso
≪ '''IF''' o2 '''THEN'''
prec o1 GET prec o2 GET
Line 4,341:
≫ ‘<span style="color:blue">POPOP?</span>’ STO <span style="color:grey">@ ( op → Boolean )</span>
≪ <span style="color:blue">LEXER</span> { } "" 0 → infix postfix token ←depth
≪ 0
1 infix SIZE '''FOR''' j
infix j GET 'token' STO
1 SF
Line 4,349 ⟶ 4,350:
1 CF
'''WHILE''' token <span style="color:blue">POPOP?</span> '''REPEAT'''
'postfix' SWAPROT STO+ 1 - '''END'''
token SWAP '←depth'1 DECR DROP+ '''END'''
'''END'''
token '←depth' INCR DROP '''END'''
"(" token == '''THEN'''
token '←depth'SWAP INCR1 DROP+ '''END'''
")" token == '''THEN'''
'''WHILE''' ←depthDUP 1 FS? AND '''REPEAT'''
'''IF''' DUPOVER "(" ≠ '''THEN'''
'postfix' SWAPROT STO+
'''ELSE''' SWAP DROP 1 CF '''END'''
'←depth'1 DECR DROP-
'''END'''
'''END'''
Line 4,366 ⟶ 4,365:
'''END'''
'''NEXT'''
'''WHILE''' ←depthDUP '''REPEAT'''
'postfix' SWAPROT STO+
'←depth'1 DECR DROP- '''END'''
DROP ""
1 postfix SIZE '''FOR''' j
postfix j GET + " " + '''NEXT'''
1,150

edits