Я создаю синтаксический анализатор, однако, когда я передаю строку, я получаю только половину результата, который равен D / C, когда я должен получить все выражение в инфиксном формате?
здесь мой код и лог c
class Node:
def __init__(self, data, left=None, right=None):
self.data, self.left, self.right = data, left, right
def __str__(self):
return self.data
def infixPrintNode(self):
if self:
if self.right:
self.right.infixPrintNode()
print(self.data)
if self.left:
self.left.infixPrintNode()
class ParseTree:
def __init__(self, root = None):
self.root = (root)
def __str__(self):
pass # to be implemented
def fromprefix(self, expression=""):
s = []
right = Node("")
left = Node("")
for c in expression.split():
if c == '(':
s.append(Node(""))
elif c.isnumeric() or c.isalpha():
s.append(c)
elif c in ["+", "-", "*", "/", "^", "#"]:
s[-1].data = c
elif len(s) > 1 and c == ")":
rightchar = s.pop()
leftchar = s.pop()
r = Node("")
l = Node("")
r.data = rightchar;
l.data = leftchar
s[-1].left = l
s[-1].right = r
elif c == " ":
pass
else:
pass
self.root = s.pop()
return self
def printinfix(self):
if self.root:
self.root.infixPrintNode()
t = ParseTree("x y +")
# t.frominfix("( ( A * B ) + ( C / D ) )")
t.fromprefix("( + ( * A B ) ( / C D ) ")
t.printinfix()
Вот мой лог c:
- Encounter (затем создайте пустой узел
- , оператор столкновения вставьте его как данные в текущем узле
- встреча с операндом, вставка их в стек
- встреча) извлечение двух данных и назначение их в качестве левого и правого потомков