Example #1
0
 def visitFactor(self, ctx: MPParser.FactorContext):
     if ctx.expression():
         return self.visit(ctx.expression())
     elif ctx.invocation_expression():
         return CallExpr(Id(ctx.IDENT().getText()),
                         self.visit(ctx.invocation_expression()))
     elif ctx.literal():
         return self.visit(ctx.literal())
     elif ctx.IDENT():
         return Id(ctx.IDENT().getText())
     elif ctx.STRING_LITERAL():
         return StringLiteral(ctx.STRING_LITERAL().getText())
     return
Example #2
0
    def visitProgram(self, ast, c):
        '''
        ast: Program
        c: Unknown
        => c
        '''

        self.emit.printout(
            self.emit.emitPROLOG(self.className, "java.lang.Object"))
        e = SubBody(None, self.env)

        # generate global declare list
        for x in ast.decl:
            # returns Symbol on no Gen
            self.env += [self.visit(x, e)]

        e.gen = True
        for x in ast.decl:
            # recall that e = SubBody(None, self.env)
            # and e.sym = self.env as reference
            self.visit(x, e)

        # generate default constructor
        self.genMETHOD(FuncDecl(Id("<init>"), list(), list(), list(), None), c,
                       Frame("<init>", VoidType))
        self.emit.emitEPILOG()
        return c
Example #3
0
 def visitLhs(self, ctx: MPParser.LhsContext):
     """
     return IDENT or index_pression
     """
     if ctx.IDENT():
         return Id(ctx.IDENT().getText())
     else:
         return self.visit(ctx.index_expression())
Example #4
0
 def visitFunc_decl(self, ctx: MPParser.Func_declContext):
     ident = Id(ctx.IDENT().getText())
     param_list = self.visit(ctx.param_list()) if ctx.param_list() else []
     mptype = self.visit(ctx.mptype())
     var_decl = flatten(list(map(self.visit, ctx.var_decl())))
     compound_statement = self.visit(ctx.compound_statement())
     return FuncDecl(ident, param_list, var_decl, compound_statement,
                     mptype)
Example #5
0
 def visitIdenlist(self, ctx: MPParser.IdenlistContext):
     """
     return list of iden
     """
     ident = Id(ctx.IDENT().getText())
     if ctx.idenlist():
         return [ident] + self.visit(ctx.idenlist())
     else:
         return [ident]
Example #6
0
 def visitCall_statement(self, ctx: MPParser.Call_statementContext):
     param = self.visit(ctx.call_param()) if ctx.call_param() else []
     return CallStmt(Id(ctx.IDENT().getText()), param)
Example #7
0
 def visitFor_statement(self, ctx: MPParser.For_statementContext):
     up = True if ctx.TO() else False
     return For(Id(ctx.IDENT().getText()), self.visit(ctx.expression(0)),
                self.visit(ctx.expression(1)), up,
                self.visit(ctx.statement()))