Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ASTGeneration(MPVisitor):
- def visitProgram(self,ctx:MPParser.ProgramContext):
- return self.visit(ctx.exp())
- def visitExp(self,ctx:MPParser.ExpContext):
- if ctx.ASSIGN():
- left = self.visit(ctx.term())
- right = self.visit(ctx.exp())
- return Binary(ctx.ASSIGN().getText(),left,right)
- return self.visit(ctx.term())
- def visitTerm(self,ctx:MPParser.TermContext):
- if ctx.COMPARE():
- left = self.visit(ctx.factor(0))
- right = self.visit(ctx.factor(1))
- return Binary(ctx.COMPARE().getText(),left,right)
- return self.visit(ctx.factor(0))
- def visitFactor(self,ctx:MPParser.FactorContext):
- if ctx.ANDOR():
- left = self.visit(ctx.factor())
- right = self.visit(ctx.operand())
- return Binary(ctx.ANDOR().getText(),left,right)
- return self.visit(ctx.operand())
- def visitOperand(self,ctx:MPParser.OperandContext):
- if ctx.ID():
- return Id(ctx.ID().getText())
- elif ctx.INTLIT():
- return IntLiteral(int(ctx.INTLIT().getText()))
- elif ctx.BOOLIT():
- return BooleanLiteral(ctx.BOOLIT().getText() == "True")
- else: return self.visit(ctx.exp())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement