From 06af494debd4717d7539b66b875882a36ae52c36 Mon Sep 17 00:00:00 2001 From: MELIKA AHMADI RANJBAR Date: Fri, 2 Jul 2021 23:06:25 +0430 Subject: [PATCH] Hw4 --- Melika Ahmadi Ranjbar/.idea/.gitignore | 3 + Melika Ahmadi Ranjbar/.idea/Assignment4.iml | 8 + .../inspectionProfiles/Project_Default.xml | 14 + .../inspectionProfiles/profiles_settings.xml | 6 + Melika Ahmadi Ranjbar/.idea/misc.xml | 20 + Melika Ahmadi Ranjbar/.idea/modules.xml | 8 + .../ConstructAbstractSyntaxTree.py | 148 ++ .../ConstructThreeAddressCode.py | 98 + Melika Ahmadi Ranjbar/Gen/MiniJava.interp | 91 + Melika Ahmadi Ranjbar/Gen/MiniJava.tokens | 61 + .../Gen/MiniJavaLexer.interp | 121 + Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.py | 205 ++ .../Gen/MiniJavaLexer.tokens | 61 + Melika Ahmadi Ranjbar/Gen/MiniJavaListener.py | 282 +++ Melika Ahmadi Ranjbar/Gen/MiniJavaParser.py | 1984 +++++++++++++++++ Melika Ahmadi Ranjbar/Gen/MiniJavaVisitor.py | 163 ++ .../__pycache__/MiniJavaLexer.cpython-38.pyc | Bin 0 -> 7540 bytes .../MiniJavaListener.cpython-38.pyc | Bin 0 -> 10254 bytes .../__pycache__/MiniJavaParser.cpython-38.pyc | Bin 0 -> 67772 bytes Melika Ahmadi Ranjbar/Hw4 - Compiler.pdf | Bin 0 -> 263074 bytes Melika Ahmadi Ranjbar/MiniJava.g4 | 108 + Melika Ahmadi Ranjbar/input.txt | 16 + 22 files changed, 3397 insertions(+) create mode 100644 Melika Ahmadi Ranjbar/.idea/.gitignore create mode 100644 Melika Ahmadi Ranjbar/.idea/Assignment4.iml create mode 100644 Melika Ahmadi Ranjbar/.idea/inspectionProfiles/Project_Default.xml create mode 100644 Melika Ahmadi Ranjbar/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 Melika Ahmadi Ranjbar/.idea/misc.xml create mode 100644 Melika Ahmadi Ranjbar/.idea/modules.xml create mode 100644 Melika Ahmadi Ranjbar/ConstructAbstractSyntaxTree.py create mode 100644 Melika Ahmadi Ranjbar/ConstructThreeAddressCode.py create mode 100644 Melika Ahmadi Ranjbar/Gen/MiniJava.interp create mode 100644 Melika Ahmadi Ranjbar/Gen/MiniJava.tokens create mode 100644 Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.interp create mode 100644 Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.py create mode 100644 Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.tokens create mode 100644 Melika Ahmadi Ranjbar/Gen/MiniJavaListener.py create mode 100644 Melika Ahmadi Ranjbar/Gen/MiniJavaParser.py create mode 100644 Melika Ahmadi Ranjbar/Gen/MiniJavaVisitor.py create mode 100644 Melika Ahmadi Ranjbar/Gen/__pycache__/MiniJavaLexer.cpython-38.pyc create mode 100644 Melika Ahmadi Ranjbar/Gen/__pycache__/MiniJavaListener.cpython-38.pyc create mode 100644 Melika Ahmadi Ranjbar/Gen/__pycache__/MiniJavaParser.cpython-38.pyc create mode 100644 Melika Ahmadi Ranjbar/Hw4 - Compiler.pdf create mode 100644 Melika Ahmadi Ranjbar/MiniJava.g4 create mode 100644 Melika Ahmadi Ranjbar/input.txt diff --git a/Melika Ahmadi Ranjbar/.idea/.gitignore b/Melika Ahmadi Ranjbar/.idea/.gitignore new file mode 100644 index 0000000..eaf91e2 --- /dev/null +++ b/Melika Ahmadi Ranjbar/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Melika Ahmadi Ranjbar/.idea/Assignment4.iml b/Melika Ahmadi Ranjbar/.idea/Assignment4.iml new file mode 100644 index 0000000..d9e6024 --- /dev/null +++ b/Melika Ahmadi Ranjbar/.idea/Assignment4.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/.idea/inspectionProfiles/Project_Default.xml b/Melika Ahmadi Ranjbar/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..e87177d --- /dev/null +++ b/Melika Ahmadi Ranjbar/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/.idea/inspectionProfiles/profiles_settings.xml b/Melika Ahmadi Ranjbar/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/Melika Ahmadi Ranjbar/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/.idea/misc.xml b/Melika Ahmadi Ranjbar/.idea/misc.xml new file mode 100644 index 0000000..e618741 --- /dev/null +++ b/Melika Ahmadi Ranjbar/.idea/misc.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/.idea/modules.xml b/Melika Ahmadi Ranjbar/.idea/modules.xml new file mode 100644 index 0000000..e3c583c --- /dev/null +++ b/Melika Ahmadi Ranjbar/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/ConstructAbstractSyntaxTree.py b/Melika Ahmadi Ranjbar/ConstructAbstractSyntaxTree.py new file mode 100644 index 0000000..5a0baaa --- /dev/null +++ b/Melika Ahmadi Ranjbar/ConstructAbstractSyntaxTree.py @@ -0,0 +1,148 @@ +from antlr4 import * +from Gen.MiniJavaLexer import MiniJavaLexer +from Gen.MiniJavaParser import MiniJavaParser +from Gen.MiniJavaListener import MiniJavaListener + +import queue +import argparse + + +class ConstructAbstractSyntaxTreeListener(MiniJavaListener): + def __init__(self): + self.AST = AbstractSyntaxTree() + self.Q = queue.Queue() + + def exitOperations_expression(self, ctx:MiniJavaParser.Operations_expressionContext): + Child1 = self.AST.MakeNode(ctx.expression(0).value_attr, None, None) + Child2 = self.AST.MakeNode(ctx.expression(1).value_attr, None, None) + self.AST.AddBrother(Child1, Child2) + Parent = self.AST.MakeNode(ctx.operations().getText(), Child1, None) + ctx.value_attr = Parent + + def exitEqual_statement(self, ctx: MiniJavaParser.Equal_statementContext): + Child1 = self.AST.MakeNode(ctx.identifier().value_attr, None, None) + Child2 = self.AST.MakeNode(ctx.expression().value_attr, None, None) + self.AST.AddBrother(Child1, Child2) + Parent = self.AST.MakeNode('=', Child1, None) + ctx.value_attr = Parent + self.AST.Root = Parent + + def exitIf_statement(self, ctx:MiniJavaParser.If_statementContext): + Child0 = self.AST.MakeNode(ctx.expression().value_attr, None, None) + Child1 = self.AST.MakeNode(ctx.statement(0).value_attr, None, None) + Child2 = self.AST.MakeNode(ctx.statement(1).value_attr, None, None) + self.AST.AddBrother(Child0, Child1) + self.AST.AddBrother(Child1, Child2) + Parent = self.AST.MakeNode('if', Child0, None) + ctx.value_attr = Parent + + def enterWhile_statement(self, ctx:MiniJavaParser.While_statementContext): + Child0 = self.AST.MakeNode(ctx.expression().value_attr, None, None) + Child1 = self.AST.MakeNode(ctx.statement(0).value_attr, None, None) + self.AST.AddBrother(Child0, Child1) + Parent = self.AST.MakeNode('while', Child0, None) + ctx.value_attr = Parent + + def exitKeywords(self, ctx:MiniJavaParser.KeywordsContext): + Child = self.AST.MakeNode(ctx.getText(), None, None) + ctx.value_attr = Child + + def exitWord(self, ctx:MiniJavaParser.WordContext): + Child = self.AST.MakeNode(ctx.getText(), None, None) + ctx.value_attr = Child + + def PrintTree(self, node=None, level=1): + if node is None: + print("--------Fenito----------") + return + if not self.Q.empty(): + print('Parent:', self.Q.get().Value) + print('\t' * level, end='') + while node is not None: + print(node.Value, '\t───\t', end='') + if node.Child is not None: + self.Q.put(node.Child) + self.Q.put(node) + node = node.Brother + if node is None: + print('▓', end='\n') + if not self.Q.empty(): + self.PrintTree(node=self.Q.get(), level=level + 1) + + +class TreeNode: + def __init__(self, value, child, brother): + self.Value = value + self.Child = child + self.Brother = brother + + +class AbstractSyntaxTree: + def __init__(self): + self.Current = None + self.Root = None + + def MakeNode(self, Value, Child, Brother): + Node = TreeNode(Value, Child, Brother) + if self.Root is None: + self.Root = Node + self.Current = Node + return Node + + def AddBrother(self, Node, Bro): + if Node.Brother is None: + Node.Brother = Bro + else: + self.Current = Node.Brother + while self.Current.Brother is not None: + self.Current = self.Current.Brother + self.Current.Brother = Bro + self.Current = Bro + + def AddChild(self, Node, Child): + if Node.Child is None: + Node.Child = Child + else: + self.Current = Node.Child + while self.Current.Brother is not None: + self.Current = self.Current.Brother + self.Current.Brother = Child + self.Current = Child + + +def main(args): + # Step 1: Load input source into stream + stream = FileStream(args.file, encoding='utf8') + print('Input code:\n{0}'.format(stream)) + print('Result:') + + # Step 2: Create an instance of AssignmentStLexer + lexer = MiniJavaLexer(stream) + + # Step 3: Convert the input source into a list of tokens + token_stream = CommonTokenStream(lexer) + + # Step 4: Create an instance of the AssignmentStParser + parser = MiniJavaParser(token_stream) + + # Step 5: Create parse tree + parse_tree = parser.program() + + # Step 6: Create an instance of AssignmentStListener + code_generator_listener = ConstructAbstractSyntaxTreeListener() + + # Step 7: Walk parse tree with a customized listener (Automatically) + walker = ParseTreeWalker() + walker.walk(t=parse_tree, listener=code_generator_listener) + # code_generator_listener.PrintTree(code_generator_listener.AST.Root, 1) + print('Done') + + +if __name__ == '__main__': + argparser = argparse.ArgumentParser() + argparser.add_argument( + '-n', '--file', + help='Input source', default=r'input.txt') + args = argparser.parse_args() + main(args) + diff --git a/Melika Ahmadi Ranjbar/ConstructThreeAddressCode.py b/Melika Ahmadi Ranjbar/ConstructThreeAddressCode.py new file mode 100644 index 0000000..1e6ac87 --- /dev/null +++ b/Melika Ahmadi Ranjbar/ConstructThreeAddressCode.py @@ -0,0 +1,98 @@ +from antlr4 import * +from Gen.MiniJavaLexer import MiniJavaLexer +from Gen.MiniJavaParser import MiniJavaParser +from Gen.MiniJavaListener import MiniJavaListener + +import argparse + + +class ConstructThreeAddressCodeListener(MiniJavaListener): + def __init__(self): + self.TempCount = 0 + self.LabelCount = 0 + + + def CreateTemp(self): + self.TempCount += 1 + return 'T' + str(self.TempCount) + + def CreateLabel(self): + self.LabelCount += 1 + return 'L' + str(self.LabelCount) + + def exitOperations_expression(self, ctx: MiniJavaParser.Operations_expressionContext): + if ctx.expression(0).type_attr != ctx.expression(1).type_attr: + print('Semantic error: Cannot operate {0} and {1}'.format(ctx.expression(0).type_attr, + ctx.expression(1).type_attr)) + quit(-1) + else: + ctx.type_attr = ctx.expression(0).type_attr + ctx.value_attr = self.CreateTemp() + + print('{0} = {1} {2} {3}'.format(ctx.value_attr, ctx.expression(0).getText(), ctx.operations().getText(), + ctx.expression(1).getText())) + + def exitNot_expression(self, ctx: MiniJavaParser.Not_expressionContext): + ctx.type_attr = ctx.expression().type_attr + ctx.value_attr = self.CreateTemp() + + print('{0} = !{1}'.format(ctx.value_attr, ctx.expression().value_attr)) + + def exitEqual_statement(self, ctx: MiniJavaParser.Equal_statementContext): + ctx.value_attr = ctx.identifier().getText() + ' = ' + ctx.expression().value_attr + + print(ctx.value_attr) + + def exitEqual_array_statement(self, ctx: MiniJavaParser.Equal_array_statementContext): + ctx.value_attr = ctx.identifier().getText() + '[' + ctx.expression(0).value_attr + ']' + ' = ' + ctx.expression( + 1).value_attr + + print(ctx.value_attr) + + def exitIf_statement(self, ctx:MiniJavaParser.If_statementContext): + ctx.statement(1).value_attr = self.CreateLabel() + ' ' + ctx.statement(1).value_attr + ctx.value_attr = 'if' + '!(' + ctx.expression().value_attr + ') ' + 'goto ' + ctx.statement(1).value_attr[0 : 2] + + print(ctx.value_attr, ctx.statement(1).value_attr) + + def enterWhile_statement(self, ctx:MiniJavaParser.While_statementContext): + ctx.value_attr = self.CreateLabel() + ' if' + '!(' + ctx.expression().value_attr + ')' + 'goto' + ctx.statement().value_attr[0 : 2] + ctx.statement().value_attr = ctx.statement().value_attr + 'goto' + ctx.statement().value_attr = self.CreateLabel() + ctx.statement().value_attr + + print(ctx.value_attr) + + +def main(args): + # Step 1: Load input source into stream + stream = FileStream(args.file, encoding='utf8') + print('Input code:\n{0}'.format(stream)) + print('Result:') + + # Step 2: Create an instance of AssignmentStLexer + lexer = MiniJavaLexer(stream) + + # Step 3: Convert the input source into a list of tokens + token_stream = CommonTokenStream(lexer) + + # Step 4: Create an instance of the AssignmentStParser + parser = MiniJavaParser(token_stream) + + # Step 5: Create parse tree + parse_tree = parser.program() + + # Step 6: Create an instance of AssignmentStListener + code_generator_listener = ConstructThreeAddressCodeListener() + + # Step 7: Walk parse tree with a customized listener (Automatically) + walker = ParseTreeWalker() + walker.walk(t=parse_tree, listener=code_generator_listener) + + +if __name__ == '__main__': + argparser = argparse.ArgumentParser() + argparser.add_argument( + '-n', '--file', + help='Input source', default=r'input.txt') + args = argparser.parse_args() + main(args) diff --git a/Melika Ahmadi Ranjbar/Gen/MiniJava.interp b/Melika Ahmadi Ranjbar/Gen/MiniJava.interp new file mode 100644 index 0000000..68a9cb8 --- /dev/null +++ b/Melika Ahmadi Ranjbar/Gen/MiniJava.interp @@ -0,0 +1,91 @@ +token literal names: +null +'[' +']' +'extends' +';' +',' +'System.out.println' +'=' +'length' +'!' +'class' +'public' +'static' +'void' +'main' +'String' +'{' +'}' +'(' +')' +'int' +'new' +'return' +'if' +'boolean' +'while' +'else' +'.' +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +Class +Public +Static +Void +Main +String +BraketOpen +BraketClose +ParOpen +ParClose +Int +New +Return +If +Boolean +While +Else +Dot +Identifier +KeyWords +Operations +IntegerLiteral +COMMENT +LINE_COMMENT +WS + +rule names: +program +mainClass +mainClassEnter +mainClassBody +classDeclaration +varDeclaration +methodDeclaration +kind +statement +expression +identifier +operations + + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 36, 230, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 3, 2, 3, 2, 7, 2, 29, 10, 2, 12, 2, 14, 2, 32, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 62, 10, 6, 3, 6, 3, 6, 7, 6, 66, 10, 6, 12, 6, 14, 6, 69, 11, 6, 3, 6, 7, 6, 72, 10, 6, 12, 6, 14, 6, 75, 11, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 93, 10, 8, 12, 8, 14, 8, 96, 11, 8, 5, 8, 98, 10, 8, 3, 8, 3, 8, 3, 8, 7, 8, 103, 10, 8, 12, 8, 14, 8, 106, 11, 8, 3, 8, 7, 8, 109, 10, 8, 12, 8, 14, 8, 112, 11, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 125, 10, 9, 3, 10, 3, 10, 7, 10, 129, 10, 10, 12, 10, 14, 10, 132, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 168, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 191, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 212, 10, 11, 12, 11, 14, 11, 215, 11, 11, 5, 11, 217, 10, 11, 3, 11, 3, 11, 7, 11, 221, 10, 11, 12, 11, 14, 11, 224, 11, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 2, 3, 20, 14, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 2, 2, 2, 246, 2, 26, 3, 2, 2, 2, 4, 35, 3, 2, 2, 2, 6, 38, 3, 2, 2, 2, 8, 43, 3, 2, 2, 2, 10, 57, 3, 2, 2, 2, 12, 78, 3, 2, 2, 2, 14, 82, 3, 2, 2, 2, 16, 124, 3, 2, 2, 2, 18, 167, 3, 2, 2, 2, 20, 190, 3, 2, 2, 2, 22, 225, 3, 2, 2, 2, 24, 227, 3, 2, 2, 2, 26, 30, 5, 4, 3, 2, 27, 29, 5, 10, 6, 2, 28, 27, 3, 2, 2, 2, 29, 32, 3, 2, 2, 2, 30, 28, 3, 2, 2, 2, 30, 31, 3, 2, 2, 2, 31, 33, 3, 2, 2, 2, 32, 30, 3, 2, 2, 2, 33, 34, 7, 2, 2, 3, 34, 3, 3, 2, 2, 2, 35, 36, 7, 12, 2, 2, 36, 37, 5, 6, 4, 2, 37, 5, 3, 2, 2, 2, 38, 39, 5, 22, 12, 2, 39, 40, 7, 18, 2, 2, 40, 41, 5, 8, 5, 2, 41, 42, 7, 19, 2, 2, 42, 7, 3, 2, 2, 2, 43, 44, 7, 13, 2, 2, 44, 45, 7, 14, 2, 2, 45, 46, 7, 15, 2, 2, 46, 47, 7, 16, 2, 2, 47, 48, 7, 20, 2, 2, 48, 49, 7, 17, 2, 2, 49, 50, 7, 3, 2, 2, 50, 51, 7, 4, 2, 2, 51, 52, 5, 22, 12, 2, 52, 53, 7, 21, 2, 2, 53, 54, 7, 18, 2, 2, 54, 55, 5, 18, 10, 2, 55, 56, 7, 19, 2, 2, 56, 9, 3, 2, 2, 2, 57, 58, 7, 12, 2, 2, 58, 61, 5, 22, 12, 2, 59, 60, 7, 5, 2, 2, 60, 62, 5, 22, 12, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 63, 3, 2, 2, 2, 63, 67, 7, 18, 2, 2, 64, 66, 5, 12, 7, 2, 65, 64, 3, 2, 2, 2, 66, 69, 3, 2, 2, 2, 67, 65, 3, 2, 2, 2, 67, 68, 3, 2, 2, 2, 68, 73, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 70, 72, 5, 14, 8, 2, 71, 70, 3, 2, 2, 2, 72, 75, 3, 2, 2, 2, 73, 71, 3, 2, 2, 2, 73, 74, 3, 2, 2, 2, 74, 76, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 76, 77, 7, 19, 2, 2, 77, 11, 3, 2, 2, 2, 78, 79, 5, 16, 9, 2, 79, 80, 5, 22, 12, 2, 80, 81, 7, 6, 2, 2, 81, 13, 3, 2, 2, 2, 82, 83, 7, 13, 2, 2, 83, 84, 5, 16, 9, 2, 84, 85, 5, 22, 12, 2, 85, 97, 7, 20, 2, 2, 86, 87, 5, 16, 9, 2, 87, 94, 5, 22, 12, 2, 88, 89, 7, 7, 2, 2, 89, 90, 5, 16, 9, 2, 90, 91, 5, 22, 12, 2, 91, 93, 3, 2, 2, 2, 92, 88, 3, 2, 2, 2, 93, 96, 3, 2, 2, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 98, 3, 2, 2, 2, 96, 94, 3, 2, 2, 2, 97, 86, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 99, 3, 2, 2, 2, 99, 100, 7, 21, 2, 2, 100, 104, 7, 18, 2, 2, 101, 103, 5, 12, 7, 2, 102, 101, 3, 2, 2, 2, 103, 106, 3, 2, 2, 2, 104, 102, 3, 2, 2, 2, 104, 105, 3, 2, 2, 2, 105, 110, 3, 2, 2, 2, 106, 104, 3, 2, 2, 2, 107, 109, 5, 18, 10, 2, 108, 107, 3, 2, 2, 2, 109, 112, 3, 2, 2, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 113, 3, 2, 2, 2, 112, 110, 3, 2, 2, 2, 113, 114, 7, 24, 2, 2, 114, 115, 5, 20, 11, 2, 115, 116, 7, 6, 2, 2, 116, 117, 7, 19, 2, 2, 117, 15, 3, 2, 2, 2, 118, 119, 7, 22, 2, 2, 119, 120, 7, 3, 2, 2, 120, 125, 7, 4, 2, 2, 121, 125, 7, 26, 2, 2, 122, 125, 7, 22, 2, 2, 123, 125, 5, 22, 12, 2, 124, 118, 3, 2, 2, 2, 124, 121, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 124, 123, 3, 2, 2, 2, 125, 17, 3, 2, 2, 2, 126, 130, 7, 18, 2, 2, 127, 129, 5, 18, 10, 2, 128, 127, 3, 2, 2, 2, 129, 132, 3, 2, 2, 2, 130, 128, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 133, 3, 2, 2, 2, 132, 130, 3, 2, 2, 2, 133, 168, 7, 19, 2, 2, 134, 135, 7, 25, 2, 2, 135, 136, 7, 20, 2, 2, 136, 137, 5, 20, 11, 2, 137, 138, 7, 21, 2, 2, 138, 139, 5, 18, 10, 2, 139, 140, 7, 28, 2, 2, 140, 141, 5, 18, 10, 2, 141, 168, 3, 2, 2, 2, 142, 143, 7, 27, 2, 2, 143, 144, 7, 20, 2, 2, 144, 145, 5, 20, 11, 2, 145, 146, 7, 21, 2, 2, 146, 147, 5, 18, 10, 2, 147, 168, 3, 2, 2, 2, 148, 149, 7, 8, 2, 2, 149, 150, 7, 20, 2, 2, 150, 151, 5, 20, 11, 2, 151, 152, 7, 21, 2, 2, 152, 153, 7, 6, 2, 2, 153, 168, 3, 2, 2, 2, 154, 155, 5, 22, 12, 2, 155, 156, 7, 9, 2, 2, 156, 157, 5, 20, 11, 2, 157, 158, 7, 6, 2, 2, 158, 168, 3, 2, 2, 2, 159, 160, 5, 22, 12, 2, 160, 161, 7, 3, 2, 2, 161, 162, 5, 20, 11, 2, 162, 163, 7, 4, 2, 2, 163, 164, 7, 9, 2, 2, 164, 165, 5, 20, 11, 2, 165, 166, 7, 6, 2, 2, 166, 168, 3, 2, 2, 2, 167, 126, 3, 2, 2, 2, 167, 134, 3, 2, 2, 2, 167, 142, 3, 2, 2, 2, 167, 148, 3, 2, 2, 2, 167, 154, 3, 2, 2, 2, 167, 159, 3, 2, 2, 2, 168, 19, 3, 2, 2, 2, 169, 170, 8, 11, 1, 2, 170, 191, 7, 33, 2, 2, 171, 191, 7, 31, 2, 2, 172, 191, 5, 22, 12, 2, 173, 174, 7, 23, 2, 2, 174, 175, 7, 22, 2, 2, 175, 176, 7, 3, 2, 2, 176, 177, 5, 20, 11, 2, 177, 178, 7, 4, 2, 2, 178, 191, 3, 2, 2, 2, 179, 180, 7, 23, 2, 2, 180, 181, 5, 22, 12, 2, 181, 182, 7, 20, 2, 2, 182, 183, 7, 21, 2, 2, 183, 191, 3, 2, 2, 2, 184, 185, 7, 11, 2, 2, 185, 191, 5, 20, 11, 4, 186, 187, 7, 20, 2, 2, 187, 188, 5, 20, 11, 2, 188, 189, 7, 21, 2, 2, 189, 191, 3, 2, 2, 2, 190, 169, 3, 2, 2, 2, 190, 171, 3, 2, 2, 2, 190, 172, 3, 2, 2, 2, 190, 173, 3, 2, 2, 2, 190, 179, 3, 2, 2, 2, 190, 184, 3, 2, 2, 2, 190, 186, 3, 2, 2, 2, 191, 222, 3, 2, 2, 2, 192, 193, 12, 13, 2, 2, 193, 194, 5, 24, 13, 2, 194, 195, 5, 20, 11, 14, 195, 221, 3, 2, 2, 2, 196, 197, 12, 12, 2, 2, 197, 198, 7, 3, 2, 2, 198, 199, 5, 20, 11, 2, 199, 200, 7, 4, 2, 2, 200, 221, 3, 2, 2, 2, 201, 202, 12, 11, 2, 2, 202, 203, 7, 29, 2, 2, 203, 221, 7, 10, 2, 2, 204, 205, 12, 10, 2, 2, 205, 206, 7, 29, 2, 2, 206, 207, 5, 22, 12, 2, 207, 216, 7, 20, 2, 2, 208, 213, 5, 20, 11, 2, 209, 210, 7, 7, 2, 2, 210, 212, 5, 20, 11, 2, 211, 209, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 217, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 208, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 219, 7, 21, 2, 2, 219, 221, 3, 2, 2, 2, 220, 192, 3, 2, 2, 2, 220, 196, 3, 2, 2, 2, 220, 201, 3, 2, 2, 2, 220, 204, 3, 2, 2, 2, 221, 224, 3, 2, 2, 2, 222, 220, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 21, 3, 2, 2, 2, 224, 222, 3, 2, 2, 2, 225, 226, 7, 30, 2, 2, 226, 23, 3, 2, 2, 2, 227, 228, 7, 32, 2, 2, 228, 25, 3, 2, 2, 2, 18, 30, 61, 67, 73, 94, 97, 104, 110, 124, 130, 167, 190, 213, 216, 220, 222] \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/Gen/MiniJava.tokens b/Melika Ahmadi Ranjbar/Gen/MiniJava.tokens new file mode 100644 index 0000000..5a499e9 --- /dev/null +++ b/Melika Ahmadi Ranjbar/Gen/MiniJava.tokens @@ -0,0 +1,61 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +Class=10 +Public=11 +Static=12 +Void=13 +Main=14 +String=15 +BraketOpen=16 +BraketClose=17 +ParOpen=18 +ParClose=19 +Int=20 +New=21 +Return=22 +If=23 +Boolean=24 +While=25 +Else=26 +Dot=27 +Identifier=28 +KeyWords=29 +Operations=30 +IntegerLiteral=31 +COMMENT=32 +LINE_COMMENT=33 +WS=34 +'['=1 +']'=2 +'extends'=3 +';'=4 +','=5 +'System.out.println'=6 +'='=7 +'length'=8 +'!'=9 +'class'=10 +'public'=11 +'static'=12 +'void'=13 +'main'=14 +'String'=15 +'{'=16 +'}'=17 +'('=18 +')'=19 +'int'=20 +'new'=21 +'return'=22 +'if'=23 +'boolean'=24 +'while'=25 +'else'=26 +'.'=27 diff --git a/Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.interp b/Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.interp new file mode 100644 index 0000000..0937304 --- /dev/null +++ b/Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.interp @@ -0,0 +1,121 @@ +token literal names: +null +'[' +']' +'extends' +';' +',' +'System.out.println' +'=' +'length' +'!' +'class' +'public' +'static' +'void' +'main' +'String' +'{' +'}' +'(' +')' +'int' +'new' +'return' +'if' +'boolean' +'while' +'else' +'.' +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +Class +Public +Static +Void +Main +String +BraketOpen +BraketClose +ParOpen +ParClose +Int +New +Return +If +Boolean +While +Else +Dot +Identifier +KeyWords +Operations +IntegerLiteral +COMMENT +LINE_COMMENT +WS + +rule names: +T__0 +T__1 +T__2 +T__3 +T__4 +T__5 +T__6 +T__7 +T__8 +Class +Public +Static +Void +Main +String +BraketOpen +BraketClose +ParOpen +ParClose +Int +New +Return +If +Boolean +While +Else +Dot +Identifier +KeyWords +Operations +IntegerLiteral +Letter +LetterOrDigit +COMMENT +LINE_COMMENT +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 36, 281, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 7, 29, 208, 10, 29, 12, 29, 14, 29, 211, 11, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 226, 10, 30, 3, 31, 3, 31, 3, 31, 5, 31, 231, 10, 31, 3, 32, 3, 32, 7, 32, 235, 10, 32, 12, 32, 14, 32, 238, 11, 32, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 244, 10, 33, 3, 34, 3, 34, 5, 34, 248, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 7, 35, 254, 10, 35, 12, 35, 14, 35, 257, 11, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 7, 36, 268, 10, 36, 12, 36, 14, 36, 271, 11, 36, 3, 36, 3, 36, 3, 37, 6, 37, 276, 10, 37, 13, 37, 14, 37, 277, 3, 37, 3, 37, 3, 255, 2, 38, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 2, 67, 2, 69, 34, 71, 35, 73, 36, 3, 2, 11, 5, 2, 44, 45, 47, 47, 62, 62, 3, 2, 50, 59, 4, 2, 50, 59, 97, 97, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 4, 2, 2, 129, 55298, 56321, 3, 2, 55298, 56321, 3, 2, 56322, 57345, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 14, 15, 34, 34, 2, 289, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 3, 75, 3, 2, 2, 2, 5, 77, 3, 2, 2, 2, 7, 79, 3, 2, 2, 2, 9, 87, 3, 2, 2, 2, 11, 89, 3, 2, 2, 2, 13, 91, 3, 2, 2, 2, 15, 110, 3, 2, 2, 2, 17, 112, 3, 2, 2, 2, 19, 119, 3, 2, 2, 2, 21, 121, 3, 2, 2, 2, 23, 127, 3, 2, 2, 2, 25, 134, 3, 2, 2, 2, 27, 141, 3, 2, 2, 2, 29, 146, 3, 2, 2, 2, 31, 151, 3, 2, 2, 2, 33, 158, 3, 2, 2, 2, 35, 160, 3, 2, 2, 2, 37, 162, 3, 2, 2, 2, 39, 164, 3, 2, 2, 2, 41, 166, 3, 2, 2, 2, 43, 170, 3, 2, 2, 2, 45, 174, 3, 2, 2, 2, 47, 181, 3, 2, 2, 2, 49, 184, 3, 2, 2, 2, 51, 192, 3, 2, 2, 2, 53, 198, 3, 2, 2, 2, 55, 203, 3, 2, 2, 2, 57, 205, 3, 2, 2, 2, 59, 225, 3, 2, 2, 2, 61, 230, 3, 2, 2, 2, 63, 232, 3, 2, 2, 2, 65, 243, 3, 2, 2, 2, 67, 247, 3, 2, 2, 2, 69, 249, 3, 2, 2, 2, 71, 263, 3, 2, 2, 2, 73, 275, 3, 2, 2, 2, 75, 76, 7, 93, 2, 2, 76, 4, 3, 2, 2, 2, 77, 78, 7, 95, 2, 2, 78, 6, 3, 2, 2, 2, 79, 80, 7, 103, 2, 2, 80, 81, 7, 122, 2, 2, 81, 82, 7, 118, 2, 2, 82, 83, 7, 103, 2, 2, 83, 84, 7, 112, 2, 2, 84, 85, 7, 102, 2, 2, 85, 86, 7, 117, 2, 2, 86, 8, 3, 2, 2, 2, 87, 88, 7, 61, 2, 2, 88, 10, 3, 2, 2, 2, 89, 90, 7, 46, 2, 2, 90, 12, 3, 2, 2, 2, 91, 92, 7, 85, 2, 2, 92, 93, 7, 123, 2, 2, 93, 94, 7, 117, 2, 2, 94, 95, 7, 118, 2, 2, 95, 96, 7, 103, 2, 2, 96, 97, 7, 111, 2, 2, 97, 98, 7, 48, 2, 2, 98, 99, 7, 113, 2, 2, 99, 100, 7, 119, 2, 2, 100, 101, 7, 118, 2, 2, 101, 102, 7, 48, 2, 2, 102, 103, 7, 114, 2, 2, 103, 104, 7, 116, 2, 2, 104, 105, 7, 107, 2, 2, 105, 106, 7, 112, 2, 2, 106, 107, 7, 118, 2, 2, 107, 108, 7, 110, 2, 2, 108, 109, 7, 112, 2, 2, 109, 14, 3, 2, 2, 2, 110, 111, 7, 63, 2, 2, 111, 16, 3, 2, 2, 2, 112, 113, 7, 110, 2, 2, 113, 114, 7, 103, 2, 2, 114, 115, 7, 112, 2, 2, 115, 116, 7, 105, 2, 2, 116, 117, 7, 118, 2, 2, 117, 118, 7, 106, 2, 2, 118, 18, 3, 2, 2, 2, 119, 120, 7, 35, 2, 2, 120, 20, 3, 2, 2, 2, 121, 122, 7, 101, 2, 2, 122, 123, 7, 110, 2, 2, 123, 124, 7, 99, 2, 2, 124, 125, 7, 117, 2, 2, 125, 126, 7, 117, 2, 2, 126, 22, 3, 2, 2, 2, 127, 128, 7, 114, 2, 2, 128, 129, 7, 119, 2, 2, 129, 130, 7, 100, 2, 2, 130, 131, 7, 110, 2, 2, 131, 132, 7, 107, 2, 2, 132, 133, 7, 101, 2, 2, 133, 24, 3, 2, 2, 2, 134, 135, 7, 117, 2, 2, 135, 136, 7, 118, 2, 2, 136, 137, 7, 99, 2, 2, 137, 138, 7, 118, 2, 2, 138, 139, 7, 107, 2, 2, 139, 140, 7, 101, 2, 2, 140, 26, 3, 2, 2, 2, 141, 142, 7, 120, 2, 2, 142, 143, 7, 113, 2, 2, 143, 144, 7, 107, 2, 2, 144, 145, 7, 102, 2, 2, 145, 28, 3, 2, 2, 2, 146, 147, 7, 111, 2, 2, 147, 148, 7, 99, 2, 2, 148, 149, 7, 107, 2, 2, 149, 150, 7, 112, 2, 2, 150, 30, 3, 2, 2, 2, 151, 152, 7, 85, 2, 2, 152, 153, 7, 118, 2, 2, 153, 154, 7, 116, 2, 2, 154, 155, 7, 107, 2, 2, 155, 156, 7, 112, 2, 2, 156, 157, 7, 105, 2, 2, 157, 32, 3, 2, 2, 2, 158, 159, 7, 125, 2, 2, 159, 34, 3, 2, 2, 2, 160, 161, 7, 127, 2, 2, 161, 36, 3, 2, 2, 2, 162, 163, 7, 42, 2, 2, 163, 38, 3, 2, 2, 2, 164, 165, 7, 43, 2, 2, 165, 40, 3, 2, 2, 2, 166, 167, 7, 107, 2, 2, 167, 168, 7, 112, 2, 2, 168, 169, 7, 118, 2, 2, 169, 42, 3, 2, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 103, 2, 2, 172, 173, 7, 121, 2, 2, 173, 44, 3, 2, 2, 2, 174, 175, 7, 116, 2, 2, 175, 176, 7, 103, 2, 2, 176, 177, 7, 118, 2, 2, 177, 178, 7, 119, 2, 2, 178, 179, 7, 116, 2, 2, 179, 180, 7, 112, 2, 2, 180, 46, 3, 2, 2, 2, 181, 182, 7, 107, 2, 2, 182, 183, 7, 104, 2, 2, 183, 48, 3, 2, 2, 2, 184, 185, 7, 100, 2, 2, 185, 186, 7, 113, 2, 2, 186, 187, 7, 113, 2, 2, 187, 188, 7, 110, 2, 2, 188, 189, 7, 103, 2, 2, 189, 190, 7, 99, 2, 2, 190, 191, 7, 112, 2, 2, 191, 50, 3, 2, 2, 2, 192, 193, 7, 121, 2, 2, 193, 194, 7, 106, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 110, 2, 2, 196, 197, 7, 103, 2, 2, 197, 52, 3, 2, 2, 2, 198, 199, 7, 103, 2, 2, 199, 200, 7, 110, 2, 2, 200, 201, 7, 117, 2, 2, 201, 202, 7, 103, 2, 2, 202, 54, 3, 2, 2, 2, 203, 204, 7, 48, 2, 2, 204, 56, 3, 2, 2, 2, 205, 209, 5, 65, 33, 2, 206, 208, 5, 67, 34, 2, 207, 206, 3, 2, 2, 2, 208, 211, 3, 2, 2, 2, 209, 207, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 58, 3, 2, 2, 2, 211, 209, 3, 2, 2, 2, 212, 213, 7, 118, 2, 2, 213, 214, 7, 116, 2, 2, 214, 215, 7, 119, 2, 2, 215, 226, 7, 103, 2, 2, 216, 217, 7, 104, 2, 2, 217, 218, 7, 99, 2, 2, 218, 219, 7, 110, 2, 2, 219, 220, 7, 117, 2, 2, 220, 226, 7, 103, 2, 2, 221, 222, 7, 118, 2, 2, 222, 223, 7, 106, 2, 2, 223, 224, 7, 107, 2, 2, 224, 226, 7, 117, 2, 2, 225, 212, 3, 2, 2, 2, 225, 216, 3, 2, 2, 2, 225, 221, 3, 2, 2, 2, 226, 60, 3, 2, 2, 2, 227, 228, 7, 40, 2, 2, 228, 231, 7, 40, 2, 2, 229, 231, 9, 2, 2, 2, 230, 227, 3, 2, 2, 2, 230, 229, 3, 2, 2, 2, 231, 62, 3, 2, 2, 2, 232, 236, 9, 3, 2, 2, 233, 235, 9, 4, 2, 2, 234, 233, 3, 2, 2, 2, 235, 238, 3, 2, 2, 2, 236, 234, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 64, 3, 2, 2, 2, 238, 236, 3, 2, 2, 2, 239, 244, 9, 5, 2, 2, 240, 244, 10, 6, 2, 2, 241, 242, 9, 7, 2, 2, 242, 244, 9, 8, 2, 2, 243, 239, 3, 2, 2, 2, 243, 240, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 66, 3, 2, 2, 2, 245, 248, 5, 65, 33, 2, 246, 248, 9, 3, 2, 2, 247, 245, 3, 2, 2, 2, 247, 246, 3, 2, 2, 2, 248, 68, 3, 2, 2, 2, 249, 250, 7, 49, 2, 2, 250, 251, 7, 44, 2, 2, 251, 255, 3, 2, 2, 2, 252, 254, 11, 2, 2, 2, 253, 252, 3, 2, 2, 2, 254, 257, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 256, 258, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 258, 259, 7, 44, 2, 2, 259, 260, 7, 49, 2, 2, 260, 261, 3, 2, 2, 2, 261, 262, 8, 35, 2, 2, 262, 70, 3, 2, 2, 2, 263, 264, 7, 49, 2, 2, 264, 265, 7, 49, 2, 2, 265, 269, 3, 2, 2, 2, 266, 268, 10, 9, 2, 2, 267, 266, 3, 2, 2, 2, 268, 271, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 272, 3, 2, 2, 2, 271, 269, 3, 2, 2, 2, 272, 273, 8, 36, 2, 2, 273, 72, 3, 2, 2, 2, 274, 276, 9, 10, 2, 2, 275, 274, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 280, 8, 37, 2, 2, 280, 74, 3, 2, 2, 2, 12, 2, 209, 225, 230, 236, 243, 247, 255, 269, 277, 3, 2, 3, 2] \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.py b/Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.py new file mode 100644 index 0000000..6b8a99f --- /dev/null +++ b/Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.py @@ -0,0 +1,205 @@ +# Generated from D:/University/Sem6/Compiler/Assignment4\MiniJava.g4 by ANTLR 4.9.1 +from antlr4 import * +from io import StringIO +from typing.io import TextIO +import sys + + + +def serializedATN(): + with StringIO() as buf: + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2$") + buf.write("\u0119\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") + buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") + buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") + buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") + buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%") + buf.write("\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3") + buf.write("\5\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7") + buf.write("\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3") + buf.write("\t\3\t\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3") + buf.write("\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r") + buf.write("\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20") + buf.write("\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23") + buf.write("\3\23\3\24\3\24\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26") + buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\31") + buf.write("\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32") + buf.write("\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\35\3\35") + buf.write("\7\35\u00d0\n\35\f\35\16\35\u00d3\13\35\3\36\3\36\3\36") + buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\5\36") + buf.write("\u00e2\n\36\3\37\3\37\3\37\5\37\u00e7\n\37\3 \3 \7 \u00eb") + buf.write("\n \f \16 \u00ee\13 \3!\3!\3!\3!\5!\u00f4\n!\3\"\3\"\5") + buf.write("\"\u00f8\n\"\3#\3#\3#\3#\7#\u00fe\n#\f#\16#\u0101\13#") + buf.write("\3#\3#\3#\3#\3#\3$\3$\3$\3$\7$\u010c\n$\f$\16$\u010f\13") + buf.write("$\3$\3$\3%\6%\u0114\n%\r%\16%\u0115\3%\3%\3\u00ff\2&\3") + buf.write("\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16") + buf.write("\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61") + buf.write("\32\63\33\65\34\67\359\36;\37= ?!A\2C\2E\"G#I$\3\2\13") + buf.write("\5\2,-//>>\3\2\62;\4\2\62;aa\6\2&&C\\aac|\4\2\2\u0081") + buf.write("\ud802\udc01\3\2\ud802\udc01\3\2\udc02\ue001\4\2\f\f\17") + buf.write("\17\5\2\13\f\16\17\"\"\2\u0121\2\3\3\2\2\2\2\5\3\2\2\2") + buf.write("\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17") + buf.write("\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3") + buf.write("\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2") + buf.write("\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3") + buf.write("\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2") + buf.write("\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3") + buf.write("\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I") + buf.write("\3\2\2\2\3K\3\2\2\2\5M\3\2\2\2\7O\3\2\2\2\tW\3\2\2\2\13") + buf.write("Y\3\2\2\2\r[\3\2\2\2\17n\3\2\2\2\21p\3\2\2\2\23w\3\2\2") + buf.write("\2\25y\3\2\2\2\27\177\3\2\2\2\31\u0086\3\2\2\2\33\u008d") + buf.write("\3\2\2\2\35\u0092\3\2\2\2\37\u0097\3\2\2\2!\u009e\3\2") + buf.write("\2\2#\u00a0\3\2\2\2%\u00a2\3\2\2\2\'\u00a4\3\2\2\2)\u00a6") + buf.write("\3\2\2\2+\u00aa\3\2\2\2-\u00ae\3\2\2\2/\u00b5\3\2\2\2") + buf.write("\61\u00b8\3\2\2\2\63\u00c0\3\2\2\2\65\u00c6\3\2\2\2\67") + buf.write("\u00cb\3\2\2\29\u00cd\3\2\2\2;\u00e1\3\2\2\2=\u00e6\3") + buf.write("\2\2\2?\u00e8\3\2\2\2A\u00f3\3\2\2\2C\u00f7\3\2\2\2E\u00f9") + buf.write("\3\2\2\2G\u0107\3\2\2\2I\u0113\3\2\2\2KL\7]\2\2L\4\3\2") + buf.write("\2\2MN\7_\2\2N\6\3\2\2\2OP\7g\2\2PQ\7z\2\2QR\7v\2\2RS") + buf.write("\7g\2\2ST\7p\2\2TU\7f\2\2UV\7u\2\2V\b\3\2\2\2WX\7=\2\2") + buf.write("X\n\3\2\2\2YZ\7.\2\2Z\f\3\2\2\2[\\\7U\2\2\\]\7{\2\2]^") + buf.write("\7u\2\2^_\7v\2\2_`\7g\2\2`a\7o\2\2ab\7\60\2\2bc\7q\2\2") + buf.write("cd\7w\2\2de\7v\2\2ef\7\60\2\2fg\7r\2\2gh\7t\2\2hi\7k\2") + buf.write("\2ij\7p\2\2jk\7v\2\2kl\7n\2\2lm\7p\2\2m\16\3\2\2\2no\7") + buf.write("?\2\2o\20\3\2\2\2pq\7n\2\2qr\7g\2\2rs\7p\2\2st\7i\2\2") + buf.write("tu\7v\2\2uv\7j\2\2v\22\3\2\2\2wx\7#\2\2x\24\3\2\2\2yz") + buf.write("\7e\2\2z{\7n\2\2{|\7c\2\2|}\7u\2\2}~\7u\2\2~\26\3\2\2") + buf.write("\2\177\u0080\7r\2\2\u0080\u0081\7w\2\2\u0081\u0082\7d") + buf.write("\2\2\u0082\u0083\7n\2\2\u0083\u0084\7k\2\2\u0084\u0085") + buf.write("\7e\2\2\u0085\30\3\2\2\2\u0086\u0087\7u\2\2\u0087\u0088") + buf.write("\7v\2\2\u0088\u0089\7c\2\2\u0089\u008a\7v\2\2\u008a\u008b") + buf.write("\7k\2\2\u008b\u008c\7e\2\2\u008c\32\3\2\2\2\u008d\u008e") + buf.write("\7x\2\2\u008e\u008f\7q\2\2\u008f\u0090\7k\2\2\u0090\u0091") + buf.write("\7f\2\2\u0091\34\3\2\2\2\u0092\u0093\7o\2\2\u0093\u0094") + buf.write("\7c\2\2\u0094\u0095\7k\2\2\u0095\u0096\7p\2\2\u0096\36") + buf.write("\3\2\2\2\u0097\u0098\7U\2\2\u0098\u0099\7v\2\2\u0099\u009a") + buf.write("\7t\2\2\u009a\u009b\7k\2\2\u009b\u009c\7p\2\2\u009c\u009d") + buf.write("\7i\2\2\u009d \3\2\2\2\u009e\u009f\7}\2\2\u009f\"\3\2") + buf.write("\2\2\u00a0\u00a1\7\177\2\2\u00a1$\3\2\2\2\u00a2\u00a3") + buf.write("\7*\2\2\u00a3&\3\2\2\2\u00a4\u00a5\7+\2\2\u00a5(\3\2\2") + buf.write("\2\u00a6\u00a7\7k\2\2\u00a7\u00a8\7p\2\2\u00a8\u00a9\7") + buf.write("v\2\2\u00a9*\3\2\2\2\u00aa\u00ab\7p\2\2\u00ab\u00ac\7") + buf.write("g\2\2\u00ac\u00ad\7y\2\2\u00ad,\3\2\2\2\u00ae\u00af\7") + buf.write("t\2\2\u00af\u00b0\7g\2\2\u00b0\u00b1\7v\2\2\u00b1\u00b2") + buf.write("\7w\2\2\u00b2\u00b3\7t\2\2\u00b3\u00b4\7p\2\2\u00b4.\3") + buf.write("\2\2\2\u00b5\u00b6\7k\2\2\u00b6\u00b7\7h\2\2\u00b7\60") + buf.write("\3\2\2\2\u00b8\u00b9\7d\2\2\u00b9\u00ba\7q\2\2\u00ba\u00bb") + buf.write("\7q\2\2\u00bb\u00bc\7n\2\2\u00bc\u00bd\7g\2\2\u00bd\u00be") + buf.write("\7c\2\2\u00be\u00bf\7p\2\2\u00bf\62\3\2\2\2\u00c0\u00c1") + buf.write("\7y\2\2\u00c1\u00c2\7j\2\2\u00c2\u00c3\7k\2\2\u00c3\u00c4") + buf.write("\7n\2\2\u00c4\u00c5\7g\2\2\u00c5\64\3\2\2\2\u00c6\u00c7") + buf.write("\7g\2\2\u00c7\u00c8\7n\2\2\u00c8\u00c9\7u\2\2\u00c9\u00ca") + buf.write("\7g\2\2\u00ca\66\3\2\2\2\u00cb\u00cc\7\60\2\2\u00cc8\3") + buf.write("\2\2\2\u00cd\u00d1\5A!\2\u00ce\u00d0\5C\"\2\u00cf\u00ce") + buf.write("\3\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf\3\2\2\2\u00d1") + buf.write("\u00d2\3\2\2\2\u00d2:\3\2\2\2\u00d3\u00d1\3\2\2\2\u00d4") + buf.write("\u00d5\7v\2\2\u00d5\u00d6\7t\2\2\u00d6\u00d7\7w\2\2\u00d7") + buf.write("\u00e2\7g\2\2\u00d8\u00d9\7h\2\2\u00d9\u00da\7c\2\2\u00da") + buf.write("\u00db\7n\2\2\u00db\u00dc\7u\2\2\u00dc\u00e2\7g\2\2\u00dd") + buf.write("\u00de\7v\2\2\u00de\u00df\7j\2\2\u00df\u00e0\7k\2\2\u00e0") + buf.write("\u00e2\7u\2\2\u00e1\u00d4\3\2\2\2\u00e1\u00d8\3\2\2\2") + buf.write("\u00e1\u00dd\3\2\2\2\u00e2<\3\2\2\2\u00e3\u00e4\7(\2\2") + buf.write("\u00e4\u00e7\7(\2\2\u00e5\u00e7\t\2\2\2\u00e6\u00e3\3") + buf.write("\2\2\2\u00e6\u00e5\3\2\2\2\u00e7>\3\2\2\2\u00e8\u00ec") + buf.write("\t\3\2\2\u00e9\u00eb\t\4\2\2\u00ea\u00e9\3\2\2\2\u00eb") + buf.write("\u00ee\3\2\2\2\u00ec\u00ea\3\2\2\2\u00ec\u00ed\3\2\2\2") + buf.write("\u00ed@\3\2\2\2\u00ee\u00ec\3\2\2\2\u00ef\u00f4\t\5\2") + buf.write("\2\u00f0\u00f4\n\6\2\2\u00f1\u00f2\t\7\2\2\u00f2\u00f4") + buf.write("\t\b\2\2\u00f3\u00ef\3\2\2\2\u00f3\u00f0\3\2\2\2\u00f3") + buf.write("\u00f1\3\2\2\2\u00f4B\3\2\2\2\u00f5\u00f8\5A!\2\u00f6") + buf.write("\u00f8\t\3\2\2\u00f7\u00f5\3\2\2\2\u00f7\u00f6\3\2\2\2") + buf.write("\u00f8D\3\2\2\2\u00f9\u00fa\7\61\2\2\u00fa\u00fb\7,\2") + buf.write("\2\u00fb\u00ff\3\2\2\2\u00fc\u00fe\13\2\2\2\u00fd\u00fc") + buf.write("\3\2\2\2\u00fe\u0101\3\2\2\2\u00ff\u0100\3\2\2\2\u00ff") + buf.write("\u00fd\3\2\2\2\u0100\u0102\3\2\2\2\u0101\u00ff\3\2\2\2") + buf.write("\u0102\u0103\7,\2\2\u0103\u0104\7\61\2\2\u0104\u0105\3") + buf.write("\2\2\2\u0105\u0106\b#\2\2\u0106F\3\2\2\2\u0107\u0108\7") + buf.write("\61\2\2\u0108\u0109\7\61\2\2\u0109\u010d\3\2\2\2\u010a") + buf.write("\u010c\n\t\2\2\u010b\u010a\3\2\2\2\u010c\u010f\3\2\2\2") + buf.write("\u010d\u010b\3\2\2\2\u010d\u010e\3\2\2\2\u010e\u0110\3") + buf.write("\2\2\2\u010f\u010d\3\2\2\2\u0110\u0111\b$\2\2\u0111H\3") + buf.write("\2\2\2\u0112\u0114\t\n\2\2\u0113\u0112\3\2\2\2\u0114\u0115") + buf.write("\3\2\2\2\u0115\u0113\3\2\2\2\u0115\u0116\3\2\2\2\u0116") + buf.write("\u0117\3\2\2\2\u0117\u0118\b%\2\2\u0118J\3\2\2\2\f\2\u00d1") + buf.write("\u00e1\u00e6\u00ec\u00f3\u00f7\u00ff\u010d\u0115\3\2\3") + buf.write("\2") + return buf.getvalue() + + +class MiniJavaLexer(Lexer): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + T__0 = 1 + T__1 = 2 + T__2 = 3 + T__3 = 4 + T__4 = 5 + T__5 = 6 + T__6 = 7 + T__7 = 8 + T__8 = 9 + Class = 10 + Public = 11 + Static = 12 + Void = 13 + Main = 14 + String = 15 + BraketOpen = 16 + BraketClose = 17 + ParOpen = 18 + ParClose = 19 + Int = 20 + New = 21 + Return = 22 + If = 23 + Boolean = 24 + While = 25 + Else = 26 + Dot = 27 + Identifier = 28 + KeyWords = 29 + Operations = 30 + IntegerLiteral = 31 + COMMENT = 32 + LINE_COMMENT = 33 + WS = 34 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] + + modeNames = [ "DEFAULT_MODE" ] + + literalNames = [ "", + "'['", "']'", "'extends'", "';'", "','", "'System.out.println'", + "'='", "'length'", "'!'", "'class'", "'public'", "'static'", + "'void'", "'main'", "'String'", "'{'", "'}'", "'('", "')'", + "'int'", "'new'", "'return'", "'if'", "'boolean'", "'while'", + "'else'", "'.'" ] + + symbolicNames = [ "", + "Class", "Public", "Static", "Void", "Main", "String", "BraketOpen", + "BraketClose", "ParOpen", "ParClose", "Int", "New", "Return", + "If", "Boolean", "While", "Else", "Dot", "Identifier", "KeyWords", + "Operations", "IntegerLiteral", "COMMENT", "LINE_COMMENT", "WS" ] + + ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", + "T__7", "T__8", "Class", "Public", "Static", "Void", "Main", + "String", "BraketOpen", "BraketClose", "ParOpen", "ParClose", + "Int", "New", "Return", "If", "Boolean", "While", "Else", + "Dot", "Identifier", "KeyWords", "Operations", "IntegerLiteral", + "Letter", "LetterOrDigit", "COMMENT", "LINE_COMMENT", + "WS" ] + + grammarFileName = "MiniJava.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.9.1") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + diff --git a/Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.tokens b/Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.tokens new file mode 100644 index 0000000..5a499e9 --- /dev/null +++ b/Melika Ahmadi Ranjbar/Gen/MiniJavaLexer.tokens @@ -0,0 +1,61 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +Class=10 +Public=11 +Static=12 +Void=13 +Main=14 +String=15 +BraketOpen=16 +BraketClose=17 +ParOpen=18 +ParClose=19 +Int=20 +New=21 +Return=22 +If=23 +Boolean=24 +While=25 +Else=26 +Dot=27 +Identifier=28 +KeyWords=29 +Operations=30 +IntegerLiteral=31 +COMMENT=32 +LINE_COMMENT=33 +WS=34 +'['=1 +']'=2 +'extends'=3 +';'=4 +','=5 +'System.out.println'=6 +'='=7 +'length'=8 +'!'=9 +'class'=10 +'public'=11 +'static'=12 +'void'=13 +'main'=14 +'String'=15 +'{'=16 +'}'=17 +'('=18 +')'=19 +'int'=20 +'new'=21 +'return'=22 +'if'=23 +'boolean'=24 +'while'=25 +'else'=26 +'.'=27 diff --git a/Melika Ahmadi Ranjbar/Gen/MiniJavaListener.py b/Melika Ahmadi Ranjbar/Gen/MiniJavaListener.py new file mode 100644 index 0000000..5c7d045 --- /dev/null +++ b/Melika Ahmadi Ranjbar/Gen/MiniJavaListener.py @@ -0,0 +1,282 @@ +# Generated from D:/University/Sem6/Compiler/Assignment4\MiniJava.g4 by ANTLR 4.9.1 +from antlr4 import * +if __name__ is not None and "." in __name__: + from .MiniJavaParser import MiniJavaParser +else: + from MiniJavaParser import MiniJavaParser + +# This class defines a complete listener for a parse tree produced by MiniJavaParser. +class MiniJavaListener(ParseTreeListener): + + # Enter a parse tree produced by MiniJavaParser#program. + def enterProgram(self, ctx:MiniJavaParser.ProgramContext): + pass + + # Exit a parse tree produced by MiniJavaParser#program. + def exitProgram(self, ctx:MiniJavaParser.ProgramContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#mainClass. + def enterMainClass(self, ctx:MiniJavaParser.MainClassContext): + pass + + # Exit a parse tree produced by MiniJavaParser#mainClass. + def exitMainClass(self, ctx:MiniJavaParser.MainClassContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#mainClassEnter. + def enterMainClassEnter(self, ctx:MiniJavaParser.MainClassEnterContext): + pass + + # Exit a parse tree produced by MiniJavaParser#mainClassEnter. + def exitMainClassEnter(self, ctx:MiniJavaParser.MainClassEnterContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#mainClassBody. + def enterMainClassBody(self, ctx:MiniJavaParser.MainClassBodyContext): + pass + + # Exit a parse tree produced by MiniJavaParser#mainClassBody. + def exitMainClassBody(self, ctx:MiniJavaParser.MainClassBodyContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#classDeclaration. + def enterClassDeclaration(self, ctx:MiniJavaParser.ClassDeclarationContext): + pass + + # Exit a parse tree produced by MiniJavaParser#classDeclaration. + def exitClassDeclaration(self, ctx:MiniJavaParser.ClassDeclarationContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#varDeclaration. + def enterVarDeclaration(self, ctx:MiniJavaParser.VarDeclarationContext): + pass + + # Exit a parse tree produced by MiniJavaParser#varDeclaration. + def exitVarDeclaration(self, ctx:MiniJavaParser.VarDeclarationContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#methodDeclaration. + def enterMethodDeclaration(self, ctx:MiniJavaParser.MethodDeclarationContext): + pass + + # Exit a parse tree produced by MiniJavaParser#methodDeclaration. + def exitMethodDeclaration(self, ctx:MiniJavaParser.MethodDeclarationContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#array_int. + def enterArray_int(self, ctx:MiniJavaParser.Array_intContext): + pass + + # Exit a parse tree produced by MiniJavaParser#array_int. + def exitArray_int(self, ctx:MiniJavaParser.Array_intContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#bool. + def enterBool(self, ctx:MiniJavaParser.BoolContext): + pass + + # Exit a parse tree produced by MiniJavaParser#bool. + def exitBool(self, ctx:MiniJavaParser.BoolContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#int. + def enterInt(self, ctx:MiniJavaParser.IntContext): + pass + + # Exit a parse tree produced by MiniJavaParser#int. + def exitInt(self, ctx:MiniJavaParser.IntContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#id. + def enterId(self, ctx:MiniJavaParser.IdContext): + pass + + # Exit a parse tree produced by MiniJavaParser#id. + def exitId(self, ctx:MiniJavaParser.IdContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#braket_statement. + def enterBraket_statement(self, ctx:MiniJavaParser.Braket_statementContext): + pass + + # Exit a parse tree produced by MiniJavaParser#braket_statement. + def exitBraket_statement(self, ctx:MiniJavaParser.Braket_statementContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#if_statement. + def enterIf_statement(self, ctx:MiniJavaParser.If_statementContext): + pass + + # Exit a parse tree produced by MiniJavaParser#if_statement. + def exitIf_statement(self, ctx:MiniJavaParser.If_statementContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#while_statement. + def enterWhile_statement(self, ctx:MiniJavaParser.While_statementContext): + pass + + # Exit a parse tree produced by MiniJavaParser#while_statement. + def exitWhile_statement(self, ctx:MiniJavaParser.While_statementContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#print. + def enterPrint(self, ctx:MiniJavaParser.PrintContext): + pass + + # Exit a parse tree produced by MiniJavaParser#print. + def exitPrint(self, ctx:MiniJavaParser.PrintContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#equal_statement. + def enterEqual_statement(self, ctx:MiniJavaParser.Equal_statementContext): + pass + + # Exit a parse tree produced by MiniJavaParser#equal_statement. + def exitEqual_statement(self, ctx:MiniJavaParser.Equal_statementContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#equal_array_statement. + def enterEqual_array_statement(self, ctx:MiniJavaParser.Equal_array_statementContext): + pass + + # Exit a parse tree produced by MiniJavaParser#equal_array_statement. + def exitEqual_array_statement(self, ctx:MiniJavaParser.Equal_array_statementContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#number. + def enterNumber(self, ctx:MiniJavaParser.NumberContext): + pass + + # Exit a parse tree produced by MiniJavaParser#number. + def exitNumber(self, ctx:MiniJavaParser.NumberContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#new_identifier. + def enterNew_identifier(self, ctx:MiniJavaParser.New_identifierContext): + pass + + # Exit a parse tree produced by MiniJavaParser#new_identifier. + def exitNew_identifier(self, ctx:MiniJavaParser.New_identifierContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#not_expression. + def enterNot_expression(self, ctx:MiniJavaParser.Not_expressionContext): + pass + + # Exit a parse tree produced by MiniJavaParser#not_expression. + def exitNot_expression(self, ctx:MiniJavaParser.Not_expressionContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#keywords. + def enterKeywords(self, ctx:MiniJavaParser.KeywordsContext): + pass + + # Exit a parse tree produced by MiniJavaParser#keywords. + def exitKeywords(self, ctx:MiniJavaParser.KeywordsContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#dot_par_expression. + def enterDot_par_expression(self, ctx:MiniJavaParser.Dot_par_expressionContext): + pass + + # Exit a parse tree produced by MiniJavaParser#dot_par_expression. + def exitDot_par_expression(self, ctx:MiniJavaParser.Dot_par_expressionContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#in_par_expression. + def enterIn_par_expression(self, ctx:MiniJavaParser.In_par_expressionContext): + pass + + # Exit a parse tree produced by MiniJavaParser#in_par_expression. + def exitIn_par_expression(self, ctx:MiniJavaParser.In_par_expressionContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#operations_expression. + def enterOperations_expression(self, ctx:MiniJavaParser.Operations_expressionContext): + pass + + # Exit a parse tree produced by MiniJavaParser#operations_expression. + def exitOperations_expression(self, ctx:MiniJavaParser.Operations_expressionContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#array_expression. + def enterArray_expression(self, ctx:MiniJavaParser.Array_expressionContext): + pass + + # Exit a parse tree produced by MiniJavaParser#array_expression. + def exitArray_expression(self, ctx:MiniJavaParser.Array_expressionContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#word. + def enterWord(self, ctx:MiniJavaParser.WordContext): + pass + + # Exit a parse tree produced by MiniJavaParser#word. + def exitWord(self, ctx:MiniJavaParser.WordContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#new_array_expression. + def enterNew_array_expression(self, ctx:MiniJavaParser.New_array_expressionContext): + pass + + # Exit a parse tree produced by MiniJavaParser#new_array_expression. + def exitNew_array_expression(self, ctx:MiniJavaParser.New_array_expressionContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#length_expression. + def enterLength_expression(self, ctx:MiniJavaParser.Length_expressionContext): + pass + + # Exit a parse tree produced by MiniJavaParser#length_expression. + def exitLength_expression(self, ctx:MiniJavaParser.Length_expressionContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#identifier. + def enterIdentifier(self, ctx:MiniJavaParser.IdentifierContext): + pass + + # Exit a parse tree produced by MiniJavaParser#identifier. + def exitIdentifier(self, ctx:MiniJavaParser.IdentifierContext): + pass + + + # Enter a parse tree produced by MiniJavaParser#operations. + def enterOperations(self, ctx:MiniJavaParser.OperationsContext): + pass + + # Exit a parse tree produced by MiniJavaParser#operations. + def exitOperations(self, ctx:MiniJavaParser.OperationsContext): + pass + + + +del MiniJavaParser \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/Gen/MiniJavaParser.py b/Melika Ahmadi Ranjbar/Gen/MiniJavaParser.py new file mode 100644 index 0000000..0ffabbf --- /dev/null +++ b/Melika Ahmadi Ranjbar/Gen/MiniJavaParser.py @@ -0,0 +1,1984 @@ +# Generated from D:/University/Sem6/Compiler/Assignment4\MiniJava.g4 by ANTLR 4.9.1 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + with StringIO() as buf: + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3$") + buf.write("\u00e6\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\3\2") + buf.write("\3\2\7\2\35\n\2\f\2\16\2 \13\2\3\2\3\2\3\3\3\3\3\3\3\4") + buf.write("\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3") + buf.write("\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\5\6>\n\6\3\6\3\6\7") + buf.write("\6B\n\6\f\6\16\6E\13\6\3\6\7\6H\n\6\f\6\16\6K\13\6\3\6") + buf.write("\3\6\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") + buf.write("\b\3\b\7\b]\n\b\f\b\16\b`\13\b\5\bb\n\b\3\b\3\b\3\b\7") + buf.write("\bg\n\b\f\b\16\bj\13\b\3\b\7\bm\n\b\f\b\16\bp\13\b\3\b") + buf.write("\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\5\t}\n\t\3\n") + buf.write("\3\n\7\n\u0081\n\n\f\n\16\n\u0084\13\n\3\n\3\n\3\n\3\n") + buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") + buf.write("\3\n\3\n\3\n\5\n\u00a8\n\n\3\13\3\13\3\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\5\13\u00bf\n\13\3\13\3\13\3") + buf.write("\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13") + buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\7\13\u00d4\n\13\f\13\16") + buf.write("\13\u00d7\13\13\5\13\u00d9\n\13\3\13\3\13\7\13\u00dd\n") + buf.write("\13\f\13\16\13\u00e0\13\13\3\f\3\f\3\r\3\r\3\r\2\3\24") + buf.write("\16\2\4\6\b\n\f\16\20\22\24\26\30\2\2\2\u00f6\2\32\3\2") + buf.write("\2\2\4#\3\2\2\2\6&\3\2\2\2\b+\3\2\2\2\n9\3\2\2\2\fN\3") + buf.write("\2\2\2\16R\3\2\2\2\20|\3\2\2\2\22\u00a7\3\2\2\2\24\u00be") + buf.write("\3\2\2\2\26\u00e1\3\2\2\2\30\u00e3\3\2\2\2\32\36\5\4\3") + buf.write("\2\33\35\5\n\6\2\34\33\3\2\2\2\35 \3\2\2\2\36\34\3\2\2") + buf.write("\2\36\37\3\2\2\2\37!\3\2\2\2 \36\3\2\2\2!\"\7\2\2\3\"") + buf.write("\3\3\2\2\2#$\7\f\2\2$%\5\6\4\2%\5\3\2\2\2&\'\5\26\f\2") + buf.write("\'(\7\22\2\2()\5\b\5\2)*\7\23\2\2*\7\3\2\2\2+,\7\r\2\2") + buf.write(",-\7\16\2\2-.\7\17\2\2./\7\20\2\2/\60\7\24\2\2\60\61\7") + buf.write("\21\2\2\61\62\7\3\2\2\62\63\7\4\2\2\63\64\5\26\f\2\64") + buf.write("\65\7\25\2\2\65\66\7\22\2\2\66\67\5\22\n\2\678\7\23\2") + buf.write("\28\t\3\2\2\29:\7\f\2\2:=\5\26\f\2;<\7\5\2\2<>\5\26\f") + buf.write("\2=;\3\2\2\2=>\3\2\2\2>?\3\2\2\2?C\7\22\2\2@B\5\f\7\2") + buf.write("A@\3\2\2\2BE\3\2\2\2CA\3\2\2\2CD\3\2\2\2DI\3\2\2\2EC\3") + buf.write("\2\2\2FH\5\16\b\2GF\3\2\2\2HK\3\2\2\2IG\3\2\2\2IJ\3\2") + buf.write("\2\2JL\3\2\2\2KI\3\2\2\2LM\7\23\2\2M\13\3\2\2\2NO\5\20") + buf.write("\t\2OP\5\26\f\2PQ\7\6\2\2Q\r\3\2\2\2RS\7\r\2\2ST\5\20") + buf.write("\t\2TU\5\26\f\2Ua\7\24\2\2VW\5\20\t\2W^\5\26\f\2XY\7\7") + buf.write("\2\2YZ\5\20\t\2Z[\5\26\f\2[]\3\2\2\2\\X\3\2\2\2]`\3\2") + buf.write("\2\2^\\\3\2\2\2^_\3\2\2\2_b\3\2\2\2`^\3\2\2\2aV\3\2\2") + buf.write("\2ab\3\2\2\2bc\3\2\2\2cd\7\25\2\2dh\7\22\2\2eg\5\f\7\2") + buf.write("fe\3\2\2\2gj\3\2\2\2hf\3\2\2\2hi\3\2\2\2in\3\2\2\2jh\3") + buf.write("\2\2\2km\5\22\n\2lk\3\2\2\2mp\3\2\2\2nl\3\2\2\2no\3\2") + buf.write("\2\2oq\3\2\2\2pn\3\2\2\2qr\7\30\2\2rs\5\24\13\2st\7\6") + buf.write("\2\2tu\7\23\2\2u\17\3\2\2\2vw\7\26\2\2wx\7\3\2\2x}\7\4") + buf.write("\2\2y}\7\32\2\2z}\7\26\2\2{}\5\26\f\2|v\3\2\2\2|y\3\2") + buf.write("\2\2|z\3\2\2\2|{\3\2\2\2}\21\3\2\2\2~\u0082\7\22\2\2\177") + buf.write("\u0081\5\22\n\2\u0080\177\3\2\2\2\u0081\u0084\3\2\2\2") + buf.write("\u0082\u0080\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0085\3") + buf.write("\2\2\2\u0084\u0082\3\2\2\2\u0085\u00a8\7\23\2\2\u0086") + buf.write("\u0087\7\31\2\2\u0087\u0088\7\24\2\2\u0088\u0089\5\24") + buf.write("\13\2\u0089\u008a\7\25\2\2\u008a\u008b\5\22\n\2\u008b") + buf.write("\u008c\7\34\2\2\u008c\u008d\5\22\n\2\u008d\u00a8\3\2\2") + buf.write("\2\u008e\u008f\7\33\2\2\u008f\u0090\7\24\2\2\u0090\u0091") + buf.write("\5\24\13\2\u0091\u0092\7\25\2\2\u0092\u0093\5\22\n\2\u0093") + buf.write("\u00a8\3\2\2\2\u0094\u0095\7\b\2\2\u0095\u0096\7\24\2") + buf.write("\2\u0096\u0097\5\24\13\2\u0097\u0098\7\25\2\2\u0098\u0099") + buf.write("\7\6\2\2\u0099\u00a8\3\2\2\2\u009a\u009b\5\26\f\2\u009b") + buf.write("\u009c\7\t\2\2\u009c\u009d\5\24\13\2\u009d\u009e\7\6\2") + buf.write("\2\u009e\u00a8\3\2\2\2\u009f\u00a0\5\26\f\2\u00a0\u00a1") + buf.write("\7\3\2\2\u00a1\u00a2\5\24\13\2\u00a2\u00a3\7\4\2\2\u00a3") + buf.write("\u00a4\7\t\2\2\u00a4\u00a5\5\24\13\2\u00a5\u00a6\7\6\2") + buf.write("\2\u00a6\u00a8\3\2\2\2\u00a7~\3\2\2\2\u00a7\u0086\3\2") + buf.write("\2\2\u00a7\u008e\3\2\2\2\u00a7\u0094\3\2\2\2\u00a7\u009a") + buf.write("\3\2\2\2\u00a7\u009f\3\2\2\2\u00a8\23\3\2\2\2\u00a9\u00aa") + buf.write("\b\13\1\2\u00aa\u00bf\7!\2\2\u00ab\u00bf\7\37\2\2\u00ac") + buf.write("\u00bf\5\26\f\2\u00ad\u00ae\7\27\2\2\u00ae\u00af\7\26") + buf.write("\2\2\u00af\u00b0\7\3\2\2\u00b0\u00b1\5\24\13\2\u00b1\u00b2") + buf.write("\7\4\2\2\u00b2\u00bf\3\2\2\2\u00b3\u00b4\7\27\2\2\u00b4") + buf.write("\u00b5\5\26\f\2\u00b5\u00b6\7\24\2\2\u00b6\u00b7\7\25") + buf.write("\2\2\u00b7\u00bf\3\2\2\2\u00b8\u00b9\7\13\2\2\u00b9\u00bf") + buf.write("\5\24\13\4\u00ba\u00bb\7\24\2\2\u00bb\u00bc\5\24\13\2") + buf.write("\u00bc\u00bd\7\25\2\2\u00bd\u00bf\3\2\2\2\u00be\u00a9") + buf.write("\3\2\2\2\u00be\u00ab\3\2\2\2\u00be\u00ac\3\2\2\2\u00be") + buf.write("\u00ad\3\2\2\2\u00be\u00b3\3\2\2\2\u00be\u00b8\3\2\2\2") + buf.write("\u00be\u00ba\3\2\2\2\u00bf\u00de\3\2\2\2\u00c0\u00c1\f") + buf.write("\r\2\2\u00c1\u00c2\5\30\r\2\u00c2\u00c3\5\24\13\16\u00c3") + buf.write("\u00dd\3\2\2\2\u00c4\u00c5\f\f\2\2\u00c5\u00c6\7\3\2\2") + buf.write("\u00c6\u00c7\5\24\13\2\u00c7\u00c8\7\4\2\2\u00c8\u00dd") + buf.write("\3\2\2\2\u00c9\u00ca\f\13\2\2\u00ca\u00cb\7\35\2\2\u00cb") + buf.write("\u00dd\7\n\2\2\u00cc\u00cd\f\n\2\2\u00cd\u00ce\7\35\2") + buf.write("\2\u00ce\u00cf\5\26\f\2\u00cf\u00d8\7\24\2\2\u00d0\u00d5") + buf.write("\5\24\13\2\u00d1\u00d2\7\7\2\2\u00d2\u00d4\5\24\13\2\u00d3") + buf.write("\u00d1\3\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2") + buf.write("\u00d5\u00d6\3\2\2\2\u00d6\u00d9\3\2\2\2\u00d7\u00d5\3") + buf.write("\2\2\2\u00d8\u00d0\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9\u00da") + buf.write("\3\2\2\2\u00da\u00db\7\25\2\2\u00db\u00dd\3\2\2\2\u00dc") + buf.write("\u00c0\3\2\2\2\u00dc\u00c4\3\2\2\2\u00dc\u00c9\3\2\2\2") + buf.write("\u00dc\u00cc\3\2\2\2\u00dd\u00e0\3\2\2\2\u00de\u00dc\3") + buf.write("\2\2\2\u00de\u00df\3\2\2\2\u00df\25\3\2\2\2\u00e0\u00de") + buf.write("\3\2\2\2\u00e1\u00e2\7\36\2\2\u00e2\27\3\2\2\2\u00e3\u00e4") + buf.write("\7 \2\2\u00e4\31\3\2\2\2\22\36=CI^ahn|\u0082\u00a7\u00be") + buf.write("\u00d5\u00d8\u00dc\u00de") + return buf.getvalue() + + +class MiniJavaParser ( Parser ): + + grammarFileName = "MiniJava.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "", "'['", "']'", "'extends'", "';'", "','", + "'System.out.println'", "'='", "'length'", "'!'", "'class'", + "'public'", "'static'", "'void'", "'main'", "'String'", + "'{'", "'}'", "'('", "')'", "'int'", "'new'", "'return'", + "'if'", "'boolean'", "'while'", "'else'", "'.'" ] + + symbolicNames = [ "", "", "", "", + "", "", "", "", + "", "", "Class", "Public", "Static", + "Void", "Main", "String", "BraketOpen", "BraketClose", + "ParOpen", "ParClose", "Int", "New", "Return", "If", + "Boolean", "While", "Else", "Dot", "Identifier", "KeyWords", + "Operations", "IntegerLiteral", "COMMENT", "LINE_COMMENT", + "WS" ] + + RULE_program = 0 + RULE_mainClass = 1 + RULE_mainClassEnter = 2 + RULE_mainClassBody = 3 + RULE_classDeclaration = 4 + RULE_varDeclaration = 5 + RULE_methodDeclaration = 6 + RULE_kind = 7 + RULE_statement = 8 + RULE_expression = 9 + RULE_identifier = 10 + RULE_operations = 11 + + ruleNames = [ "program", "mainClass", "mainClassEnter", "mainClassBody", + "classDeclaration", "varDeclaration", "methodDeclaration", + "kind", "statement", "expression", "identifier", "operations" ] + + EOF = Token.EOF + T__0=1 + T__1=2 + T__2=3 + T__3=4 + T__4=5 + T__5=6 + T__6=7 + T__7=8 + T__8=9 + Class=10 + Public=11 + Static=12 + Void=13 + Main=14 + String=15 + BraketOpen=16 + BraketClose=17 + ParOpen=18 + ParClose=19 + Int=20 + New=21 + Return=22 + If=23 + Boolean=24 + While=25 + Else=26 + Dot=27 + Identifier=28 + KeyWords=29 + Operations=30 + IntegerLiteral=31 + COMMENT=32 + LINE_COMMENT=33 + WS=34 + + def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.9.1") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + + class ProgramContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + def mainClass(self): + return self.getTypedRuleContext(MiniJavaParser.MainClassContext,0) + + + def EOF(self): + return self.getToken(MiniJavaParser.EOF, 0) + + def classDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.ClassDeclarationContext) + else: + return self.getTypedRuleContext(MiniJavaParser.ClassDeclarationContext,i) + + + def getRuleIndex(self): + return MiniJavaParser.RULE_program + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterProgram" ): + listener.enterProgram(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitProgram" ): + listener.exitProgram(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitProgram" ): + return visitor.visitProgram(self) + else: + return visitor.visitChildren(self) + + + + + def program(self): + + localctx = MiniJavaParser.ProgramContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_program) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 24 + self.mainClass() + self.state = 28 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==MiniJavaParser.Class: + self.state = 25 + self.classDeclaration() + self.state = 30 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 31 + self.match(MiniJavaParser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MainClassContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + def Class(self): + return self.getToken(MiniJavaParser.Class, 0) + + def mainClassEnter(self): + return self.getTypedRuleContext(MiniJavaParser.MainClassEnterContext,0) + + + def getRuleIndex(self): + return MiniJavaParser.RULE_mainClass + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMainClass" ): + listener.enterMainClass(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMainClass" ): + listener.exitMainClass(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMainClass" ): + return visitor.visitMainClass(self) + else: + return visitor.visitChildren(self) + + + + + def mainClass(self): + + localctx = MiniJavaParser.MainClassContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_mainClass) + try: + self.enterOuterAlt(localctx, 1) + self.state = 33 + self.match(MiniJavaParser.Class) + self.state = 34 + self.mainClassEnter() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MainClassEnterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + def identifier(self): + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,0) + + + def BraketOpen(self): + return self.getToken(MiniJavaParser.BraketOpen, 0) + + def mainClassBody(self): + return self.getTypedRuleContext(MiniJavaParser.MainClassBodyContext,0) + + + def BraketClose(self): + return self.getToken(MiniJavaParser.BraketClose, 0) + + def getRuleIndex(self): + return MiniJavaParser.RULE_mainClassEnter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMainClassEnter" ): + listener.enterMainClassEnter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMainClassEnter" ): + listener.exitMainClassEnter(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMainClassEnter" ): + return visitor.visitMainClassEnter(self) + else: + return visitor.visitChildren(self) + + + + + def mainClassEnter(self): + + localctx = MiniJavaParser.MainClassEnterContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_mainClassEnter) + try: + self.enterOuterAlt(localctx, 1) + self.state = 36 + self.identifier() + self.state = 37 + self.match(MiniJavaParser.BraketOpen) + self.state = 38 + self.mainClassBody() + self.state = 39 + self.match(MiniJavaParser.BraketClose) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MainClassBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + def Public(self): + return self.getToken(MiniJavaParser.Public, 0) + + def Static(self): + return self.getToken(MiniJavaParser.Static, 0) + + def Void(self): + return self.getToken(MiniJavaParser.Void, 0) + + def Main(self): + return self.getToken(MiniJavaParser.Main, 0) + + def ParOpen(self): + return self.getToken(MiniJavaParser.ParOpen, 0) + + def String(self): + return self.getToken(MiniJavaParser.String, 0) + + def identifier(self): + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,0) + + + def ParClose(self): + return self.getToken(MiniJavaParser.ParClose, 0) + + def BraketOpen(self): + return self.getToken(MiniJavaParser.BraketOpen, 0) + + def statement(self): + return self.getTypedRuleContext(MiniJavaParser.StatementContext,0) + + + def BraketClose(self): + return self.getToken(MiniJavaParser.BraketClose, 0) + + def getRuleIndex(self): + return MiniJavaParser.RULE_mainClassBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMainClassBody" ): + listener.enterMainClassBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMainClassBody" ): + listener.exitMainClassBody(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMainClassBody" ): + return visitor.visitMainClassBody(self) + else: + return visitor.visitChildren(self) + + + + + def mainClassBody(self): + + localctx = MiniJavaParser.MainClassBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_mainClassBody) + try: + self.enterOuterAlt(localctx, 1) + self.state = 41 + self.match(MiniJavaParser.Public) + self.state = 42 + self.match(MiniJavaParser.Static) + self.state = 43 + self.match(MiniJavaParser.Void) + self.state = 44 + self.match(MiniJavaParser.Main) + self.state = 45 + self.match(MiniJavaParser.ParOpen) + self.state = 46 + self.match(MiniJavaParser.String) + self.state = 47 + self.match(MiniJavaParser.T__0) + self.state = 48 + self.match(MiniJavaParser.T__1) + self.state = 49 + self.identifier() + self.state = 50 + self.match(MiniJavaParser.ParClose) + self.state = 51 + self.match(MiniJavaParser.BraketOpen) + self.state = 52 + self.statement() + self.state = 53 + self.match(MiniJavaParser.BraketClose) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + def Class(self): + return self.getToken(MiniJavaParser.Class, 0) + + def identifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.IdentifierContext) + else: + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,i) + + + def BraketOpen(self): + return self.getToken(MiniJavaParser.BraketOpen, 0) + + def BraketClose(self): + return self.getToken(MiniJavaParser.BraketClose, 0) + + def varDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.VarDeclarationContext) + else: + return self.getTypedRuleContext(MiniJavaParser.VarDeclarationContext,i) + + + def methodDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.MethodDeclarationContext) + else: + return self.getTypedRuleContext(MiniJavaParser.MethodDeclarationContext,i) + + + def getRuleIndex(self): + return MiniJavaParser.RULE_classDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassDeclaration" ): + listener.enterClassDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassDeclaration" ): + listener.exitClassDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitClassDeclaration" ): + return visitor.visitClassDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def classDeclaration(self): + + localctx = MiniJavaParser.ClassDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_classDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 55 + self.match(MiniJavaParser.Class) + self.state = 56 + self.identifier() + self.state = 59 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==MiniJavaParser.T__2: + self.state = 57 + self.match(MiniJavaParser.T__2) + self.state = 58 + self.identifier() + + + self.state = 61 + self.match(MiniJavaParser.BraketOpen) + self.state = 65 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << MiniJavaParser.Int) | (1 << MiniJavaParser.Boolean) | (1 << MiniJavaParser.Identifier))) != 0): + self.state = 62 + self.varDeclaration() + self.state = 67 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 71 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==MiniJavaParser.Public: + self.state = 68 + self.methodDeclaration() + self.state = 73 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 74 + self.match(MiniJavaParser.BraketClose) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VarDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + def kind(self): + return self.getTypedRuleContext(MiniJavaParser.KindContext,0) + + + def identifier(self): + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,0) + + + def getRuleIndex(self): + return MiniJavaParser.RULE_varDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVarDeclaration" ): + listener.enterVarDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVarDeclaration" ): + listener.exitVarDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitVarDeclaration" ): + return visitor.visitVarDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def varDeclaration(self): + + localctx = MiniJavaParser.VarDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_varDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 76 + self.kind() + self.state = 77 + self.identifier() + self.state = 78 + self.match(MiniJavaParser.T__3) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + def Public(self): + return self.getToken(MiniJavaParser.Public, 0) + + def kind(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.KindContext) + else: + return self.getTypedRuleContext(MiniJavaParser.KindContext,i) + + + def identifier(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.IdentifierContext) + else: + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,i) + + + def ParOpen(self): + return self.getToken(MiniJavaParser.ParOpen, 0) + + def ParClose(self): + return self.getToken(MiniJavaParser.ParClose, 0) + + def BraketOpen(self): + return self.getToken(MiniJavaParser.BraketOpen, 0) + + def Return(self): + return self.getToken(MiniJavaParser.Return, 0) + + def expression(self): + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,0) + + + def BraketClose(self): + return self.getToken(MiniJavaParser.BraketClose, 0) + + def varDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.VarDeclarationContext) + else: + return self.getTypedRuleContext(MiniJavaParser.VarDeclarationContext,i) + + + def statement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.StatementContext) + else: + return self.getTypedRuleContext(MiniJavaParser.StatementContext,i) + + + def getRuleIndex(self): + return MiniJavaParser.RULE_methodDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodDeclaration" ): + listener.enterMethodDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodDeclaration" ): + listener.exitMethodDeclaration(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitMethodDeclaration" ): + return visitor.visitMethodDeclaration(self) + else: + return visitor.visitChildren(self) + + + + + def methodDeclaration(self): + + localctx = MiniJavaParser.MethodDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_methodDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 80 + self.match(MiniJavaParser.Public) + self.state = 81 + self.kind() + self.state = 82 + self.identifier() + self.state = 83 + self.match(MiniJavaParser.ParOpen) + self.state = 95 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << MiniJavaParser.Int) | (1 << MiniJavaParser.Boolean) | (1 << MiniJavaParser.Identifier))) != 0): + self.state = 84 + self.kind() + self.state = 85 + self.identifier() + self.state = 92 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==MiniJavaParser.T__4: + self.state = 86 + self.match(MiniJavaParser.T__4) + self.state = 87 + self.kind() + self.state = 88 + self.identifier() + self.state = 94 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 97 + self.match(MiniJavaParser.ParClose) + self.state = 98 + self.match(MiniJavaParser.BraketOpen) + self.state = 102 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,6,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 99 + self.varDeclaration() + self.state = 104 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,6,self._ctx) + + self.state = 108 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << MiniJavaParser.T__5) | (1 << MiniJavaParser.BraketOpen) | (1 << MiniJavaParser.If) | (1 << MiniJavaParser.While) | (1 << MiniJavaParser.Identifier))) != 0): + self.state = 105 + self.statement() + self.state = 110 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 111 + self.match(MiniJavaParser.Return) + self.state = 112 + self.expression(0) + self.state = 113 + self.match(MiniJavaParser.T__3) + self.state = 114 + self.match(MiniJavaParser.BraketClose) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class KindContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + + def getRuleIndex(self): + return MiniJavaParser.RULE_kind + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + self.value_attr = ctx.value_attr + self.type_attr = ctx.type_attr + + + + class BoolContext(KindContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.KindContext + super().__init__(parser) + self.copyFrom(ctx) + + def Boolean(self): + return self.getToken(MiniJavaParser.Boolean, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBool" ): + listener.enterBool(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBool" ): + listener.exitBool(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBool" ): + return visitor.visitBool(self) + else: + return visitor.visitChildren(self) + + + class IdContext(KindContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.KindContext + super().__init__(parser) + self.copyFrom(ctx) + + def identifier(self): + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterId" ): + listener.enterId(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitId" ): + listener.exitId(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitId" ): + return visitor.visitId(self) + else: + return visitor.visitChildren(self) + + + class IntContext(KindContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.KindContext + super().__init__(parser) + self.copyFrom(ctx) + + def Int(self): + return self.getToken(MiniJavaParser.Int, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInt" ): + listener.enterInt(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInt" ): + listener.exitInt(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitInt" ): + return visitor.visitInt(self) + else: + return visitor.visitChildren(self) + + + class Array_intContext(KindContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.KindContext + super().__init__(parser) + self.copyFrom(ctx) + + def Int(self): + return self.getToken(MiniJavaParser.Int, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArray_int" ): + listener.enterArray_int(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArray_int" ): + listener.exitArray_int(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArray_int" ): + return visitor.visitArray_int(self) + else: + return visitor.visitChildren(self) + + + + def kind(self): + + localctx = MiniJavaParser.KindContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_kind) + try: + self.state = 122 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,8,self._ctx) + if la_ == 1: + localctx = MiniJavaParser.Array_intContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 116 + self.match(MiniJavaParser.Int) + self.state = 117 + self.match(MiniJavaParser.T__0) + self.state = 118 + self.match(MiniJavaParser.T__1) + pass + + elif la_ == 2: + localctx = MiniJavaParser.BoolContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 119 + self.match(MiniJavaParser.Boolean) + pass + + elif la_ == 3: + localctx = MiniJavaParser.IntContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 120 + self.match(MiniJavaParser.Int) + pass + + elif la_ == 4: + localctx = MiniJavaParser.IdContext(self, localctx) + self.enterOuterAlt(localctx, 4) + self.state = 121 + self.identifier() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + + def getRuleIndex(self): + return MiniJavaParser.RULE_statement + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + self.value_attr = ctx.value_attr + self.type_attr = ctx.type_attr + + + + class Braket_statementContext(StatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.StatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def BraketOpen(self): + return self.getToken(MiniJavaParser.BraketOpen, 0) + def BraketClose(self): + return self.getToken(MiniJavaParser.BraketClose, 0) + def statement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.StatementContext) + else: + return self.getTypedRuleContext(MiniJavaParser.StatementContext,i) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBraket_statement" ): + listener.enterBraket_statement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBraket_statement" ): + listener.exitBraket_statement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBraket_statement" ): + return visitor.visitBraket_statement(self) + else: + return visitor.visitChildren(self) + + + class PrintContext(StatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.StatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def ParOpen(self): + return self.getToken(MiniJavaParser.ParOpen, 0) + def expression(self): + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,0) + + def ParClose(self): + return self.getToken(MiniJavaParser.ParClose, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPrint" ): + listener.enterPrint(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPrint" ): + listener.exitPrint(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPrint" ): + return visitor.visitPrint(self) + else: + return visitor.visitChildren(self) + + + class Equal_array_statementContext(StatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.StatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def identifier(self): + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,0) + + def expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.ExpressionContext) + else: + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,i) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEqual_array_statement" ): + listener.enterEqual_array_statement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEqual_array_statement" ): + listener.exitEqual_array_statement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEqual_array_statement" ): + return visitor.visitEqual_array_statement(self) + else: + return visitor.visitChildren(self) + + + class Equal_statementContext(StatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.StatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def identifier(self): + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,0) + + def expression(self): + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEqual_statement" ): + listener.enterEqual_statement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEqual_statement" ): + listener.exitEqual_statement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitEqual_statement" ): + return visitor.visitEqual_statement(self) + else: + return visitor.visitChildren(self) + + + class If_statementContext(StatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.StatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def If(self): + return self.getToken(MiniJavaParser.If, 0) + def ParOpen(self): + return self.getToken(MiniJavaParser.ParOpen, 0) + def expression(self): + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,0) + + def ParClose(self): + return self.getToken(MiniJavaParser.ParClose, 0) + def statement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.StatementContext) + else: + return self.getTypedRuleContext(MiniJavaParser.StatementContext,i) + + def Else(self): + return self.getToken(MiniJavaParser.Else, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIf_statement" ): + listener.enterIf_statement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIf_statement" ): + listener.exitIf_statement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIf_statement" ): + return visitor.visitIf_statement(self) + else: + return visitor.visitChildren(self) + + + class While_statementContext(StatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.StatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def While(self): + return self.getToken(MiniJavaParser.While, 0) + def ParOpen(self): + return self.getToken(MiniJavaParser.ParOpen, 0) + def expression(self): + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,0) + + def ParClose(self): + return self.getToken(MiniJavaParser.ParClose, 0) + def statement(self): + return self.getTypedRuleContext(MiniJavaParser.StatementContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterWhile_statement" ): + listener.enterWhile_statement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitWhile_statement" ): + listener.exitWhile_statement(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWhile_statement" ): + return visitor.visitWhile_statement(self) + else: + return visitor.visitChildren(self) + + + + def statement(self): + + localctx = MiniJavaParser.StatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_statement) + self._la = 0 # Token type + try: + self.state = 165 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,10,self._ctx) + if la_ == 1: + localctx = MiniJavaParser.Braket_statementContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 124 + self.match(MiniJavaParser.BraketOpen) + self.state = 128 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << MiniJavaParser.T__5) | (1 << MiniJavaParser.BraketOpen) | (1 << MiniJavaParser.If) | (1 << MiniJavaParser.While) | (1 << MiniJavaParser.Identifier))) != 0): + self.state = 125 + self.statement() + self.state = 130 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 131 + self.match(MiniJavaParser.BraketClose) + pass + + elif la_ == 2: + localctx = MiniJavaParser.If_statementContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 132 + self.match(MiniJavaParser.If) + self.state = 133 + self.match(MiniJavaParser.ParOpen) + self.state = 134 + self.expression(0) + self.state = 135 + self.match(MiniJavaParser.ParClose) + self.state = 136 + self.statement() + self.state = 137 + self.match(MiniJavaParser.Else) + self.state = 138 + self.statement() + pass + + elif la_ == 3: + localctx = MiniJavaParser.While_statementContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 140 + self.match(MiniJavaParser.While) + self.state = 141 + self.match(MiniJavaParser.ParOpen) + self.state = 142 + self.expression(0) + self.state = 143 + self.match(MiniJavaParser.ParClose) + self.state = 144 + self.statement() + pass + + elif la_ == 4: + localctx = MiniJavaParser.PrintContext(self, localctx) + self.enterOuterAlt(localctx, 4) + self.state = 146 + self.match(MiniJavaParser.T__5) + self.state = 147 + self.match(MiniJavaParser.ParOpen) + self.state = 148 + self.expression(0) + self.state = 149 + self.match(MiniJavaParser.ParClose) + self.state = 150 + self.match(MiniJavaParser.T__3) + pass + + elif la_ == 5: + localctx = MiniJavaParser.Equal_statementContext(self, localctx) + self.enterOuterAlt(localctx, 5) + self.state = 152 + self.identifier() + self.state = 153 + self.match(MiniJavaParser.T__6) + self.state = 154 + self.expression(0) + self.state = 155 + self.match(MiniJavaParser.T__3) + pass + + elif la_ == 6: + localctx = MiniJavaParser.Equal_array_statementContext(self, localctx) + self.enterOuterAlt(localctx, 6) + self.state = 157 + self.identifier() + self.state = 158 + self.match(MiniJavaParser.T__0) + self.state = 159 + self.expression(0) + self.state = 160 + self.match(MiniJavaParser.T__1) + self.state = 161 + self.match(MiniJavaParser.T__6) + self.state = 162 + self.expression(0) + self.state = 163 + self.match(MiniJavaParser.T__3) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + + def getRuleIndex(self): + return MiniJavaParser.RULE_expression + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + self.value_attr = ctx.value_attr + self.type_attr = ctx.type_attr + + + class NumberContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def IntegerLiteral(self): + return self.getToken(MiniJavaParser.IntegerLiteral, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNumber" ): + listener.enterNumber(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNumber" ): + listener.exitNumber(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNumber" ): + return visitor.visitNumber(self) + else: + return visitor.visitChildren(self) + + + class New_identifierContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def New(self): + return self.getToken(MiniJavaParser.New, 0) + def identifier(self): + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,0) + + def ParOpen(self): + return self.getToken(MiniJavaParser.ParOpen, 0) + def ParClose(self): + return self.getToken(MiniJavaParser.ParClose, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNew_identifier" ): + listener.enterNew_identifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNew_identifier" ): + listener.exitNew_identifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNew_identifier" ): + return visitor.visitNew_identifier(self) + else: + return visitor.visitChildren(self) + + + class Not_expressionContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def expression(self): + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNot_expression" ): + listener.enterNot_expression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNot_expression" ): + listener.exitNot_expression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNot_expression" ): + return visitor.visitNot_expression(self) + else: + return visitor.visitChildren(self) + + + class KeywordsContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def KeyWords(self): + return self.getToken(MiniJavaParser.KeyWords, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterKeywords" ): + listener.enterKeywords(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitKeywords" ): + listener.exitKeywords(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitKeywords" ): + return visitor.visitKeywords(self) + else: + return visitor.visitChildren(self) + + + class Dot_par_expressionContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.ExpressionContext) + else: + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,i) + + def Dot(self): + return self.getToken(MiniJavaParser.Dot, 0) + def identifier(self): + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,0) + + def ParOpen(self): + return self.getToken(MiniJavaParser.ParOpen, 0) + def ParClose(self): + return self.getToken(MiniJavaParser.ParClose, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDot_par_expression" ): + listener.enterDot_par_expression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDot_par_expression" ): + listener.exitDot_par_expression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitDot_par_expression" ): + return visitor.visitDot_par_expression(self) + else: + return visitor.visitChildren(self) + + + class In_par_expressionContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def ParOpen(self): + return self.getToken(MiniJavaParser.ParOpen, 0) + def expression(self): + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,0) + + def ParClose(self): + return self.getToken(MiniJavaParser.ParClose, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIn_par_expression" ): + listener.enterIn_par_expression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIn_par_expression" ): + listener.exitIn_par_expression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIn_par_expression" ): + return visitor.visitIn_par_expression(self) + else: + return visitor.visitChildren(self) + + + class Operations_expressionContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.ExpressionContext) + else: + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,i) + + def operations(self): + return self.getTypedRuleContext(MiniJavaParser.OperationsContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOperations_expression" ): + listener.enterOperations_expression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOperations_expression" ): + listener.exitOperations_expression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOperations_expression" ): + return visitor.visitOperations_expression(self) + else: + return visitor.visitChildren(self) + + + class Array_expressionContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def expression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MiniJavaParser.ExpressionContext) + else: + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,i) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArray_expression" ): + listener.enterArray_expression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArray_expression" ): + listener.exitArray_expression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitArray_expression" ): + return visitor.visitArray_expression(self) + else: + return visitor.visitChildren(self) + + + class WordContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def identifier(self): + return self.getTypedRuleContext(MiniJavaParser.IdentifierContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterWord" ): + listener.enterWord(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitWord" ): + listener.exitWord(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitWord" ): + return visitor.visitWord(self) + else: + return visitor.visitChildren(self) + + + class New_array_expressionContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def New(self): + return self.getToken(MiniJavaParser.New, 0) + def Int(self): + return self.getToken(MiniJavaParser.Int, 0) + def expression(self): + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNew_array_expression" ): + listener.enterNew_array_expression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNew_array_expression" ): + listener.exitNew_array_expression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNew_array_expression" ): + return visitor.visitNew_array_expression(self) + else: + return visitor.visitChildren(self) + + + class Length_expressionContext(ExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MiniJavaParser.ExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def expression(self): + return self.getTypedRuleContext(MiniJavaParser.ExpressionContext,0) + + def Dot(self): + return self.getToken(MiniJavaParser.Dot, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLength_expression" ): + listener.enterLength_expression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLength_expression" ): + listener.exitLength_expression(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitLength_expression" ): + return visitor.visitLength_expression(self) + else: + return visitor.visitChildren(self) + + + + def expression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = MiniJavaParser.ExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 18 + self.enterRecursionRule(localctx, 18, self.RULE_expression, _p) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 188 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,11,self._ctx) + if la_ == 1: + localctx = MiniJavaParser.NumberContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + + self.state = 168 + self.match(MiniJavaParser.IntegerLiteral) + pass + + elif la_ == 2: + localctx = MiniJavaParser.KeywordsContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 169 + self.match(MiniJavaParser.KeyWords) + pass + + elif la_ == 3: + localctx = MiniJavaParser.WordContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 170 + self.identifier() + pass + + elif la_ == 4: + localctx = MiniJavaParser.New_array_expressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 171 + self.match(MiniJavaParser.New) + self.state = 172 + self.match(MiniJavaParser.Int) + self.state = 173 + self.match(MiniJavaParser.T__0) + self.state = 174 + self.expression(0) + self.state = 175 + self.match(MiniJavaParser.T__1) + pass + + elif la_ == 5: + localctx = MiniJavaParser.New_identifierContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 177 + self.match(MiniJavaParser.New) + self.state = 178 + self.identifier() + self.state = 179 + self.match(MiniJavaParser.ParOpen) + self.state = 180 + self.match(MiniJavaParser.ParClose) + pass + + elif la_ == 6: + localctx = MiniJavaParser.Not_expressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 182 + self.match(MiniJavaParser.T__8) + self.state = 183 + self.expression(2) + pass + + elif la_ == 7: + localctx = MiniJavaParser.In_par_expressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 184 + self.match(MiniJavaParser.ParOpen) + self.state = 185 + self.expression(0) + self.state = 186 + self.match(MiniJavaParser.ParClose) + pass + + + self._ctx.stop = self._input.LT(-1) + self.state = 220 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,15,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 218 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,14,self._ctx) + if la_ == 1: + localctx = MiniJavaParser.Operations_expressionContext(self, MiniJavaParser.ExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + self.state = 190 + if not self.precpred(self._ctx, 11): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + + self.state = 191 + self.operations() + self.state = 192 + self.expression(12) + pass + + elif la_ == 2: + localctx = MiniJavaParser.Array_expressionContext(self, MiniJavaParser.ExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + self.state = 194 + if not self.precpred(self._ctx, 10): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") + self.state = 195 + self.match(MiniJavaParser.T__0) + self.state = 196 + self.expression(0) + self.state = 197 + self.match(MiniJavaParser.T__1) + pass + + elif la_ == 3: + localctx = MiniJavaParser.Length_expressionContext(self, MiniJavaParser.ExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + self.state = 199 + if not self.precpred(self._ctx, 9): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + self.state = 200 + self.match(MiniJavaParser.Dot) + self.state = 201 + self.match(MiniJavaParser.T__7) + pass + + elif la_ == 4: + localctx = MiniJavaParser.Dot_par_expressionContext(self, MiniJavaParser.ExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) + self.state = 202 + if not self.precpred(self._ctx, 8): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") + self.state = 203 + self.match(MiniJavaParser.Dot) + self.state = 204 + self.identifier() + self.state = 205 + self.match(MiniJavaParser.ParOpen) + self.state = 214 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << MiniJavaParser.T__8) | (1 << MiniJavaParser.ParOpen) | (1 << MiniJavaParser.New) | (1 << MiniJavaParser.Identifier) | (1 << MiniJavaParser.KeyWords) | (1 << MiniJavaParser.IntegerLiteral))) != 0): + self.state = 206 + self.expression(0) + self.state = 211 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==MiniJavaParser.T__4: + self.state = 207 + self.match(MiniJavaParser.T__4) + self.state = 208 + self.expression(0) + self.state = 213 + self._errHandler.sync(self) + _la = self._input.LA(1) + + + + self.state = 216 + self.match(MiniJavaParser.ParClose) + pass + + + self.state = 222 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,15,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class IdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.value_attr = str() + self.type_attr = str() + + def Identifier(self): + return self.getToken(MiniJavaParser.Identifier, 0) + + def getRuleIndex(self): + return MiniJavaParser.RULE_identifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIdentifier" ): + listener.enterIdentifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIdentifier" ): + listener.exitIdentifier(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitIdentifier" ): + return visitor.visitIdentifier(self) + else: + return visitor.visitChildren(self) + + + + + def identifier(self): + + localctx = MiniJavaParser.IdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_identifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 223 + self.match(MiniJavaParser.Identifier) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class OperationsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Operations(self): + return self.getToken(MiniJavaParser.Operations, 0) + + def getRuleIndex(self): + return MiniJavaParser.RULE_operations + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOperations" ): + listener.enterOperations(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOperations" ): + listener.exitOperations(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitOperations" ): + return visitor.visitOperations(self) + else: + return visitor.visitChildren(self) + + + + + def operations(self): + + localctx = MiniJavaParser.OperationsContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_operations) + try: + self.enterOuterAlt(localctx, 1) + self.state = 225 + self.match(MiniJavaParser.Operations) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): + if self._predicates == None: + self._predicates = dict() + self._predicates[9] = self.expression_sempred + pred = self._predicates.get(ruleIndex, None) + if pred is None: + raise Exception("No predicate with index:" + str(ruleIndex)) + else: + return pred(localctx, predIndex) + + def expression_sempred(self, localctx:ExpressionContext, predIndex:int): + if predIndex == 0: + return self.precpred(self._ctx, 11) + + + if predIndex == 1: + return self.precpred(self._ctx, 10) + + + if predIndex == 2: + return self.precpred(self._ctx, 9) + + + if predIndex == 3: + return self.precpred(self._ctx, 8) + + + + + diff --git a/Melika Ahmadi Ranjbar/Gen/MiniJavaVisitor.py b/Melika Ahmadi Ranjbar/Gen/MiniJavaVisitor.py new file mode 100644 index 0000000..ea5d88e --- /dev/null +++ b/Melika Ahmadi Ranjbar/Gen/MiniJavaVisitor.py @@ -0,0 +1,163 @@ +# Generated from D:/University/Sem6/Compiler/Assignment4\MiniJava.g4 by ANTLR 4.9.1 +from antlr4 import * +if __name__ is not None and "." in __name__: + from .MiniJavaParser import MiniJavaParser +else: + from MiniJavaParser import MiniJavaParser + +# This class defines a complete generic visitor for a parse tree produced by MiniJavaParser. + +class MiniJavaVisitor(ParseTreeVisitor): + + # Visit a parse tree produced by MiniJavaParser#program. + def visitProgram(self, ctx:MiniJavaParser.ProgramContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#mainClass. + def visitMainClass(self, ctx:MiniJavaParser.MainClassContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#mainClassEnter. + def visitMainClassEnter(self, ctx:MiniJavaParser.MainClassEnterContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#mainClassBody. + def visitMainClassBody(self, ctx:MiniJavaParser.MainClassBodyContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#classDeclaration. + def visitClassDeclaration(self, ctx:MiniJavaParser.ClassDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#varDeclaration. + def visitVarDeclaration(self, ctx:MiniJavaParser.VarDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#methodDeclaration. + def visitMethodDeclaration(self, ctx:MiniJavaParser.MethodDeclarationContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#array_int. + def visitArray_int(self, ctx:MiniJavaParser.Array_intContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#bool. + def visitBool(self, ctx:MiniJavaParser.BoolContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#int. + def visitInt(self, ctx:MiniJavaParser.IntContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#id. + def visitId(self, ctx:MiniJavaParser.IdContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#braket_statement. + def visitBraket_statement(self, ctx:MiniJavaParser.Braket_statementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#if_statement. + def visitIf_statement(self, ctx:MiniJavaParser.If_statementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#while_statement. + def visitWhile_statement(self, ctx:MiniJavaParser.While_statementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#print. + def visitPrint(self, ctx:MiniJavaParser.PrintContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#equal_statement. + def visitEqual_statement(self, ctx:MiniJavaParser.Equal_statementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#equal_array_statement. + def visitEqual_array_statement(self, ctx:MiniJavaParser.Equal_array_statementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#number. + def visitNumber(self, ctx:MiniJavaParser.NumberContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#new_identifier. + def visitNew_identifier(self, ctx:MiniJavaParser.New_identifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#not_expression. + def visitNot_expression(self, ctx:MiniJavaParser.Not_expressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#keywords. + def visitKeywords(self, ctx:MiniJavaParser.KeywordsContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#dot_par_expression. + def visitDot_par_expression(self, ctx:MiniJavaParser.Dot_par_expressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#in_par_expression. + def visitIn_par_expression(self, ctx:MiniJavaParser.In_par_expressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#operations_expression. + def visitOperations_expression(self, ctx:MiniJavaParser.Operations_expressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#array_expression. + def visitArray_expression(self, ctx:MiniJavaParser.Array_expressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#word. + def visitWord(self, ctx:MiniJavaParser.WordContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#new_array_expression. + def visitNew_array_expression(self, ctx:MiniJavaParser.New_array_expressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#length_expression. + def visitLength_expression(self, ctx:MiniJavaParser.Length_expressionContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#identifier. + def visitIdentifier(self, ctx:MiniJavaParser.IdentifierContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MiniJavaParser#operations. + def visitOperations(self, ctx:MiniJavaParser.OperationsContext): + return self.visitChildren(ctx) + + + +del MiniJavaParser \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/Gen/__pycache__/MiniJavaLexer.cpython-38.pyc b/Melika Ahmadi Ranjbar/Gen/__pycache__/MiniJavaLexer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbcc6137c7daab8020495545bc8ee5e31de00319 GIT binary patch literal 7540 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

