Страница 1 из 1

Синтаксический анализатор: арифметика в дерево

Добавлено: Вт, 5 июня 2018, 18:04:11
dyvniy
http://aliev.me/runestone/Trees/ParseTree.html

Код: Выделить всё

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()  #определено и объясняется в следующем разделе
pythonds надо устанавливать отдельно

Код: Выделить всё

pip install pythonds
скобки и пробелы необходимы, без них не работает
зато код реально короткий