parserclass.py
import scannerclass as sc
class ExprNode:
def __init__(self):
self.OpCode = None
self.CaseConst = None
self.CaseParmPtr = None
self.left = None
self.right = None
self.child = None
self.MathFuncPtr = None
def MakeExprNode(self,opcode=None, left=None, right=None, child=None, MathFuncPtr=None, CaseConst=None,CaseParmPtr=None):
self.OpCode = opcode
if opcode == sc.Token_Type.CONST_ID:
self.CaseConst = CaseConst
elif opcode == sc.Token_Type.T:
self.CaseParmPtr = CaseParmPtr
elif opcode == sc.Token_Type.FUNC:
self.MathFuncPtr = MathFuncPtr
self.child = child
else:
self.left = left
self.right = right
def Tree_trace(self):
self.PrintSyntaxTree(1)
def PrintSyntaxTree(self, indent):
if self.OpCode == sc.Token_Type.PLUS:
print(indent * " " + "+")
elif self.OpCode == sc.Token_Type.MINUS:
print(indent * " " + "-")
elif self.OpCode == sc.Token_Type.MUL:
print(indent * " " + "*")
elif self.OpCode == sc.Token_Type.DIV:
print(indent * " " + "/")
elif self.OpCode == sc.Token_Type.POWER:
print(indent * " " + "**")
elif self.OpCode == sc.Token_Type.FUNC:
print(indent * " " + "%s" % self.MathFuncPtr)
elif self.OpCode == sc.Token_Type.CONST_ID:
print(indent * " " + "%f" % self.CaseConst)
elif self.OpCode == sc.Token_Type.T:
print(indent * " " + "T")
else:
print("Error Tree Node!\n")
exit(0)
if self.OpCode == sc.Token_Type.CONST_ID or self.OpCode == sc.Token_Type.T:
return
if self.OpCode == sc.Token_Type.FUNC:
self.child.PrintSyntaxTree(indent + 1)
else:
self.left.PrintSyntaxTree(indent + 1)
self.right.PrintSyntaxTree(indent + 1)
def GetExprValue(self,Parameter=None):
if self.OpCode == sc.Token_Type.NONTOKEN:
return 0.0
else:
if self.OpCode == sc.Token_Type.PLUS:
return self<