program-synthesis / abstract_syntax_tree.py
ayushnoori's picture
Working AST representation
c9abdca
raw
history blame
1.55 kB
'''
ABSTRACT SYNTAX TREE
This file contains the Python class that defines the abstract syntax tree (AST) representation.
'''
class OperatorNode:
'''
Class to represent operator nodes (i.e., an operator and its operands) as an AST.
Args:
operator (object): operator object (e.g., Add, Subtract, etc.)
children (list): list of children nodes (operands)
Example of usage:
add_node = OperatorNode(Add(), [IntegerConstant(7), IntegerConstant(5)])
subtract_node = OperatorNode(Subtract(), [IntegerConstant(3), IntegerConstant(1)])
multiply_node = OperatorNode(Multiply(), [add_node, subtract_node])
'''
def __init__(self, operator, children):
self.operator = operator # Operator object (e.g., Add, Subtract, etc.)
self.children = children # list of children nodes (operands)
def evaluate(self):
# check arity
if len(self.children) != self.operator.arity:
raise ValueError("Invalid number of operands for operator")
# recursively evaluate the operator and its operands
operands = [child.evaluate() for child in self.children]
return self.operator.evaluate(*operands)
def str(self):
# check arity
if len(self.children) != self.operator.arity:
raise ValueError("Invalid number of operands for operator")
# recursively generate a string representation of the AST
operand_strings = [child.str() for child in self.children]
return self.operator.str(*operand_strings)