Синтаксический анализатор: арифметика в дерево
Добавлено: Вт, 5 июня 2018, 18:04:11
http://aliev.me/runestone/Trees/ParseTree.html
pythonds надо устанавливать отдельно скобки и пробелы необходимы, без них не работает
зато код реально короткий
Код: Выделить всё
from pythonds.basic.stack import Stack
from pythonds.trees.binaryTree import BinaryTree
def buildParseTree(fpexp):
fplist = fpexp.split()
pStack = Stack()
eTree = BinaryTree('')
pStack.push(eTree)
currentTree = eTree
for i in fplist:
if i == '(':
currentTree.insertLeft('')
pStack.push(currentTree)
currentTree = currentTree.getLeftChild()
elif i not in ['+', '-', '*', '/', ')']:
currentTree.setRootVal(int(i))
parent = pStack.pop()
currentTree = parent
elif i in ['+', '-', '*', '/']:
currentTree.setRootVal(i)
currentTree.insertRight('')
pStack.push(currentTree)
currentTree = currentTree.getRightChild()
elif i == ')':
currentTree = pStack.pop()
else:
raise ValueError
return eTree
pt = buildParseTree("( ( 10 + 5 ) * 3 )")
pt.postorder() #определено и объясняется в следующем разделе
Код: Выделить всё
pip install pythonds
зато код реально короткий