%k^Tb5)T^D?$;0oWVWPmpL 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

erYH57#;O|JIOGm{{I{w2S3N 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 Rg6E(FMQOOX<<%8v{vRcDr?>zB literal 0 HcmV?d00001 diff --git a/Melika Ahmadi Ranjbar/MiniJava.g4 b/Melika Ahmadi Ranjbar/MiniJava.g4 new file mode 100644 index 0000000..aa121b7 --- /dev/null +++ b/Melika Ahmadi Ranjbar/MiniJava.g4 @@ -0,0 +1,108 @@ +// Parser section +grammar MiniJava; + +program returns[value_attr = str(), type_attr = str()]: + mainClass (classDeclaration)* EOF; + +mainClass returns[value_attr = str(), type_attr = str()]: + Class mainClassEnter; + +mainClassEnter returns[value_attr = str(), type_attr = str()]: + identifier BraketOpen mainClassBody BraketClose; + +mainClassBody returns[value_attr = str(), type_attr = str()]: + Public Static Void Main ParOpen String '[' ']' identifier ParClose BraketOpen statement BraketClose; + +classDeclaration returns[value_attr = str(), type_attr = str()]: + Class identifier ('extends' identifier) ? BraketOpen (varDeclaration)* (methodDeclaration)* BraketClose; + +varDeclaration returns[value_attr = str(), type_attr = str()]: + kind identifier ';'; + +methodDeclaration returns[value_attr = str(), type_attr = str()]: + Public kind identifier ParOpen ( kind identifier ( ',' kind identifier )* ) ? ParClose BraketOpen (varDeclaration)* (statement)* Return expression ';' BraketClose; + +kind returns[value_attr = str(), type_attr = str()]: + Int '[' ']' #array_int + | Boolean #bool + | Int #int + | identifier #id + ; + +statement returns[value_attr = str(), type_attr = str()]: + BraketOpen (statement)* BraketClose #braket_statement + | If ParOpen expression ParClose statement Else statement #if_statement + | While ParOpen expression ParClose statement #while_statement + | 'System.out.println' ParOpen expression ParClose ';' #print + | identifier '=' expression ';' #equal_statement + | identifier '[' expression ']' '=' expression ';' #equal_array_statement + ; + +expression returns[value_attr = str(), type_attr = str()]: + expression ( operations ) expression #operations_expression + | expression '[' expression ']' #array_expression + | expression Dot 'length' #length_expression + | expression Dot identifier ParOpen ( expression ( ',' expression )* ) ? ParClose #dot_par_expression + | IntegerLiteral #number + | KeyWords #keywords + | identifier #word + | New Int '[' expression ']' #new_array_expression + | New identifier ParOpen ParClose #new_identifier + | '!' expression #not_expression + | ParOpen expression ParClose #in_par_expression + ; + +identifier returns[value_attr = str(), type_attr = str()]: + Identifier; + +operations: + Operations; + +// Lexical section + +Class: 'class'; +Public: 'public'; +Static: 'static'; +Void: 'void'; +Main: 'main'; +String: 'String'; +BraketOpen: '{'; +BraketClose: '}'; +ParOpen: '('; +ParClose: ')'; +Int: 'int'; +New: 'new'; +Return: 'return'; +If: 'if'; +Boolean: 'boolean'; +While: 'while'; +Else: 'else'; +Dot: '.'; + +Identifier: Letter LetterOrDigit*; + +KeyWords: + 'true' + | 'false' + | 'this'; + +Operations: + '&&' | '<' | '+' | '-' | '*'; + +IntegerLiteral: + [0-9] [0-9_]*; + +fragment Letter + : [a-zA-Z$_] + | ~[\u0000-\u007F\uD800-\uDBFF] + | [\uD800-\uDBFF] [\uDC00-\uDFFF] + ; + +fragment LetterOrDigit + : Letter + | [0-9] + ; + +COMMENT: '/*' .*? '*/' -> channel(HIDDEN); +LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN); +WS: [ \t\r\n\u000C]+ -> channel(HIDDEN); \ No newline at end of file diff --git a/Melika Ahmadi Ranjbar/input.txt b/Melika Ahmadi Ranjbar/input.txt new file mode 100644 index 0000000..d989400 --- /dev/null +++ b/Melika Ahmadi Ranjbar/input.txt @@ -0,0 +1,16 @@ +class Factorial{ + public static void main(String[] a){ + System.out.println(new Fac().ComputeFac(10)); + } +} + +class Fac { + public int ComputeFac(int num){ + int num_aux ; + if (num < 1) + num_aux = 1 ; + else + num_aux = num * (this.ComputeFac(num-1)) ; + return num_aux ; + } +} \ No newline at end of file