43 lines
933 B
Text
43 lines
933 B
Text
F infix_to_postfix(infix)
|
||
-V ops = ‘-+/*^’
|
||
V sb = ‘’
|
||
[Int] s
|
||
|
||
L(token) infix.split(re:‘\s’)
|
||
I token.empty
|
||
L.continue
|
||
|
||
V c = token[0]
|
||
V? idx = ops.find(c)
|
||
I idx != N
|
||
I s.empty
|
||
s.append(idx)
|
||
E
|
||
L !s.empty
|
||
V prec2 = s.last I/ 2
|
||
V prec1 = idx I/ 2
|
||
I prec2 > prec1 | (prec2 == prec1 & c != ‘^’)
|
||
sb ‘’= ops[s.pop()]‘ ’
|
||
E
|
||
L.break
|
||
s.append(idx)
|
||
|
||
E I c == ‘(’
|
||
s.append(-2)
|
||
|
||
E I c == ‘)’
|
||
L s.last != -2
|
||
sb ‘’= ops[s.pop()]‘ ’
|
||
s.pop()
|
||
|
||
E
|
||
sb ‘’= token‘ ’
|
||
|
||
L !s.empty
|
||
sb ‘’= ops[s.pop()]‘ ’
|
||
|
||
R sb
|
||
|
||
V infix = ‘3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3’
|
||
print(‘infix: ’infix)
|
||
print(‘postfix: ’infix_to_postfix(infix))
|