def visit_Decl(self, pyc_decl: Decl): variable_node = VariableNode() self.set_coordinate(variable_node, pyc_decl.coord) variable_node.name = pyc_decl.name if type(pyc_decl.type) == ArrayDecl: pyc_arr = pyc_decl while type(pyc_arr.type) == ArrayDecl: variable_node.add_children(self.visit(pyc_arr.type.dim)) pyc_arr = pyc_arr.type # if have init, then create assign node if pyc_decl.init: assign_node = AssignNode() self.set_coordinate(assign_node, pyc_decl.coord) assign_node.target = variable_node assign_node.value = self.visit(pyc_decl.init) # assign_node.value = pyc_decl.init return assign_node else: return variable_node
def visit_Assignment(self, java_assign: Assignment): assign_node = AssignNode() self.set_coordinate(assign_node, java_assign) # need to do some trick of +=, -=, *=, /= if len(java_assign.type) > 1: op = java_assign.type[:-1] if op == '+' or op == '-' or op == '*' or op == '/': new_op = BinaryOperation() self.set_coordinate(new_op, java_assign) new_op.operator = op new_op.operandl = java_assign.expressionl new_op.operandr = java_assign.value else: raise Exception("does not support operator: ", java_assign.op) java_assign.type = '=' java_assign.value = new_op assign_node.target = self.visit(java_assign.expressionl) assign_node.value = self.visit(java_assign.value) return assign_node