예제 #1
0
    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
예제 #2
0
    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