diff --git a/.idea/misc.xml b/.idea/misc.xml
index 50ba7ce..ccb48ca 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/src/main/java/CompilerInput.txt b/src/main/java/CompilerInput.txt
index 0a31d5c..53924f6 100644
--- a/src/main/java/CompilerInput.txt
+++ b/src/main/java/CompilerInput.txt
@@ -2,6 +2,16 @@ public class Example {
public int test;
+ public Example(int conInput) {
+
+ }
+
+ public static int test(char b){
+
+ test = 3;
+
+ }
+
}
public class Test {
diff --git a/src/main/java/Main.java b/src/main/java/Main.java
index e15eafa..bcb48c5 100644
--- a/src/main/java/Main.java
+++ b/src/main/java/Main.java
@@ -9,9 +9,6 @@ import parser.ASTBuilder;
import parser.generated.SimpleJavaLexer;
import parser.generated.SimpleJavaParser;
import semantic.SemanticAnalyzer;
-import ast.ClassNode;
-import ast.ProgramNode;
-import bytecode.ByteCodeGenerator;
import java.io.IOException;
import java.nio.file.Paths;
diff --git a/src/main/java/ast/BlockNode.java b/src/main/java/ast/BlockNode.java
new file mode 100644
index 0000000..2dd5307
--- /dev/null
+++ b/src/main/java/ast/BlockNode.java
@@ -0,0 +1,4 @@
+package ast;
+
+public class BlockNode {
+}
diff --git a/src/main/java/ast/ClassNode.java b/src/main/java/ast/ClassNode.java
index dd390ee..2f27d08 100644
--- a/src/main/java/ast/ClassNode.java
+++ b/src/main/java/ast/ClassNode.java
@@ -1,10 +1,15 @@
package ast;
+import ast.member.ConstructorNode;
+import ast.member.MemberNode;
+import ast.type.AccessTypeNode;
+import ast.type.EnumAccessTypeNode;
+
import java.util.ArrayList;
import java.util.List;
public class ClassNode extends ASTNode{
- public Identifier identifier;
+ public IdentifierNode identifier;
public AccessTypeNode accessType;
public String name;
public List members = new ArrayList<>();
diff --git a/src/main/java/ast/ExpressionNode.java b/src/main/java/ast/ExpressionNode.java
deleted file mode 100644
index 891d87c..0000000
--- a/src/main/java/ast/ExpressionNode.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ast;
-
-public class ExpressionNode {
-}
diff --git a/src/main/java/ast/Identifier.java b/src/main/java/ast/IdentifierNode.java
similarity index 67%
rename from src/main/java/ast/Identifier.java
rename to src/main/java/ast/IdentifierNode.java
index 2f6fe73..3300633 100644
--- a/src/main/java/ast/Identifier.java
+++ b/src/main/java/ast/IdentifierNode.java
@@ -1,10 +1,10 @@
package ast;
-public class Identifier {
+public class IdentifierNode {
private String name;
- public Identifier(String name){
+ public IdentifierNode(String name){
this.name = name;
}
@@ -13,8 +13,8 @@ public class Identifier {
}
public boolean equals(Object obj) {
- if(obj instanceof Identifier){
- Identifier identifier = (Identifier) obj;
+ if(obj instanceof IdentifierNode){
+ IdentifierNode identifier = (IdentifierNode) obj;
if(name.equals(identifier.getName())){
return true;
} else {
diff --git a/src/main/java/ast/MemberNode.java b/src/main/java/ast/MemberNode.java
deleted file mode 100644
index c1086cd..0000000
--- a/src/main/java/ast/MemberNode.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ast;
-
-public class MemberNode extends ASTNode{
-}
diff --git a/src/main/java/ast/expression/BinaryExpressionNode.java b/src/main/java/ast/expression/BinaryExpressionNode.java
new file mode 100644
index 0000000..e63bbca
--- /dev/null
+++ b/src/main/java/ast/expression/BinaryExpressionNode.java
@@ -0,0 +1,13 @@
+package ast.expression;
+
+public class BinaryExpressionNode extends ExpressionNode {
+ public ExpressionNode left;
+ public ExpressionNode right;
+ public String operator; // Stores the operator as a string (e.g., "+", "-", "&&")
+
+ public BinaryExpressionNode(ExpressionNode left, ExpressionNode right, String operator) {
+ this.left = left;
+ this.right = right;
+ this.operator = operator;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/ast/expression/ExpressionNode.java b/src/main/java/ast/expression/ExpressionNode.java
new file mode 100644
index 0000000..eff9d29
--- /dev/null
+++ b/src/main/java/ast/expression/ExpressionNode.java
@@ -0,0 +1,7 @@
+package ast.expression;
+
+import ast.ASTNode;
+
+public class ExpressionNode extends ASTNode {
+
+}
diff --git a/src/main/java/ast/expression/IdentifierExpressionNode.java b/src/main/java/ast/expression/IdentifierExpressionNode.java
new file mode 100644
index 0000000..7631429
--- /dev/null
+++ b/src/main/java/ast/expression/IdentifierExpressionNode.java
@@ -0,0 +1,9 @@
+package ast.expression;
+
+public class IdentifierExpressionNode extends ExpressionNode {
+ public String name;
+
+ public IdentifierExpressionNode(String name) {
+ this.name = name;
+ }
+}
diff --git a/src/main/java/ast/expression/UnaryExpressionNode.java b/src/main/java/ast/expression/UnaryExpressionNode.java
new file mode 100644
index 0000000..0c77ef5
--- /dev/null
+++ b/src/main/java/ast/expression/UnaryExpressionNode.java
@@ -0,0 +1,11 @@
+package ast.expression;
+
+public class UnaryExpressionNode extends ExpressionNode {
+ public ExpressionNode expression;
+ public String operator; // Stores the operator (e.g., "-", "!")
+
+ public UnaryExpressionNode(ExpressionNode expression, String operator) {
+ this.expression = expression;
+ this.operator = operator;
+ }
+}
diff --git a/src/main/java/ast/ConstructorNode.java b/src/main/java/ast/member/ConstructorNode.java
similarity index 51%
rename from src/main/java/ast/ConstructorNode.java
rename to src/main/java/ast/member/ConstructorNode.java
index a824f5a..b411ff1 100644
--- a/src/main/java/ast/ConstructorNode.java
+++ b/src/main/java/ast/member/ConstructorNode.java
@@ -1,6 +1,8 @@
-package ast;
+package ast.member;
-public class ConstructorNode extends MethodNode{
+import ast.type.AccessTypeNode;
+
+public class ConstructorNode extends MethodNode {
public ConstructorNode(AccessTypeNode visibility, String name) {
super(visibility, name);
}
diff --git a/src/main/java/ast/FieldNode.java b/src/main/java/ast/member/FieldNode.java
similarity index 58%
rename from src/main/java/ast/FieldNode.java
rename to src/main/java/ast/member/FieldNode.java
index 3d0d287..53a5335 100644
--- a/src/main/java/ast/FieldNode.java
+++ b/src/main/java/ast/member/FieldNode.java
@@ -1,14 +1,18 @@
-package ast;
+package ast.member;
+
+import ast.IdentifierNode;
+import ast.type.AccessTypeNode;
+import ast.type.TypeNode;
public class FieldNode extends MemberNode {
public AccessTypeNode accessTypeNode;
public TypeNode type;
- public Identifier identifier;
+ public IdentifierNode identifier;
public FieldNode(AccessTypeNode accessTypeNode, TypeNode type, String name){
this.accessTypeNode = accessTypeNode;
this.type = type;
- this.identifier = new Identifier(name);
+ this.identifier = new IdentifierNode(name);
}
}
diff --git a/src/main/java/ast/member/MemberNode.java b/src/main/java/ast/member/MemberNode.java
new file mode 100644
index 0000000..aa823af
--- /dev/null
+++ b/src/main/java/ast/member/MemberNode.java
@@ -0,0 +1,6 @@
+package ast.member;
+
+import ast.ASTNode;
+
+public class MemberNode extends ASTNode {
+}
diff --git a/src/main/java/ast/MethodNode.java b/src/main/java/ast/member/MethodNode.java
similarity index 65%
rename from src/main/java/ast/MethodNode.java
rename to src/main/java/ast/member/MethodNode.java
index d9058c5..4c937cc 100644
--- a/src/main/java/ast/MethodNode.java
+++ b/src/main/java/ast/member/MethodNode.java
@@ -1,10 +1,16 @@
-package ast;
+package ast.member;
+
+import ast.IdentifierNode;
+import ast.parameter.ParameterListNode;
+import ast.statement.StatementNode;
+import ast.type.AccessTypeNode;
+import ast.type.TypeNode;
import java.util.ArrayList;
import java.util.List;
-public class MethodNode extends MemberNode{
- public Identifier identifier;
+public class MethodNode extends MemberNode {
+ public IdentifierNode identifier;
public AccessTypeNode visibility;
public TypeNode type;
public String name;
@@ -16,7 +22,7 @@ public class MethodNode extends MemberNode{
public MethodNode(AccessTypeNode visibility, TypeNode type, String name, ParameterListNode parameters,
List statements){
this.visibility = visibility;
- this.identifier = new Identifier(name);
+ this.identifier = new IdentifierNode(name);
this.type = type;
this.name = name;
this.parameters = parameters;
@@ -25,6 +31,6 @@ public class MethodNode extends MemberNode{
public MethodNode(AccessTypeNode visibility, String name){
this.visibility = visibility;
- this.identifier = new Identifier(name);
+ this.identifier = new IdentifierNode(name);
}
}
diff --git a/src/main/java/ast/ParameterListNode.java b/src/main/java/ast/parameter/ParameterListNode.java
similarity index 85%
rename from src/main/java/ast/ParameterListNode.java
rename to src/main/java/ast/parameter/ParameterListNode.java
index c86014b..34c615a 100644
--- a/src/main/java/ast/ParameterListNode.java
+++ b/src/main/java/ast/parameter/ParameterListNode.java
@@ -1,4 +1,6 @@
-package ast;
+package ast.parameter;
+
+import ast.ASTNode;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/ast/ParameterNode.java b/src/main/java/ast/parameter/ParameterNode.java
similarity index 76%
rename from src/main/java/ast/ParameterNode.java
rename to src/main/java/ast/parameter/ParameterNode.java
index fc2d84a..739ae21 100644
--- a/src/main/java/ast/ParameterNode.java
+++ b/src/main/java/ast/parameter/ParameterNode.java
@@ -1,4 +1,7 @@
-package ast;
+package ast.parameter;
+
+import ast.ASTNode;
+import ast.type.TypeNode;
public class ParameterNode extends ASTNode {
public TypeNode type;
diff --git a/src/main/java/ast/statement/AssignmentStatementNode.java b/src/main/java/ast/statement/AssignmentStatementNode.java
new file mode 100644
index 0000000..97bcd45
--- /dev/null
+++ b/src/main/java/ast/statement/AssignmentStatementNode.java
@@ -0,0 +1,13 @@
+package ast.statement;
+
+import ast.expression.ExpressionNode;
+
+public class AssignmentStatementNode extends StatementNode {
+ public String identifier;
+ public ExpressionNode expression;
+
+ public AssignmentStatementNode(String identifier, ExpressionNode expression) {
+ this.identifier = identifier;
+ this.expression = expression;
+ }
+}
diff --git a/src/main/java/ast/statement/IfStatementNode.java b/src/main/java/ast/statement/IfStatementNode.java
new file mode 100644
index 0000000..93eec91
--- /dev/null
+++ b/src/main/java/ast/statement/IfStatementNode.java
@@ -0,0 +1,15 @@
+package ast.statement;
+
+import ast.expression.ExpressionNode;
+
+public class IfStatementNode extends StatementNode {
+ public ExpressionNode condition;
+ public StatementNode thenStatement;
+ public StatementNode elseStatement;
+
+ public IfStatementNode(ExpressionNode condition, StatementNode thenStatement, StatementNode elseStatement) {
+ this.condition = condition;
+ this.thenStatement = thenStatement;
+ this.elseStatement = elseStatement;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/ast/statement/ReturnStatementNode.java b/src/main/java/ast/statement/ReturnStatementNode.java
new file mode 100644
index 0000000..4ca4dfa
--- /dev/null
+++ b/src/main/java/ast/statement/ReturnStatementNode.java
@@ -0,0 +1,11 @@
+package ast.statement;
+
+import ast.expression.ExpressionNode;
+
+public class ReturnStatementNode extends StatementNode {
+ public ExpressionNode expression;
+
+ public ReturnStatementNode(ExpressionNode expression) {
+ this.expression = expression;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/ast/StatementNode.java b/src/main/java/ast/statement/StatementNode.java
similarity index 77%
rename from src/main/java/ast/StatementNode.java
rename to src/main/java/ast/statement/StatementNode.java
index 059a96a..910a134 100644
--- a/src/main/java/ast/StatementNode.java
+++ b/src/main/java/ast/statement/StatementNode.java
@@ -1,4 +1,4 @@
-package ast;
+package ast.statement;
import ast.ASTNode;
diff --git a/src/main/java/ast/VariableDeclarationStatementNode.java b/src/main/java/ast/statement/VariableDeclarationStatementNode.java
similarity index 73%
rename from src/main/java/ast/VariableDeclarationStatementNode.java
rename to src/main/java/ast/statement/VariableDeclarationStatementNode.java
index 6222942..e7f6e32 100644
--- a/src/main/java/ast/VariableDeclarationStatementNode.java
+++ b/src/main/java/ast/statement/VariableDeclarationStatementNode.java
@@ -1,10 +1,12 @@
-package ast;
+package ast.statement;
+
+import ast.type.TypeNode;
+import ast.expression.ExpressionNode;
public class VariableDeclarationStatementNode extends StatementNode {
public TypeNode type;
public String identifier;
- public ExpressionNode expression; // Nullable for cases without initialization
-
+ public ExpressionNode expression;
public VariableDeclarationStatementNode(TypeNode type, String identifier, ExpressionNode expression) {
this.type = type;
this.identifier = identifier;
diff --git a/src/main/java/ast/statement/WhileStatementNode.java b/src/main/java/ast/statement/WhileStatementNode.java
new file mode 100644
index 0000000..e6a10b1
--- /dev/null
+++ b/src/main/java/ast/statement/WhileStatementNode.java
@@ -0,0 +1,13 @@
+package ast.statement;
+
+import ast.expression.ExpressionNode;
+
+public class WhileStatementNode extends StatementNode {
+ public ExpressionNode condition;
+ public StatementNode body;
+
+ public WhileStatementNode(ExpressionNode condition, StatementNode body) {
+ this.condition = condition;
+ this.body = body;
+ }
+}
diff --git a/src/main/java/ast/AccessTypeNode.java b/src/main/java/ast/type/AccessTypeNode.java
similarity index 85%
rename from src/main/java/ast/AccessTypeNode.java
rename to src/main/java/ast/type/AccessTypeNode.java
index 2ed2e55..ddacf68 100644
--- a/src/main/java/ast/AccessTypeNode.java
+++ b/src/main/java/ast/type/AccessTypeNode.java
@@ -1,4 +1,6 @@
-package ast;
+package ast.type;
+
+import ast.ASTNode;
public class AccessTypeNode extends ASTNode {
public EnumAccessTypeNode enumAccessTypeNode;
diff --git a/src/main/java/ast/EnumAccessTypeNode.java b/src/main/java/ast/type/EnumAccessTypeNode.java
similarity index 75%
rename from src/main/java/ast/EnumAccessTypeNode.java
rename to src/main/java/ast/type/EnumAccessTypeNode.java
index 2e6ffba..12cdda9 100644
--- a/src/main/java/ast/EnumAccessTypeNode.java
+++ b/src/main/java/ast/type/EnumAccessTypeNode.java
@@ -1,4 +1,4 @@
-package ast;
+package ast.type;
public enum EnumAccessTypeNode {
PUBLIC, PRIVATE
diff --git a/src/main/java/ast/EnumTypeNode.java b/src/main/java/ast/type/EnumTypeNode.java
similarity index 74%
rename from src/main/java/ast/EnumTypeNode.java
rename to src/main/java/ast/type/EnumTypeNode.java
index b80cd57..d858461 100644
--- a/src/main/java/ast/EnumTypeNode.java
+++ b/src/main/java/ast/type/EnumTypeNode.java
@@ -1,4 +1,4 @@
-package ast;
+package ast.type;
public enum EnumTypeNode {
INT, BOOLEAN, CHAR
diff --git a/src/main/java/ast/TypeNode.java b/src/main/java/ast/type/TypeNode.java
similarity index 81%
rename from src/main/java/ast/TypeNode.java
rename to src/main/java/ast/type/TypeNode.java
index fd921b6..5b1c2a6 100644
--- a/src/main/java/ast/TypeNode.java
+++ b/src/main/java/ast/type/TypeNode.java
@@ -1,4 +1,6 @@
-package ast;
+package ast.type;
+
+import ast.ASTNode;
public class TypeNode extends ASTNode {
public EnumTypeNode enumTypeNode;
diff --git a/src/main/java/bytecode/ClassCodeGen.java b/src/main/java/bytecode/ClassCodeGen.java
index 203f3f3..1e931c0 100644
--- a/src/main/java/bytecode/ClassCodeGen.java
+++ b/src/main/java/bytecode/ClassCodeGen.java
@@ -1,9 +1,9 @@
package bytecode;
import ast.ClassNode;
-import ast.FieldNode;
-import ast.MemberNode;
-import ast.MethodNode;
+import ast.member.FieldNode;
+import ast.member.MemberNode;
+import ast.member.MethodNode;
import java.io.File;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Opcodes;
diff --git a/src/main/java/bytecode/FieldCodeGen.java b/src/main/java/bytecode/FieldCodeGen.java
index 5e08941..76e2921 100644
--- a/src/main/java/bytecode/FieldCodeGen.java
+++ b/src/main/java/bytecode/FieldCodeGen.java
@@ -1,9 +1,8 @@
package bytecode;
-import ast.FieldNode;
+import ast.member.FieldNode;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Opcodes;
public class FieldCodeGen {
diff --git a/src/main/java/bytecode/Mapper.java b/src/main/java/bytecode/Mapper.java
index 872f8e1..168e1e2 100644
--- a/src/main/java/bytecode/Mapper.java
+++ b/src/main/java/bytecode/Mapper.java
@@ -1,7 +1,7 @@
package bytecode;
-import ast.AccessTypeNode;
-import ast.EnumAccessTypeNode;
+import ast.type.AccessTypeNode;
+import ast.type.EnumAccessTypeNode;
import org.objectweb.asm.Opcodes;
public class Mapper {
diff --git a/src/main/java/bytecode/MethodCodeGen.java b/src/main/java/bytecode/MethodCodeGen.java
index 6f217ac..066905f 100644
--- a/src/main/java/bytecode/MethodCodeGen.java
+++ b/src/main/java/bytecode/MethodCodeGen.java
@@ -1,9 +1,8 @@
package bytecode;
-import ast.MethodNode;
+import ast.member.MethodNode;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
public class MethodCodeGen {
public void generateMethodCode(ClassWriter classWriter, MethodNode methodNode) {
diff --git a/src/main/java/classFileOutput/Example.class b/src/main/java/classFileOutput/Example.class
index 7490cc1..c4a896a 100644
Binary files a/src/main/java/classFileOutput/Example.class and b/src/main/java/classFileOutput/Example.class differ
diff --git a/src/main/java/parser/ASTBuilder.java b/src/main/java/parser/ASTBuilder.java
index f57181d..b6beba4 100644
--- a/src/main/java/parser/ASTBuilder.java
+++ b/src/main/java/parser/ASTBuilder.java
@@ -1,6 +1,21 @@
package parser;
import ast.*;
+import ast.expression.BinaryExpressionNode;
+import ast.expression.ExpressionNode;
+import ast.expression.IdentifierExpressionNode;
+import ast.expression.UnaryExpressionNode;
+import ast.member.FieldNode;
+import ast.member.MemberNode;
+import ast.member.MethodNode;
+import ast.parameter.ParameterListNode;
+import ast.parameter.ParameterNode;
+import ast.statement.*;
+import ast.type.AccessTypeNode;
+import ast.type.EnumAccessTypeNode;
+import ast.type.EnumTypeNode;
+import ast.type.TypeNode;
+import org.antlr.v4.runtime.tree.TerminalNode;
import parser.generated.SimpleJavaBaseVisitor;
import parser.generated.SimpleJavaParser;
@@ -20,7 +35,7 @@ public class ASTBuilder extends SimpleJavaBaseVisitor {
@Override
public ASTNode visitClassDeclaration(SimpleJavaParser.ClassDeclarationContext ctx) {
ClassNode classNode = new ClassNode((AccessTypeNode) visit(ctx.accessType()),ctx.IDENTIFIER().getText());
- classNode.identifier = new Identifier(ctx.IDENTIFIER().getText());
+ classNode.identifier = new IdentifierNode(ctx.IDENTIFIER().getText());
for (SimpleJavaParser.MemberDeclarationContext member : ctx.memberDeclaration()) {
classNode.addMember((MemberNode) visit(member));
}
@@ -107,4 +122,78 @@ public class ASTBuilder extends SimpleJavaBaseVisitor {
return null;
}
+ @Override
+ public ASTNode visitVariableDeclarationStatement(SimpleJavaParser.VariableDeclarationStatementContext ctx) {
+ TypeNode type = (TypeNode) visit(ctx.type());
+ String identifier = ctx.IDENTIFIER().getText();
+ ExpressionNode expression = null;
+ if (ctx.expression() != null) {
+ expression = (ExpressionNode) visit(ctx.expression());
+ }
+ return new VariableDeclarationStatementNode(type, identifier, expression);
+ }
+
+ @Override
+ public ASTNode visitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx) {
+ String identifier = ctx.IDENTIFIER().getText();
+ ExpressionNode expression = (ExpressionNode) visit(ctx.expression());
+ return new AssignmentStatementNode(identifier, expression);
+ }
+
+ @Override
+ public ASTNode visitIfStatement(SimpleJavaParser.IfStatementContext ctx) {
+ ExpressionNode condition = (ExpressionNode) visit(ctx.expression());
+ StatementNode thenStatement = (StatementNode) visit(ctx.statement(0)); // The 'then' branch
+ StatementNode elseStatement = null;
+ if (ctx.statement().size() > 1) {
+ elseStatement = (StatementNode) visit(ctx.statement(1)); // The 'else' branch, if present
+ }
+ return new IfStatementNode(condition, thenStatement, elseStatement);
+ }
+
+ @Override
+ public ASTNode visitWhileStatement(SimpleJavaParser.WhileStatementContext ctx) {
+ ExpressionNode condition = (ExpressionNode) visit(ctx.expression()); // Visit the condition part of the while statement
+ StatementNode body = (StatementNode) visit(ctx.statement()); // Visit the body part of the while statement
+ return new WhileStatementNode(condition, body);
+ }
+
+ @Override
+ public ASTNode visitReturnStatement(SimpleJavaParser.ReturnStatementContext ctx) {
+ ExpressionNode expression = null;
+ if (ctx.expression() != null) {
+ expression = (ExpressionNode) visit(ctx.expression()); // Visit the expression part of the return statement, if it exists
+ }
+ return new ReturnStatementNode(expression);
+ }
+
+ @Override
+ public ASTNode visitExpression(SimpleJavaParser.ExpressionContext ctx) {
+ // Handle binary operations
+ if (ctx.getChildCount() == 3 && ctx.getChild(1) instanceof TerminalNode) {
+ ExpressionNode left = (ExpressionNode) visit(ctx.expression(0));
+ ExpressionNode right = (ExpressionNode) visit(ctx.expression(1));
+ String operator = ctx.getChild(1).getText();
+ return new BinaryExpressionNode(left, right, operator);
+ }
+ // Handle unary operations
+ else if (ctx.getChildCount() == 2) {
+ String operator = ctx.getChild(0).getText();
+ ExpressionNode expression = (ExpressionNode) visit(ctx.expression(0));
+ return new UnaryExpressionNode(expression, operator);
+ }
+ // Handle parentheses
+ else if (ctx.getChildCount() == 3 && ctx.getChild(0).getText().equals("(")) {
+ return visit(ctx.expression(0)); // Simply return the inner expression
+ }
+ // Handle literals and identifiers
+ else if (ctx.literal() != null) {
+ return visit(ctx.literal());
+ }
+ else if (ctx.IDENTIFIER() != null) {
+ return new IdentifierExpressionNode(ctx.IDENTIFIER().getText());
+ }
+
+ return null; // Return null or throw an exception if no valid expression found
+ }
}
diff --git a/src/main/java/parser/SimpleJava.g4 b/src/main/java/parser/SimpleJava.g4
index 1990892..3de3979 100644
--- a/src/main/java/parser/SimpleJava.g4
+++ b/src/main/java/parser/SimpleJava.g4
@@ -4,12 +4,14 @@ program : classDeclaration+;
classDeclaration : accessType 'class' IDENTIFIER '{' memberDeclaration* '}';
-memberDeclaration : fieldDeclaration | methodDeclaration;
+memberDeclaration : fieldDeclaration | methodDeclaration | constructorDeclaration;
fieldDeclaration : accessType type IDENTIFIER ';';
methodDeclaration : accessType 'static' type IDENTIFIER '(' parameterList? ')' '{' statement* '}' ;
+constructorDeclaration : accessType IDENTIFIER '(' parameterList? ')' '{' statement* '}' ;
+
parameterList : parameter (',' parameter)* ;
parameter : type IDENTIFIER ;
diff --git a/src/main/java/parser/generated/SimpleJava.interp b/src/main/java/parser/generated/SimpleJava.interp
index bfbefcd..00547cb 100644
--- a/src/main/java/parser/generated/SimpleJava.interp
+++ b/src/main/java/parser/generated/SimpleJava.interp
@@ -86,6 +86,7 @@ classDeclaration
memberDeclaration
fieldDeclaration
methodDeclaration
+constructorDeclaration
parameterList
parameter
type
@@ -104,4 +105,4 @@ charLiteral
atn:
-[4, 1, 38, 189, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 1, 0, 4, 0, 42, 8, 0, 11, 0, 12, 0, 43, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 51, 8, 1, 10, 1, 12, 1, 54, 9, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 2, 60, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 73, 8, 4, 1, 4, 1, 4, 1, 4, 5, 4, 78, 8, 4, 10, 4, 12, 4, 81, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 5, 5, 88, 8, 5, 10, 5, 12, 5, 91, 9, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 106, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 112, 8, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 128, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 3, 14, 138, 8, 14, 1, 14, 1, 14, 1, 15, 1, 15, 5, 15, 144, 8, 15, 10, 15, 12, 15, 147, 9, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 162, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 173, 8, 16, 10, 16, 12, 16, 176, 9, 16, 1, 17, 1, 17, 1, 17, 3, 17, 181, 8, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 0, 1, 32, 20, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 0, 6, 1, 0, 9, 11, 1, 0, 12, 13, 1, 0, 19, 20, 1, 0, 21, 26, 1, 0, 27, 31, 1, 0, 33, 34, 192, 0, 41, 1, 0, 0, 0, 2, 45, 1, 0, 0, 0, 4, 59, 1, 0, 0, 0, 6, 61, 1, 0, 0, 0, 8, 66, 1, 0, 0, 0, 10, 84, 1, 0, 0, 0, 12, 92, 1, 0, 0, 0, 14, 95, 1, 0, 0, 0, 16, 97, 1, 0, 0, 0, 18, 105, 1, 0, 0, 0, 20, 107, 1, 0, 0, 0, 22, 115, 1, 0, 0, 0, 24, 120, 1, 0, 0, 0, 26, 129, 1, 0, 0, 0, 28, 135, 1, 0, 0, 0, 30, 141, 1, 0, 0, 0, 32, 161, 1, 0, 0, 0, 34, 180, 1, 0, 0, 0, 36, 182, 1, 0, 0, 0, 38, 184, 1, 0, 0, 0, 40, 42, 3, 2, 1, 0, 41, 40, 1, 0, 0, 0, 42, 43, 1, 0, 0, 0, 43, 41, 1, 0, 0, 0, 43, 44, 1, 0, 0, 0, 44, 1, 1, 0, 0, 0, 45, 46, 3, 16, 8, 0, 46, 47, 5, 1, 0, 0, 47, 48, 5, 37, 0, 0, 48, 52, 5, 2, 0, 0, 49, 51, 3, 4, 2, 0, 50, 49, 1, 0, 0, 0, 51, 54, 1, 0, 0, 0, 52, 50, 1, 0, 0, 0, 52, 53, 1, 0, 0, 0, 53, 55, 1, 0, 0, 0, 54, 52, 1, 0, 0, 0, 55, 56, 5, 3, 0, 0, 56, 3, 1, 0, 0, 0, 57, 60, 3, 6, 3, 0, 58, 60, 3, 8, 4, 0, 59, 57, 1, 0, 0, 0, 59, 58, 1, 0, 0, 0, 60, 5, 1, 0, 0, 0, 61, 62, 3, 16, 8, 0, 62, 63, 3, 14, 7, 0, 63, 64, 5, 37, 0, 0, 64, 65, 5, 4, 0, 0, 65, 7, 1, 0, 0, 0, 66, 67, 3, 16, 8, 0, 67, 68, 5, 5, 0, 0, 68, 69, 3, 14, 7, 0, 69, 70, 5, 37, 0, 0, 70, 72, 5, 6, 0, 0, 71, 73, 3, 10, 5, 0, 72, 71, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 75, 5, 7, 0, 0, 75, 79, 5, 2, 0, 0, 76, 78, 3, 18, 9, 0, 77, 76, 1, 0, 0, 0, 78, 81, 1, 0, 0, 0, 79, 77, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 82, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 82, 83, 5, 3, 0, 0, 83, 9, 1, 0, 0, 0, 84, 89, 3, 12, 6, 0, 85, 86, 5, 8, 0, 0, 86, 88, 3, 12, 6, 0, 87, 85, 1, 0, 0, 0, 88, 91, 1, 0, 0, 0, 89, 87, 1, 0, 0, 0, 89, 90, 1, 0, 0, 0, 90, 11, 1, 0, 0, 0, 91, 89, 1, 0, 0, 0, 92, 93, 3, 14, 7, 0, 93, 94, 5, 37, 0, 0, 94, 13, 1, 0, 0, 0, 95, 96, 7, 0, 0, 0, 96, 15, 1, 0, 0, 0, 97, 98, 7, 1, 0, 0, 98, 17, 1, 0, 0, 0, 99, 106, 3, 20, 10, 0, 100, 106, 3, 22, 11, 0, 101, 106, 3, 24, 12, 0, 102, 106, 3, 26, 13, 0, 103, 106, 3, 28, 14, 0, 104, 106, 3, 30, 15, 0, 105, 99, 1, 0, 0, 0, 105, 100, 1, 0, 0, 0, 105, 101, 1, 0, 0, 0, 105, 102, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 105, 104, 1, 0, 0, 0, 106, 19, 1, 0, 0, 0, 107, 108, 3, 14, 7, 0, 108, 111, 5, 37, 0, 0, 109, 110, 5, 14, 0, 0, 110, 112, 3, 32, 16, 0, 111, 109, 1, 0, 0, 0, 111, 112, 1, 0, 0, 0, 112, 113, 1, 0, 0, 0, 113, 114, 5, 4, 0, 0, 114, 21, 1, 0, 0, 0, 115, 116, 5, 37, 0, 0, 116, 117, 5, 14, 0, 0, 117, 118, 3, 32, 16, 0, 118, 119, 5, 4, 0, 0, 119, 23, 1, 0, 0, 0, 120, 121, 5, 15, 0, 0, 121, 122, 5, 6, 0, 0, 122, 123, 3, 32, 16, 0, 123, 124, 5, 7, 0, 0, 124, 127, 3, 18, 9, 0, 125, 126, 5, 16, 0, 0, 126, 128, 3, 18, 9, 0, 127, 125, 1, 0, 0, 0, 127, 128, 1, 0, 0, 0, 128, 25, 1, 0, 0, 0, 129, 130, 5, 17, 0, 0, 130, 131, 5, 6, 0, 0, 131, 132, 3, 32, 16, 0, 132, 133, 5, 7, 0, 0, 133, 134, 3, 18, 9, 0, 134, 27, 1, 0, 0, 0, 135, 137, 5, 18, 0, 0, 136, 138, 3, 32, 16, 0, 137, 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 140, 5, 4, 0, 0, 140, 29, 1, 0, 0, 0, 141, 145, 5, 2, 0, 0, 142, 144, 3, 18, 9, 0, 143, 142, 1, 0, 0, 0, 144, 147, 1, 0, 0, 0, 145, 143, 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 145, 1, 0, 0, 0, 148, 149, 5, 3, 0, 0, 149, 31, 1, 0, 0, 0, 150, 151, 6, 16, -1, 0, 151, 152, 5, 28, 0, 0, 152, 162, 3, 32, 16, 5, 153, 154, 5, 32, 0, 0, 154, 162, 3, 32, 16, 4, 155, 156, 5, 6, 0, 0, 156, 157, 3, 32, 16, 0, 157, 158, 5, 7, 0, 0, 158, 162, 1, 0, 0, 0, 159, 162, 3, 34, 17, 0, 160, 162, 5, 37, 0, 0, 161, 150, 1, 0, 0, 0, 161, 153, 1, 0, 0, 0, 161, 155, 1, 0, 0, 0, 161, 159, 1, 0, 0, 0, 161, 160, 1, 0, 0, 0, 162, 174, 1, 0, 0, 0, 163, 164, 10, 8, 0, 0, 164, 165, 7, 2, 0, 0, 165, 173, 3, 32, 16, 9, 166, 167, 10, 7, 0, 0, 167, 168, 7, 3, 0, 0, 168, 173, 3, 32, 16, 8, 169, 170, 10, 6, 0, 0, 170, 171, 7, 4, 0, 0, 171, 173, 3, 32, 16, 7, 172, 163, 1, 0, 0, 0, 172, 166, 1, 0, 0, 0, 172, 169, 1, 0, 0, 0, 173, 176, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 174, 175, 1, 0, 0, 0, 175, 33, 1, 0, 0, 0, 176, 174, 1, 0, 0, 0, 177, 181, 5, 36, 0, 0, 178, 181, 3, 36, 18, 0, 179, 181, 3, 38, 19, 0, 180, 177, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 179, 1, 0, 0, 0, 181, 35, 1, 0, 0, 0, 182, 183, 7, 5, 0, 0, 183, 37, 1, 0, 0, 0, 184, 185, 5, 35, 0, 0, 185, 186, 9, 0, 0, 0, 186, 187, 5, 35, 0, 0, 187, 39, 1, 0, 0, 0, 15, 43, 52, 59, 72, 79, 89, 105, 111, 127, 137, 145, 161, 172, 174, 180]
\ No newline at end of file
+[4, 1, 38, 208, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 1, 0, 4, 0, 44, 8, 0, 11, 0, 12, 0, 45, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 53, 8, 1, 10, 1, 12, 1, 56, 9, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 3, 2, 63, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 76, 8, 4, 1, 4, 1, 4, 1, 4, 5, 4, 81, 8, 4, 10, 4, 12, 4, 84, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 92, 8, 5, 1, 5, 1, 5, 1, 5, 5, 5, 97, 8, 5, 10, 5, 12, 5, 100, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 5, 6, 107, 8, 6, 10, 6, 12, 6, 110, 9, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 125, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 131, 8, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 147, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 3, 15, 157, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 5, 16, 163, 8, 16, 10, 16, 12, 16, 166, 9, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 181, 8, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 192, 8, 17, 10, 17, 12, 17, 195, 9, 17, 1, 18, 1, 18, 1, 18, 3, 18, 200, 8, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 0, 1, 34, 21, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 0, 6, 1, 0, 9, 11, 1, 0, 12, 13, 1, 0, 19, 20, 1, 0, 21, 26, 1, 0, 27, 31, 1, 0, 33, 34, 213, 0, 43, 1, 0, 0, 0, 2, 47, 1, 0, 0, 0, 4, 62, 1, 0, 0, 0, 6, 64, 1, 0, 0, 0, 8, 69, 1, 0, 0, 0, 10, 87, 1, 0, 0, 0, 12, 103, 1, 0, 0, 0, 14, 111, 1, 0, 0, 0, 16, 114, 1, 0, 0, 0, 18, 116, 1, 0, 0, 0, 20, 124, 1, 0, 0, 0, 22, 126, 1, 0, 0, 0, 24, 134, 1, 0, 0, 0, 26, 139, 1, 0, 0, 0, 28, 148, 1, 0, 0, 0, 30, 154, 1, 0, 0, 0, 32, 160, 1, 0, 0, 0, 34, 180, 1, 0, 0, 0, 36, 199, 1, 0, 0, 0, 38, 201, 1, 0, 0, 0, 40, 203, 1, 0, 0, 0, 42, 44, 3, 2, 1, 0, 43, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 43, 1, 0, 0, 0, 45, 46, 1, 0, 0, 0, 46, 1, 1, 0, 0, 0, 47, 48, 3, 18, 9, 0, 48, 49, 5, 1, 0, 0, 49, 50, 5, 37, 0, 0, 50, 54, 5, 2, 0, 0, 51, 53, 3, 4, 2, 0, 52, 51, 1, 0, 0, 0, 53, 56, 1, 0, 0, 0, 54, 52, 1, 0, 0, 0, 54, 55, 1, 0, 0, 0, 55, 57, 1, 0, 0, 0, 56, 54, 1, 0, 0, 0, 57, 58, 5, 3, 0, 0, 58, 3, 1, 0, 0, 0, 59, 63, 3, 6, 3, 0, 60, 63, 3, 8, 4, 0, 61, 63, 3, 10, 5, 0, 62, 59, 1, 0, 0, 0, 62, 60, 1, 0, 0, 0, 62, 61, 1, 0, 0, 0, 63, 5, 1, 0, 0, 0, 64, 65, 3, 18, 9, 0, 65, 66, 3, 16, 8, 0, 66, 67, 5, 37, 0, 0, 67, 68, 5, 4, 0, 0, 68, 7, 1, 0, 0, 0, 69, 70, 3, 18, 9, 0, 70, 71, 5, 5, 0, 0, 71, 72, 3, 16, 8, 0, 72, 73, 5, 37, 0, 0, 73, 75, 5, 6, 0, 0, 74, 76, 3, 12, 6, 0, 75, 74, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 78, 5, 7, 0, 0, 78, 82, 5, 2, 0, 0, 79, 81, 3, 20, 10, 0, 80, 79, 1, 0, 0, 0, 81, 84, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 82, 83, 1, 0, 0, 0, 83, 85, 1, 0, 0, 0, 84, 82, 1, 0, 0, 0, 85, 86, 5, 3, 0, 0, 86, 9, 1, 0, 0, 0, 87, 88, 3, 18, 9, 0, 88, 89, 5, 37, 0, 0, 89, 91, 5, 6, 0, 0, 90, 92, 3, 12, 6, 0, 91, 90, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 93, 1, 0, 0, 0, 93, 94, 5, 7, 0, 0, 94, 98, 5, 2, 0, 0, 95, 97, 3, 20, 10, 0, 96, 95, 1, 0, 0, 0, 97, 100, 1, 0, 0, 0, 98, 96, 1, 0, 0, 0, 98, 99, 1, 0, 0, 0, 99, 101, 1, 0, 0, 0, 100, 98, 1, 0, 0, 0, 101, 102, 5, 3, 0, 0, 102, 11, 1, 0, 0, 0, 103, 108, 3, 14, 7, 0, 104, 105, 5, 8, 0, 0, 105, 107, 3, 14, 7, 0, 106, 104, 1, 0, 0, 0, 107, 110, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 13, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 111, 112, 3, 16, 8, 0, 112, 113, 5, 37, 0, 0, 113, 15, 1, 0, 0, 0, 114, 115, 7, 0, 0, 0, 115, 17, 1, 0, 0, 0, 116, 117, 7, 1, 0, 0, 117, 19, 1, 0, 0, 0, 118, 125, 3, 22, 11, 0, 119, 125, 3, 24, 12, 0, 120, 125, 3, 26, 13, 0, 121, 125, 3, 28, 14, 0, 122, 125, 3, 30, 15, 0, 123, 125, 3, 32, 16, 0, 124, 118, 1, 0, 0, 0, 124, 119, 1, 0, 0, 0, 124, 120, 1, 0, 0, 0, 124, 121, 1, 0, 0, 0, 124, 122, 1, 0, 0, 0, 124, 123, 1, 0, 0, 0, 125, 21, 1, 0, 0, 0, 126, 127, 3, 16, 8, 0, 127, 130, 5, 37, 0, 0, 128, 129, 5, 14, 0, 0, 129, 131, 3, 34, 17, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 133, 5, 4, 0, 0, 133, 23, 1, 0, 0, 0, 134, 135, 5, 37, 0, 0, 135, 136, 5, 14, 0, 0, 136, 137, 3, 34, 17, 0, 137, 138, 5, 4, 0, 0, 138, 25, 1, 0, 0, 0, 139, 140, 5, 15, 0, 0, 140, 141, 5, 6, 0, 0, 141, 142, 3, 34, 17, 0, 142, 143, 5, 7, 0, 0, 143, 146, 3, 20, 10, 0, 144, 145, 5, 16, 0, 0, 145, 147, 3, 20, 10, 0, 146, 144, 1, 0, 0, 0, 146, 147, 1, 0, 0, 0, 147, 27, 1, 0, 0, 0, 148, 149, 5, 17, 0, 0, 149, 150, 5, 6, 0, 0, 150, 151, 3, 34, 17, 0, 151, 152, 5, 7, 0, 0, 152, 153, 3, 20, 10, 0, 153, 29, 1, 0, 0, 0, 154, 156, 5, 18, 0, 0, 155, 157, 3, 34, 17, 0, 156, 155, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 159, 5, 4, 0, 0, 159, 31, 1, 0, 0, 0, 160, 164, 5, 2, 0, 0, 161, 163, 3, 20, 10, 0, 162, 161, 1, 0, 0, 0, 163, 166, 1, 0, 0, 0, 164, 162, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 167, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 167, 168, 5, 3, 0, 0, 168, 33, 1, 0, 0, 0, 169, 170, 6, 17, -1, 0, 170, 171, 5, 28, 0, 0, 171, 181, 3, 34, 17, 5, 172, 173, 5, 32, 0, 0, 173, 181, 3, 34, 17, 4, 174, 175, 5, 6, 0, 0, 175, 176, 3, 34, 17, 0, 176, 177, 5, 7, 0, 0, 177, 181, 1, 0, 0, 0, 178, 181, 3, 36, 18, 0, 179, 181, 5, 37, 0, 0, 180, 169, 1, 0, 0, 0, 180, 172, 1, 0, 0, 0, 180, 174, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 179, 1, 0, 0, 0, 181, 193, 1, 0, 0, 0, 182, 183, 10, 8, 0, 0, 183, 184, 7, 2, 0, 0, 184, 192, 3, 34, 17, 9, 185, 186, 10, 7, 0, 0, 186, 187, 7, 3, 0, 0, 187, 192, 3, 34, 17, 8, 188, 189, 10, 6, 0, 0, 189, 190, 7, 4, 0, 0, 190, 192, 3, 34, 17, 7, 191, 182, 1, 0, 0, 0, 191, 185, 1, 0, 0, 0, 191, 188, 1, 0, 0, 0, 192, 195, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 35, 1, 0, 0, 0, 195, 193, 1, 0, 0, 0, 196, 200, 5, 36, 0, 0, 197, 200, 3, 38, 19, 0, 198, 200, 3, 40, 20, 0, 199, 196, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 198, 1, 0, 0, 0, 200, 37, 1, 0, 0, 0, 201, 202, 7, 5, 0, 0, 202, 39, 1, 0, 0, 0, 203, 204, 5, 35, 0, 0, 204, 205, 9, 0, 0, 0, 205, 206, 5, 35, 0, 0, 206, 41, 1, 0, 0, 0, 17, 45, 54, 62, 75, 82, 91, 98, 108, 124, 130, 146, 156, 164, 180, 191, 193, 199]
\ No newline at end of file
diff --git a/src/main/java/parser/generated/SimpleJavaBaseListener.java b/src/main/java/parser/generated/SimpleJavaBaseListener.java
index a7c55f8..d4d6ae5 100644
--- a/src/main/java/parser/generated/SimpleJavaBaseListener.java
+++ b/src/main/java/parser/generated/SimpleJavaBaseListener.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/ARB00072/Desktop/DHBW/4. Semester/Compilerbau/Endprojekt/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.ParserRuleContext;
@@ -72,6 +72,18 @@ public class SimpleJavaBaseListener implements SimpleJavaListener {
* The default implementation does nothing.
*/
@Override public void exitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx) { }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/parser/generated/SimpleJavaBaseVisitor.java b/src/main/java/parser/generated/SimpleJavaBaseVisitor.java
index d220df2..5e96c5e 100644
--- a/src/main/java/parser/generated/SimpleJavaBaseVisitor.java
+++ b/src/main/java/parser/generated/SimpleJavaBaseVisitor.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/ARB00072/Desktop/DHBW/4. Semester/Compilerbau/Endprojekt/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
@@ -47,6 +47,13 @@ public class SimpleJavaBaseVisitor extends AbstractParseTreeVisitor implem
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/parser/generated/SimpleJavaLexer.java b/src/main/java/parser/generated/SimpleJavaLexer.java
index 1caaafe..d0cafe6 100644
--- a/src/main/java/parser/generated/SimpleJavaLexer.java
+++ b/src/main/java/parser/generated/SimpleJavaLexer.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/ARB00072/Desktop/DHBW/4. Semester/Compilerbau/Endprojekt/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
diff --git a/src/main/java/parser/generated/SimpleJavaListener.java b/src/main/java/parser/generated/SimpleJavaListener.java
index 153e20e..3223932 100644
--- a/src/main/java/parser/generated/SimpleJavaListener.java
+++ b/src/main/java/parser/generated/SimpleJavaListener.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/ARB00072/Desktop/DHBW/4. Semester/Compilerbau/Endprojekt/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.tree.ParseTreeListener;
@@ -57,6 +57,16 @@ public interface SimpleJavaListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx);
+ /**
+ * Enter a parse tree produced by {@link SimpleJavaParser#constructorDeclaration}.
+ * @param ctx the parse tree
+ */
+ void enterConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx);
+ /**
+ * Exit a parse tree produced by {@link SimpleJavaParser#constructorDeclaration}.
+ * @param ctx the parse tree
+ */
+ void exitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx);
/**
* Enter a parse tree produced by {@link SimpleJavaParser#parameterList}.
* @param ctx the parse tree
diff --git a/src/main/java/parser/generated/SimpleJavaParser.java b/src/main/java/parser/generated/SimpleJavaParser.java
index ea84fe1..cfa95de 100644
--- a/src/main/java/parser/generated/SimpleJavaParser.java
+++ b/src/main/java/parser/generated/SimpleJavaParser.java
@@ -1,10 +1,13 @@
-// Generated from C:/Users/ARB00072/Desktop/DHBW/4. Semester/Compilerbau/Endprojekt/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.misc.*;
import org.antlr.v4.runtime.tree.*;
import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"})
public class SimpleJavaParser extends Parser {
@@ -22,19 +25,19 @@ public class SimpleJavaParser extends Parser {
WS=38;
public static final int
RULE_program = 0, RULE_classDeclaration = 1, RULE_memberDeclaration = 2,
- RULE_fieldDeclaration = 3, RULE_methodDeclaration = 4, RULE_parameterList = 5,
- RULE_parameter = 6, RULE_type = 7, RULE_accessType = 8, RULE_statement = 9,
- RULE_variableDeclarationStatement = 10, RULE_assignmentStatement = 11,
- RULE_ifStatement = 12, RULE_whileStatement = 13, RULE_returnStatement = 14,
- RULE_block = 15, RULE_expression = 16, RULE_literal = 17, RULE_booleanLiteral = 18,
- RULE_charLiteral = 19;
+ RULE_fieldDeclaration = 3, RULE_methodDeclaration = 4, RULE_constructorDeclaration = 5,
+ RULE_parameterList = 6, RULE_parameter = 7, RULE_type = 8, RULE_accessType = 9,
+ RULE_statement = 10, RULE_variableDeclarationStatement = 11, RULE_assignmentStatement = 12,
+ RULE_ifStatement = 13, RULE_whileStatement = 14, RULE_returnStatement = 15,
+ RULE_block = 16, RULE_expression = 17, RULE_literal = 18, RULE_booleanLiteral = 19,
+ RULE_charLiteral = 20;
private static String[] makeRuleNames() {
return new String[] {
"program", "classDeclaration", "memberDeclaration", "fieldDeclaration",
- "methodDeclaration", "parameterList", "parameter", "type", "accessType",
- "statement", "variableDeclarationStatement", "assignmentStatement", "ifStatement",
- "whileStatement", "returnStatement", "block", "expression", "literal",
- "booleanLiteral", "charLiteral"
+ "methodDeclaration", "constructorDeclaration", "parameterList", "parameter",
+ "type", "accessType", "statement", "variableDeclarationStatement", "assignmentStatement",
+ "ifStatement", "whileStatement", "returnStatement", "block", "expression",
+ "literal", "booleanLiteral", "charLiteral"
};
}
public static final String[] ruleNames = makeRuleNames();
@@ -142,17 +145,17 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(41);
+ setState(43);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(40);
+ setState(42);
classDeclaration();
}
}
- setState(43);
+ setState(45);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==T__11 || _la==T__12 );
@@ -207,29 +210,29 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(45);
- accessType();
- setState(46);
- match(T__0);
setState(47);
- match(IDENTIFIER);
+ accessType();
setState(48);
+ match(T__0);
+ setState(49);
+ match(IDENTIFIER);
+ setState(50);
match(T__1);
- setState(52);
+ setState(54);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__11 || _la==T__12) {
{
{
- setState(49);
+ setState(51);
memberDeclaration();
}
}
- setState(54);
+ setState(56);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(55);
+ setState(57);
match(T__2);
}
}
@@ -252,6 +255,9 @@ public class SimpleJavaParser extends Parser {
public MethodDeclarationContext methodDeclaration() {
return getRuleContext(MethodDeclarationContext.class,0);
}
+ public ConstructorDeclarationContext constructorDeclaration() {
+ return getRuleContext(ConstructorDeclarationContext.class,0);
+ }
public MemberDeclarationContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -275,23 +281,30 @@ public class SimpleJavaParser extends Parser {
MemberDeclarationContext _localctx = new MemberDeclarationContext(_ctx, getState());
enterRule(_localctx, 4, RULE_memberDeclaration);
try {
- setState(59);
+ setState(62);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(57);
+ setState(59);
fieldDeclaration();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(58);
+ setState(60);
methodDeclaration();
}
break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(61);
+ constructorDeclaration();
+ }
+ break;
}
}
catch (RecognitionException re) {
@@ -339,13 +352,13 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(61);
- accessType();
- setState(62);
- type();
- setState(63);
- match(IDENTIFIER);
setState(64);
+ accessType();
+ setState(65);
+ type();
+ setState(66);
+ match(IDENTIFIER);
+ setState(67);
match(T__3);
}
}
@@ -404,45 +417,135 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(66);
- accessType();
- setState(67);
- match(T__4);
- setState(68);
- type();
setState(69);
- match(IDENTIFIER);
+ accessType();
setState(70);
- match(T__5);
+ match(T__4);
+ setState(71);
+ type();
setState(72);
+ match(IDENTIFIER);
+ setState(73);
+ match(T__5);
+ setState(75);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3584L) != 0)) {
{
- setState(71);
+ setState(74);
parameterList();
}
}
- setState(74);
+ setState(77);
match(T__6);
- setState(75);
+ setState(78);
match(T__1);
- setState(79);
+ setState(82);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 137439383044L) != 0)) {
{
{
- setState(76);
+ setState(79);
statement();
}
}
- setState(81);
+ setState(84);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(82);
+ setState(85);
+ match(T__2);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ @SuppressWarnings("CheckReturnValue")
+ public static class ConstructorDeclarationContext extends ParserRuleContext {
+ public AccessTypeContext accessType() {
+ return getRuleContext(AccessTypeContext.class,0);
+ }
+ public TerminalNode IDENTIFIER() { return getToken(SimpleJavaParser.IDENTIFIER, 0); }
+ public ParameterListContext parameterList() {
+ return getRuleContext(ParameterListContext.class,0);
+ }
+ public List statement() {
+ return getRuleContexts(StatementContext.class);
+ }
+ public StatementContext statement(int i) {
+ return getRuleContext(StatementContext.class,i);
+ }
+ public ConstructorDeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_constructorDeclaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof SimpleJavaListener ) ((SimpleJavaListener)listener).enterConstructorDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof SimpleJavaListener ) ((SimpleJavaListener)listener).exitConstructorDeclaration(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof SimpleJavaVisitor ) return ((SimpleJavaVisitor extends T>)visitor).visitConstructorDeclaration(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ConstructorDeclarationContext constructorDeclaration() throws RecognitionException {
+ ConstructorDeclarationContext _localctx = new ConstructorDeclarationContext(_ctx, getState());
+ enterRule(_localctx, 10, RULE_constructorDeclaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(87);
+ accessType();
+ setState(88);
+ match(IDENTIFIER);
+ setState(89);
+ match(T__5);
+ setState(91);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3584L) != 0)) {
+ {
+ setState(90);
+ parameterList();
+ }
+ }
+
+ setState(93);
+ match(T__6);
+ setState(94);
+ match(T__1);
+ setState(98);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 137439383044L) != 0)) {
+ {
+ {
+ setState(95);
+ statement();
+ }
+ }
+ setState(100);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(101);
match(T__2);
}
}
@@ -486,26 +589,26 @@ public class SimpleJavaParser extends Parser {
public final ParameterListContext parameterList() throws RecognitionException {
ParameterListContext _localctx = new ParameterListContext(_ctx, getState());
- enterRule(_localctx, 10, RULE_parameterList);
+ enterRule(_localctx, 12, RULE_parameterList);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(84);
+ setState(103);
parameter();
- setState(89);
+ setState(108);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__7) {
{
{
- setState(85);
+ setState(104);
match(T__7);
- setState(86);
+ setState(105);
parameter();
}
}
- setState(91);
+ setState(110);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -549,13 +652,13 @@ public class SimpleJavaParser extends Parser {
public final ParameterContext parameter() throws RecognitionException {
ParameterContext _localctx = new ParameterContext(_ctx, getState());
- enterRule(_localctx, 12, RULE_parameter);
+ enterRule(_localctx, 14, RULE_parameter);
try {
enterOuterAlt(_localctx, 1);
{
- setState(92);
+ setState(111);
type();
- setState(93);
+ setState(112);
match(IDENTIFIER);
}
}
@@ -593,12 +696,12 @@ public class SimpleJavaParser extends Parser {
public final TypeContext type() throws RecognitionException {
TypeContext _localctx = new TypeContext(_ctx, getState());
- enterRule(_localctx, 14, RULE_type);
+ enterRule(_localctx, 16, RULE_type);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(95);
+ setState(114);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 3584L) != 0)) ) {
_errHandler.recoverInline(this);
@@ -644,12 +747,12 @@ public class SimpleJavaParser extends Parser {
public final AccessTypeContext accessType() throws RecognitionException {
AccessTypeContext _localctx = new AccessTypeContext(_ctx, getState());
- enterRule(_localctx, 16, RULE_accessType);
+ enterRule(_localctx, 18, RULE_accessType);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(97);
+ setState(116);
_la = _input.LA(1);
if ( !(_la==T__11 || _la==T__12) ) {
_errHandler.recoverInline(this);
@@ -713,9 +816,9 @@ public class SimpleJavaParser extends Parser {
public final StatementContext statement() throws RecognitionException {
StatementContext _localctx = new StatementContext(_ctx, getState());
- enterRule(_localctx, 18, RULE_statement);
+ enterRule(_localctx, 20, RULE_statement);
try {
- setState(105);
+ setState(124);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__8:
@@ -723,42 +826,42 @@ public class SimpleJavaParser extends Parser {
case T__10:
enterOuterAlt(_localctx, 1);
{
- setState(99);
+ setState(118);
variableDeclarationStatement();
}
break;
case IDENTIFIER:
enterOuterAlt(_localctx, 2);
{
- setState(100);
+ setState(119);
assignmentStatement();
}
break;
case T__14:
enterOuterAlt(_localctx, 3);
{
- setState(101);
+ setState(120);
ifStatement();
}
break;
case T__16:
enterOuterAlt(_localctx, 4);
{
- setState(102);
+ setState(121);
whileStatement();
}
break;
case T__17:
enterOuterAlt(_localctx, 5);
{
- setState(103);
+ setState(122);
returnStatement();
}
break;
case T__1:
enterOuterAlt(_localctx, 6);
{
- setState(104);
+ setState(123);
block();
}
break;
@@ -807,28 +910,28 @@ public class SimpleJavaParser extends Parser {
public final VariableDeclarationStatementContext variableDeclarationStatement() throws RecognitionException {
VariableDeclarationStatementContext _localctx = new VariableDeclarationStatementContext(_ctx, getState());
- enterRule(_localctx, 20, RULE_variableDeclarationStatement);
+ enterRule(_localctx, 22, RULE_variableDeclarationStatement);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(107);
+ setState(126);
type();
- setState(108);
+ setState(127);
match(IDENTIFIER);
- setState(111);
+ setState(130);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(109);
+ setState(128);
match(T__13);
- setState(110);
+ setState(129);
expression(0);
}
}
- setState(113);
+ setState(132);
match(T__3);
}
}
@@ -870,17 +973,17 @@ public class SimpleJavaParser extends Parser {
public final AssignmentStatementContext assignmentStatement() throws RecognitionException {
AssignmentStatementContext _localctx = new AssignmentStatementContext(_ctx, getState());
- enterRule(_localctx, 22, RULE_assignmentStatement);
+ enterRule(_localctx, 24, RULE_assignmentStatement);
try {
enterOuterAlt(_localctx, 1);
{
- setState(115);
+ setState(134);
match(IDENTIFIER);
- setState(116);
+ setState(135);
match(T__13);
- setState(117);
+ setState(136);
expression(0);
- setState(118);
+ setState(137);
match(T__3);
}
}
@@ -927,28 +1030,28 @@ public class SimpleJavaParser extends Parser {
public final IfStatementContext ifStatement() throws RecognitionException {
IfStatementContext _localctx = new IfStatementContext(_ctx, getState());
- enterRule(_localctx, 24, RULE_ifStatement);
+ enterRule(_localctx, 26, RULE_ifStatement);
try {
enterOuterAlt(_localctx, 1);
{
- setState(120);
+ setState(139);
match(T__14);
- setState(121);
+ setState(140);
match(T__5);
- setState(122);
+ setState(141);
expression(0);
- setState(123);
+ setState(142);
match(T__6);
- setState(124);
+ setState(143);
statement();
- setState(127);
+ setState(146);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
case 1:
{
- setState(125);
+ setState(144);
match(T__15);
- setState(126);
+ setState(145);
statement();
}
break;
@@ -995,19 +1098,19 @@ public class SimpleJavaParser extends Parser {
public final WhileStatementContext whileStatement() throws RecognitionException {
WhileStatementContext _localctx = new WhileStatementContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_whileStatement);
+ enterRule(_localctx, 28, RULE_whileStatement);
try {
enterOuterAlt(_localctx, 1);
{
- setState(129);
+ setState(148);
match(T__16);
- setState(130);
+ setState(149);
match(T__5);
- setState(131);
+ setState(150);
expression(0);
- setState(132);
+ setState(151);
match(T__6);
- setState(133);
+ setState(152);
statement();
}
}
@@ -1048,24 +1151,24 @@ public class SimpleJavaParser extends Parser {
public final ReturnStatementContext returnStatement() throws RecognitionException {
ReturnStatementContext _localctx = new ReturnStatementContext(_ctx, getState());
- enterRule(_localctx, 28, RULE_returnStatement);
+ enterRule(_localctx, 30, RULE_returnStatement);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(135);
+ setState(154);
match(T__17);
- setState(137);
+ setState(156);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 270851375168L) != 0)) {
{
- setState(136);
+ setState(155);
expression(0);
}
}
- setState(139);
+ setState(158);
match(T__3);
}
}
@@ -1109,28 +1212,28 @@ public class SimpleJavaParser extends Parser {
public final BlockContext block() throws RecognitionException {
BlockContext _localctx = new BlockContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_block);
+ enterRule(_localctx, 32, RULE_block);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(141);
+ setState(160);
match(T__1);
- setState(145);
+ setState(164);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 137439383044L) != 0)) {
{
{
- setState(142);
+ setState(161);
statement();
}
}
- setState(147);
+ setState(166);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(148);
+ setState(167);
match(T__2);
}
}
@@ -1185,39 +1288,39 @@ public class SimpleJavaParser extends Parser {
int _parentState = getState();
ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
ExpressionContext _prevctx = _localctx;
- int _startState = 32;
- enterRecursionRule(_localctx, 32, RULE_expression, _p);
+ int _startState = 34;
+ enterRecursionRule(_localctx, 34, RULE_expression, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(161);
+ setState(180);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__27:
{
- setState(151);
+ setState(170);
match(T__27);
- setState(152);
+ setState(171);
expression(5);
}
break;
case T__31:
{
- setState(153);
+ setState(172);
match(T__31);
- setState(154);
+ setState(173);
expression(4);
}
break;
case T__5:
{
- setState(155);
+ setState(174);
match(T__5);
- setState(156);
+ setState(175);
expression(0);
- setState(157);
+ setState(176);
match(T__6);
}
break;
@@ -1226,13 +1329,13 @@ public class SimpleJavaParser extends Parser {
case T__34:
case INTEGERLITERAL:
{
- setState(159);
+ setState(178);
literal();
}
break;
case IDENTIFIER:
{
- setState(160);
+ setState(179);
match(IDENTIFIER);
}
break;
@@ -1240,24 +1343,24 @@ public class SimpleJavaParser extends Parser {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(174);
+ setState(193);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,13,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,15,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(172);
+ setState(191);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
case 1:
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(163);
+ setState(182);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(164);
+ setState(183);
_la = _input.LA(1);
if ( !(_la==T__18 || _la==T__19) ) {
_errHandler.recoverInline(this);
@@ -1267,7 +1370,7 @@ public class SimpleJavaParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(165);
+ setState(184);
expression(9);
}
break;
@@ -1275,9 +1378,9 @@ public class SimpleJavaParser extends Parser {
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(166);
+ setState(185);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(167);
+ setState(186);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 132120576L) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1287,7 +1390,7 @@ public class SimpleJavaParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(168);
+ setState(187);
expression(8);
}
break;
@@ -1295,9 +1398,9 @@ public class SimpleJavaParser extends Parser {
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(169);
+ setState(188);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(170);
+ setState(189);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 4160749568L) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1307,16 +1410,16 @@ public class SimpleJavaParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(171);
+ setState(190);
expression(7);
}
break;
}
}
}
- setState(176);
+ setState(195);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,13,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,15,_ctx);
}
}
}
@@ -1361,15 +1464,15 @@ public class SimpleJavaParser extends Parser {
public final LiteralContext literal() throws RecognitionException {
LiteralContext _localctx = new LiteralContext(_ctx, getState());
- enterRule(_localctx, 34, RULE_literal);
+ enterRule(_localctx, 36, RULE_literal);
try {
- setState(180);
+ setState(199);
_errHandler.sync(this);
switch (_input.LA(1)) {
case INTEGERLITERAL:
enterOuterAlt(_localctx, 1);
{
- setState(177);
+ setState(196);
match(INTEGERLITERAL);
}
break;
@@ -1377,14 +1480,14 @@ public class SimpleJavaParser extends Parser {
case T__33:
enterOuterAlt(_localctx, 2);
{
- setState(178);
+ setState(197);
booleanLiteral();
}
break;
case T__34:
enterOuterAlt(_localctx, 3);
{
- setState(179);
+ setState(198);
charLiteral();
}
break;
@@ -1426,12 +1529,12 @@ public class SimpleJavaParser extends Parser {
public final BooleanLiteralContext booleanLiteral() throws RecognitionException {
BooleanLiteralContext _localctx = new BooleanLiteralContext(_ctx, getState());
- enterRule(_localctx, 36, RULE_booleanLiteral);
+ enterRule(_localctx, 38, RULE_booleanLiteral);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(182);
+ setState(201);
_la = _input.LA(1);
if ( !(_la==T__32 || _la==T__33) ) {
_errHandler.recoverInline(this);
@@ -1477,15 +1580,15 @@ public class SimpleJavaParser extends Parser {
public final CharLiteralContext charLiteral() throws RecognitionException {
CharLiteralContext _localctx = new CharLiteralContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_charLiteral);
+ enterRule(_localctx, 40, RULE_charLiteral);
try {
enterOuterAlt(_localctx, 1);
{
- setState(184);
+ setState(203);
match(T__34);
- setState(185);
+ setState(204);
matchWildcard();
- setState(186);
+ setState(205);
match(T__34);
}
}
@@ -1502,7 +1605,7 @@ public class SimpleJavaParser extends Parser {
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
- case 16:
+ case 17:
return expression_sempred((ExpressionContext)_localctx, predIndex);
}
return true;
@@ -1520,118 +1623,132 @@ public class SimpleJavaParser extends Parser {
}
public static final String _serializedATN =
- "\u0004\u0001&\u00bd\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
+ "\u0004\u0001&\u00d0\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
"\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+
"\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+
"\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+
"\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+
- "\u0002\u0013\u0007\u0013\u0001\u0000\u0004\u0000*\b\u0000\u000b\u0000"+
- "\f\u0000+\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
- "\u0005\u00013\b\u0001\n\u0001\f\u00016\t\u0001\u0001\u0001\u0001\u0001"+
- "\u0001\u0002\u0001\u0002\u0003\u0002<\b\u0002\u0001\u0003\u0001\u0003"+
- "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004"+
- "\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004I\b\u0004\u0001\u0004"+
- "\u0001\u0004\u0001\u0004\u0005\u0004N\b\u0004\n\u0004\f\u0004Q\t\u0004"+
- "\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0005\u0005"+
- "X\b\u0005\n\u0005\f\u0005[\t\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+
- "\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001"+
- "\t\u0001\t\u0001\t\u0003\tj\b\t\u0001\n\u0001\n\u0001\n\u0001\n\u0003"+
- "\np\b\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+
- "\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0003"+
- "\f\u0080\b\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e"+
- "\u0001\u000e\u0003\u000e\u008a\b\u000e\u0001\u000e\u0001\u000e\u0001\u000f"+
- "\u0001\u000f\u0005\u000f\u0090\b\u000f\n\u000f\f\u000f\u0093\t\u000f\u0001"+
- "\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
- "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
- "\u0010\u0003\u0010\u00a2\b\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
- "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005"+
- "\u0010\u00ad\b\u0010\n\u0010\f\u0010\u00b0\t\u0010\u0001\u0011\u0001\u0011"+
- "\u0001\u0011\u0003\u0011\u00b5\b\u0011\u0001\u0012\u0001\u0012\u0001\u0013"+
- "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0000\u0001 \u0014\u0000"+
- "\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c"+
- "\u001e \"$&\u0000\u0006\u0001\u0000\t\u000b\u0001\u0000\f\r\u0001\u0000"+
- "\u0013\u0014\u0001\u0000\u0015\u001a\u0001\u0000\u001b\u001f\u0001\u0000"+
- "!\"\u00c0\u0000)\u0001\u0000\u0000\u0000\u0002-\u0001\u0000\u0000\u0000"+
- "\u0004;\u0001\u0000\u0000\u0000\u0006=\u0001\u0000\u0000\u0000\bB\u0001"+
- "\u0000\u0000\u0000\nT\u0001\u0000\u0000\u0000\f\\\u0001\u0000\u0000\u0000"+
- "\u000e_\u0001\u0000\u0000\u0000\u0010a\u0001\u0000\u0000\u0000\u0012i"+
- "\u0001\u0000\u0000\u0000\u0014k\u0001\u0000\u0000\u0000\u0016s\u0001\u0000"+
- "\u0000\u0000\u0018x\u0001\u0000\u0000\u0000\u001a\u0081\u0001\u0000\u0000"+
- "\u0000\u001c\u0087\u0001\u0000\u0000\u0000\u001e\u008d\u0001\u0000\u0000"+
- "\u0000 \u00a1\u0001\u0000\u0000\u0000\"\u00b4\u0001\u0000\u0000\u0000"+
- "$\u00b6\u0001\u0000\u0000\u0000&\u00b8\u0001\u0000\u0000\u0000(*\u0003"+
- "\u0002\u0001\u0000)(\u0001\u0000\u0000\u0000*+\u0001\u0000\u0000\u0000"+
- "+)\u0001\u0000\u0000\u0000+,\u0001\u0000\u0000\u0000,\u0001\u0001\u0000"+
- "\u0000\u0000-.\u0003\u0010\b\u0000./\u0005\u0001\u0000\u0000/0\u0005%"+
- "\u0000\u000004\u0005\u0002\u0000\u000013\u0003\u0004\u0002\u000021\u0001"+
- "\u0000\u0000\u000036\u0001\u0000\u0000\u000042\u0001\u0000\u0000\u0000"+
- "45\u0001\u0000\u0000\u000057\u0001\u0000\u0000\u000064\u0001\u0000\u0000"+
- "\u000078\u0005\u0003\u0000\u00008\u0003\u0001\u0000\u0000\u00009<\u0003"+
- "\u0006\u0003\u0000:<\u0003\b\u0004\u0000;9\u0001\u0000\u0000\u0000;:\u0001"+
- "\u0000\u0000\u0000<\u0005\u0001\u0000\u0000\u0000=>\u0003\u0010\b\u0000"+
- ">?\u0003\u000e\u0007\u0000?@\u0005%\u0000\u0000@A\u0005\u0004\u0000\u0000"+
- "A\u0007\u0001\u0000\u0000\u0000BC\u0003\u0010\b\u0000CD\u0005\u0005\u0000"+
- "\u0000DE\u0003\u000e\u0007\u0000EF\u0005%\u0000\u0000FH\u0005\u0006\u0000"+
- "\u0000GI\u0003\n\u0005\u0000HG\u0001\u0000\u0000\u0000HI\u0001\u0000\u0000"+
- "\u0000IJ\u0001\u0000\u0000\u0000JK\u0005\u0007\u0000\u0000KO\u0005\u0002"+
- "\u0000\u0000LN\u0003\u0012\t\u0000ML\u0001\u0000\u0000\u0000NQ\u0001\u0000"+
- "\u0000\u0000OM\u0001\u0000\u0000\u0000OP\u0001\u0000\u0000\u0000PR\u0001"+
- "\u0000\u0000\u0000QO\u0001\u0000\u0000\u0000RS\u0005\u0003\u0000\u0000"+
- "S\t\u0001\u0000\u0000\u0000TY\u0003\f\u0006\u0000UV\u0005\b\u0000\u0000"+
- "VX\u0003\f\u0006\u0000WU\u0001\u0000\u0000\u0000X[\u0001\u0000\u0000\u0000"+
- "YW\u0001\u0000\u0000\u0000YZ\u0001\u0000\u0000\u0000Z\u000b\u0001\u0000"+
- "\u0000\u0000[Y\u0001\u0000\u0000\u0000\\]\u0003\u000e\u0007\u0000]^\u0005"+
- "%\u0000\u0000^\r\u0001\u0000\u0000\u0000_`\u0007\u0000\u0000\u0000`\u000f"+
- "\u0001\u0000\u0000\u0000ab\u0007\u0001\u0000\u0000b\u0011\u0001\u0000"+
- "\u0000\u0000cj\u0003\u0014\n\u0000dj\u0003\u0016\u000b\u0000ej\u0003\u0018"+
- "\f\u0000fj\u0003\u001a\r\u0000gj\u0003\u001c\u000e\u0000hj\u0003\u001e"+
- "\u000f\u0000ic\u0001\u0000\u0000\u0000id\u0001\u0000\u0000\u0000ie\u0001"+
- "\u0000\u0000\u0000if\u0001\u0000\u0000\u0000ig\u0001\u0000\u0000\u0000"+
- "ih\u0001\u0000\u0000\u0000j\u0013\u0001\u0000\u0000\u0000kl\u0003\u000e"+
- "\u0007\u0000lo\u0005%\u0000\u0000mn\u0005\u000e\u0000\u0000np\u0003 \u0010"+
- "\u0000om\u0001\u0000\u0000\u0000op\u0001\u0000\u0000\u0000pq\u0001\u0000"+
- "\u0000\u0000qr\u0005\u0004\u0000\u0000r\u0015\u0001\u0000\u0000\u0000"+
- "st\u0005%\u0000\u0000tu\u0005\u000e\u0000\u0000uv\u0003 \u0010\u0000v"+
- "w\u0005\u0004\u0000\u0000w\u0017\u0001\u0000\u0000\u0000xy\u0005\u000f"+
- "\u0000\u0000yz\u0005\u0006\u0000\u0000z{\u0003 \u0010\u0000{|\u0005\u0007"+
- "\u0000\u0000|\u007f\u0003\u0012\t\u0000}~\u0005\u0010\u0000\u0000~\u0080"+
- "\u0003\u0012\t\u0000\u007f}\u0001\u0000\u0000\u0000\u007f\u0080\u0001"+
- "\u0000\u0000\u0000\u0080\u0019\u0001\u0000\u0000\u0000\u0081\u0082\u0005"+
- "\u0011\u0000\u0000\u0082\u0083\u0005\u0006\u0000\u0000\u0083\u0084\u0003"+
- " \u0010\u0000\u0084\u0085\u0005\u0007\u0000\u0000\u0085\u0086\u0003\u0012"+
- "\t\u0000\u0086\u001b\u0001\u0000\u0000\u0000\u0087\u0089\u0005\u0012\u0000"+
- "\u0000\u0088\u008a\u0003 \u0010\u0000\u0089\u0088\u0001\u0000\u0000\u0000"+
- "\u0089\u008a\u0001\u0000\u0000\u0000\u008a\u008b\u0001\u0000\u0000\u0000"+
- "\u008b\u008c\u0005\u0004\u0000\u0000\u008c\u001d\u0001\u0000\u0000\u0000"+
- "\u008d\u0091\u0005\u0002\u0000\u0000\u008e\u0090\u0003\u0012\t\u0000\u008f"+
- "\u008e\u0001\u0000\u0000\u0000\u0090\u0093\u0001\u0000\u0000\u0000\u0091"+
- "\u008f\u0001\u0000\u0000\u0000\u0091\u0092\u0001\u0000\u0000\u0000\u0092"+
- "\u0094\u0001\u0000\u0000\u0000\u0093\u0091\u0001\u0000\u0000\u0000\u0094"+
- "\u0095\u0005\u0003\u0000\u0000\u0095\u001f\u0001\u0000\u0000\u0000\u0096"+
- "\u0097\u0006\u0010\uffff\uffff\u0000\u0097\u0098\u0005\u001c\u0000\u0000"+
- "\u0098\u00a2\u0003 \u0010\u0005\u0099\u009a\u0005 \u0000\u0000\u009a\u00a2"+
- "\u0003 \u0010\u0004\u009b\u009c\u0005\u0006\u0000\u0000\u009c\u009d\u0003"+
- " \u0010\u0000\u009d\u009e\u0005\u0007\u0000\u0000\u009e\u00a2\u0001\u0000"+
- "\u0000\u0000\u009f\u00a2\u0003\"\u0011\u0000\u00a0\u00a2\u0005%\u0000"+
- "\u0000\u00a1\u0096\u0001\u0000\u0000\u0000\u00a1\u0099\u0001\u0000\u0000"+
- "\u0000\u00a1\u009b\u0001\u0000\u0000\u0000\u00a1\u009f\u0001\u0000\u0000"+
- "\u0000\u00a1\u00a0\u0001\u0000\u0000\u0000\u00a2\u00ae\u0001\u0000\u0000"+
- "\u0000\u00a3\u00a4\n\b\u0000\u0000\u00a4\u00a5\u0007\u0002\u0000\u0000"+
- "\u00a5\u00ad\u0003 \u0010\t\u00a6\u00a7\n\u0007\u0000\u0000\u00a7\u00a8"+
- "\u0007\u0003\u0000\u0000\u00a8\u00ad\u0003 \u0010\b\u00a9\u00aa\n\u0006"+
- "\u0000\u0000\u00aa\u00ab\u0007\u0004\u0000\u0000\u00ab\u00ad\u0003 \u0010"+
- "\u0007\u00ac\u00a3\u0001\u0000\u0000\u0000\u00ac\u00a6\u0001\u0000\u0000"+
- "\u0000\u00ac\u00a9\u0001\u0000\u0000\u0000\u00ad\u00b0\u0001\u0000\u0000"+
- "\u0000\u00ae\u00ac\u0001\u0000\u0000\u0000\u00ae\u00af\u0001\u0000\u0000"+
- "\u0000\u00af!\u0001\u0000\u0000\u0000\u00b0\u00ae\u0001\u0000\u0000\u0000"+
- "\u00b1\u00b5\u0005$\u0000\u0000\u00b2\u00b5\u0003$\u0012\u0000\u00b3\u00b5"+
- "\u0003&\u0013\u0000\u00b4\u00b1\u0001\u0000\u0000\u0000\u00b4\u00b2\u0001"+
- "\u0000\u0000\u0000\u00b4\u00b3\u0001\u0000\u0000\u0000\u00b5#\u0001\u0000"+
- "\u0000\u0000\u00b6\u00b7\u0007\u0005\u0000\u0000\u00b7%\u0001\u0000\u0000"+
- "\u0000\u00b8\u00b9\u0005#\u0000\u0000\u00b9\u00ba\t\u0000\u0000\u0000"+
- "\u00ba\u00bb\u0005#\u0000\u0000\u00bb\'\u0001\u0000\u0000\u0000\u000f"+
- "+4;HOYio\u007f\u0089\u0091\u00a1\u00ac\u00ae\u00b4";
+ "\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0001\u0000\u0004\u0000"+
+ ",\b\u0000\u000b\u0000\f\u0000-\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
+ "\u0001\u0001\u0001\u0005\u00015\b\u0001\n\u0001\f\u00018\t\u0001\u0001"+
+ "\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002?\b"+
+ "\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+
+ "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0003"+
+ "\u0004L\b\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0005\u0004Q\b\u0004"+
+ "\n\u0004\f\u0004T\t\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+
+ "\u0001\u0005\u0001\u0005\u0003\u0005\\\b\u0005\u0001\u0005\u0001\u0005"+
+ "\u0001\u0005\u0005\u0005a\b\u0005\n\u0005\f\u0005d\t\u0005\u0001\u0005"+
+ "\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0005\u0006k\b\u0006"+
+ "\n\u0006\f\u0006n\t\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b"+
+ "\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+
+ "\n\u0003\n}\b\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0003"+
+ "\u000b\u0083\b\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001"+
+ "\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003"+
+ "\r\u0093\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+
+ "\u0001\u000e\u0001\u000f\u0001\u000f\u0003\u000f\u009d\b\u000f\u0001\u000f"+
+ "\u0001\u000f\u0001\u0010\u0001\u0010\u0005\u0010\u00a3\b\u0010\n\u0010"+
+ "\f\u0010\u00a6\t\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011"+
+ "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+
+ "\u0001\u0011\u0001\u0011\u0001\u0011\u0003\u0011\u00b5\b\u0011\u0001\u0011"+
+ "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+
+ "\u0001\u0011\u0001\u0011\u0005\u0011\u00c0\b\u0011\n\u0011\f\u0011\u00c3"+
+ "\t\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u00c8\b\u0012"+
+ "\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+
+ "\u0001\u0014\u0000\u0001\"\u0015\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010"+
+ "\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(\u0000\u0006\u0001\u0000"+
+ "\t\u000b\u0001\u0000\f\r\u0001\u0000\u0013\u0014\u0001\u0000\u0015\u001a"+
+ "\u0001\u0000\u001b\u001f\u0001\u0000!\"\u00d5\u0000+\u0001\u0000\u0000"+
+ "\u0000\u0002/\u0001\u0000\u0000\u0000\u0004>\u0001\u0000\u0000\u0000\u0006"+
+ "@\u0001\u0000\u0000\u0000\bE\u0001\u0000\u0000\u0000\nW\u0001\u0000\u0000"+
+ "\u0000\fg\u0001\u0000\u0000\u0000\u000eo\u0001\u0000\u0000\u0000\u0010"+
+ "r\u0001\u0000\u0000\u0000\u0012t\u0001\u0000\u0000\u0000\u0014|\u0001"+
+ "\u0000\u0000\u0000\u0016~\u0001\u0000\u0000\u0000\u0018\u0086\u0001\u0000"+
+ "\u0000\u0000\u001a\u008b\u0001\u0000\u0000\u0000\u001c\u0094\u0001\u0000"+
+ "\u0000\u0000\u001e\u009a\u0001\u0000\u0000\u0000 \u00a0\u0001\u0000\u0000"+
+ "\u0000\"\u00b4\u0001\u0000\u0000\u0000$\u00c7\u0001\u0000\u0000\u0000"+
+ "&\u00c9\u0001\u0000\u0000\u0000(\u00cb\u0001\u0000\u0000\u0000*,\u0003"+
+ "\u0002\u0001\u0000+*\u0001\u0000\u0000\u0000,-\u0001\u0000\u0000\u0000"+
+ "-+\u0001\u0000\u0000\u0000-.\u0001\u0000\u0000\u0000.\u0001\u0001\u0000"+
+ "\u0000\u0000/0\u0003\u0012\t\u000001\u0005\u0001\u0000\u000012\u0005%"+
+ "\u0000\u000026\u0005\u0002\u0000\u000035\u0003\u0004\u0002\u000043\u0001"+
+ "\u0000\u0000\u000058\u0001\u0000\u0000\u000064\u0001\u0000\u0000\u0000"+
+ "67\u0001\u0000\u0000\u000079\u0001\u0000\u0000\u000086\u0001\u0000\u0000"+
+ "\u00009:\u0005\u0003\u0000\u0000:\u0003\u0001\u0000\u0000\u0000;?\u0003"+
+ "\u0006\u0003\u0000\u0003\b\u0004\u0000=?\u0003\n\u0005\u0000>;\u0001"+
+ "\u0000\u0000\u0000><\u0001\u0000\u0000\u0000>=\u0001\u0000\u0000\u0000"+
+ "?\u0005\u0001\u0000\u0000\u0000@A\u0003\u0012\t\u0000AB\u0003\u0010\b"+
+ "\u0000BC\u0005%\u0000\u0000CD\u0005\u0004\u0000\u0000D\u0007\u0001\u0000"+
+ "\u0000\u0000EF\u0003\u0012\t\u0000FG\u0005\u0005\u0000\u0000GH\u0003\u0010"+
+ "\b\u0000HI\u0005%\u0000\u0000IK\u0005\u0006\u0000\u0000JL\u0003\f\u0006"+
+ "\u0000KJ\u0001\u0000\u0000\u0000KL\u0001\u0000\u0000\u0000LM\u0001\u0000"+
+ "\u0000\u0000MN\u0005\u0007\u0000\u0000NR\u0005\u0002\u0000\u0000OQ\u0003"+
+ "\u0014\n\u0000PO\u0001\u0000\u0000\u0000QT\u0001\u0000\u0000\u0000RP\u0001"+
+ "\u0000\u0000\u0000RS\u0001\u0000\u0000\u0000SU\u0001\u0000\u0000\u0000"+
+ "TR\u0001\u0000\u0000\u0000UV\u0005\u0003\u0000\u0000V\t\u0001\u0000\u0000"+
+ "\u0000WX\u0003\u0012\t\u0000XY\u0005%\u0000\u0000Y[\u0005\u0006\u0000"+
+ "\u0000Z\\\u0003\f\u0006\u0000[Z\u0001\u0000\u0000\u0000[\\\u0001\u0000"+
+ "\u0000\u0000\\]\u0001\u0000\u0000\u0000]^\u0005\u0007\u0000\u0000^b\u0005"+
+ "\u0002\u0000\u0000_a\u0003\u0014\n\u0000`_\u0001\u0000\u0000\u0000ad\u0001"+
+ "\u0000\u0000\u0000b`\u0001\u0000\u0000\u0000bc\u0001\u0000\u0000\u0000"+
+ "ce\u0001\u0000\u0000\u0000db\u0001\u0000\u0000\u0000ef\u0005\u0003\u0000"+
+ "\u0000f\u000b\u0001\u0000\u0000\u0000gl\u0003\u000e\u0007\u0000hi\u0005"+
+ "\b\u0000\u0000ik\u0003\u000e\u0007\u0000jh\u0001\u0000\u0000\u0000kn\u0001"+
+ "\u0000\u0000\u0000lj\u0001\u0000\u0000\u0000lm\u0001\u0000\u0000\u0000"+
+ "m\r\u0001\u0000\u0000\u0000nl\u0001\u0000\u0000\u0000op\u0003\u0010\b"+
+ "\u0000pq\u0005%\u0000\u0000q\u000f\u0001\u0000\u0000\u0000rs\u0007\u0000"+
+ "\u0000\u0000s\u0011\u0001\u0000\u0000\u0000tu\u0007\u0001\u0000\u0000"+
+ "u\u0013\u0001\u0000\u0000\u0000v}\u0003\u0016\u000b\u0000w}\u0003\u0018"+
+ "\f\u0000x}\u0003\u001a\r\u0000y}\u0003\u001c\u000e\u0000z}\u0003\u001e"+
+ "\u000f\u0000{}\u0003 \u0010\u0000|v\u0001\u0000\u0000\u0000|w\u0001\u0000"+
+ "\u0000\u0000|x\u0001\u0000\u0000\u0000|y\u0001\u0000\u0000\u0000|z\u0001"+
+ "\u0000\u0000\u0000|{\u0001\u0000\u0000\u0000}\u0015\u0001\u0000\u0000"+
+ "\u0000~\u007f\u0003\u0010\b\u0000\u007f\u0082\u0005%\u0000\u0000\u0080"+
+ "\u0081\u0005\u000e\u0000\u0000\u0081\u0083\u0003\"\u0011\u0000\u0082\u0080"+
+ "\u0001\u0000\u0000\u0000\u0082\u0083\u0001\u0000\u0000\u0000\u0083\u0084"+
+ "\u0001\u0000\u0000\u0000\u0084\u0085\u0005\u0004\u0000\u0000\u0085\u0017"+
+ "\u0001\u0000\u0000\u0000\u0086\u0087\u0005%\u0000\u0000\u0087\u0088\u0005"+
+ "\u000e\u0000\u0000\u0088\u0089\u0003\"\u0011\u0000\u0089\u008a\u0005\u0004"+
+ "\u0000\u0000\u008a\u0019\u0001\u0000\u0000\u0000\u008b\u008c\u0005\u000f"+
+ "\u0000\u0000\u008c\u008d\u0005\u0006\u0000\u0000\u008d\u008e\u0003\"\u0011"+
+ "\u0000\u008e\u008f\u0005\u0007\u0000\u0000\u008f\u0092\u0003\u0014\n\u0000"+
+ "\u0090\u0091\u0005\u0010\u0000\u0000\u0091\u0093\u0003\u0014\n\u0000\u0092"+
+ "\u0090\u0001\u0000\u0000\u0000\u0092\u0093\u0001\u0000\u0000\u0000\u0093"+
+ "\u001b\u0001\u0000\u0000\u0000\u0094\u0095\u0005\u0011\u0000\u0000\u0095"+
+ "\u0096\u0005\u0006\u0000\u0000\u0096\u0097\u0003\"\u0011\u0000\u0097\u0098"+
+ "\u0005\u0007\u0000\u0000\u0098\u0099\u0003\u0014\n\u0000\u0099\u001d\u0001"+
+ "\u0000\u0000\u0000\u009a\u009c\u0005\u0012\u0000\u0000\u009b\u009d\u0003"+
+ "\"\u0011\u0000\u009c\u009b\u0001\u0000\u0000\u0000\u009c\u009d\u0001\u0000"+
+ "\u0000\u0000\u009d\u009e\u0001\u0000\u0000\u0000\u009e\u009f\u0005\u0004"+
+ "\u0000\u0000\u009f\u001f\u0001\u0000\u0000\u0000\u00a0\u00a4\u0005\u0002"+
+ "\u0000\u0000\u00a1\u00a3\u0003\u0014\n\u0000\u00a2\u00a1\u0001\u0000\u0000"+
+ "\u0000\u00a3\u00a6\u0001\u0000\u0000\u0000\u00a4\u00a2\u0001\u0000\u0000"+
+ "\u0000\u00a4\u00a5\u0001\u0000\u0000\u0000\u00a5\u00a7\u0001\u0000\u0000"+
+ "\u0000\u00a6\u00a4\u0001\u0000\u0000\u0000\u00a7\u00a8\u0005\u0003\u0000"+
+ "\u0000\u00a8!\u0001\u0000\u0000\u0000\u00a9\u00aa\u0006\u0011\uffff\uffff"+
+ "\u0000\u00aa\u00ab\u0005\u001c\u0000\u0000\u00ab\u00b5\u0003\"\u0011\u0005"+
+ "\u00ac\u00ad\u0005 \u0000\u0000\u00ad\u00b5\u0003\"\u0011\u0004\u00ae"+
+ "\u00af\u0005\u0006\u0000\u0000\u00af\u00b0\u0003\"\u0011\u0000\u00b0\u00b1"+
+ "\u0005\u0007\u0000\u0000\u00b1\u00b5\u0001\u0000\u0000\u0000\u00b2\u00b5"+
+ "\u0003$\u0012\u0000\u00b3\u00b5\u0005%\u0000\u0000\u00b4\u00a9\u0001\u0000"+
+ "\u0000\u0000\u00b4\u00ac\u0001\u0000\u0000\u0000\u00b4\u00ae\u0001\u0000"+
+ "\u0000\u0000\u00b4\u00b2\u0001\u0000\u0000\u0000\u00b4\u00b3\u0001\u0000"+
+ "\u0000\u0000\u00b5\u00c1\u0001\u0000\u0000\u0000\u00b6\u00b7\n\b\u0000"+
+ "\u0000\u00b7\u00b8\u0007\u0002\u0000\u0000\u00b8\u00c0\u0003\"\u0011\t"+
+ "\u00b9\u00ba\n\u0007\u0000\u0000\u00ba\u00bb\u0007\u0003\u0000\u0000\u00bb"+
+ "\u00c0\u0003\"\u0011\b\u00bc\u00bd\n\u0006\u0000\u0000\u00bd\u00be\u0007"+
+ "\u0004\u0000\u0000\u00be\u00c0\u0003\"\u0011\u0007\u00bf\u00b6\u0001\u0000"+
+ "\u0000\u0000\u00bf\u00b9\u0001\u0000\u0000\u0000\u00bf\u00bc\u0001\u0000"+
+ "\u0000\u0000\u00c0\u00c3\u0001\u0000\u0000\u0000\u00c1\u00bf\u0001\u0000"+
+ "\u0000\u0000\u00c1\u00c2\u0001\u0000\u0000\u0000\u00c2#\u0001\u0000\u0000"+
+ "\u0000\u00c3\u00c1\u0001\u0000\u0000\u0000\u00c4\u00c8\u0005$\u0000\u0000"+
+ "\u00c5\u00c8\u0003&\u0013\u0000\u00c6\u00c8\u0003(\u0014\u0000\u00c7\u00c4"+
+ "\u0001\u0000\u0000\u0000\u00c7\u00c5\u0001\u0000\u0000\u0000\u00c7\u00c6"+
+ "\u0001\u0000\u0000\u0000\u00c8%\u0001\u0000\u0000\u0000\u00c9\u00ca\u0007"+
+ "\u0005\u0000\u0000\u00ca\'\u0001\u0000\u0000\u0000\u00cb\u00cc\u0005#"+
+ "\u0000\u0000\u00cc\u00cd\t\u0000\u0000\u0000\u00cd\u00ce\u0005#\u0000"+
+ "\u0000\u00ce)\u0001\u0000\u0000\u0000\u0011-6>KR[bl|\u0082\u0092\u009c"+
+ "\u00a4\u00b4\u00bf\u00c1\u00c7";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/parser/generated/SimpleJavaVisitor.java b/src/main/java/parser/generated/SimpleJavaVisitor.java
index 0e5f589..1d10783 100644
--- a/src/main/java/parser/generated/SimpleJavaVisitor.java
+++ b/src/main/java/parser/generated/SimpleJavaVisitor.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/ARB00072/Desktop/DHBW/4. Semester/Compilerbau/Endprojekt/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
@@ -40,6 +40,12 @@ public interface SimpleJavaVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx);
+ /**
+ * Visit a parse tree produced by {@link SimpleJavaParser#constructorDeclaration}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link SimpleJavaParser#parameterList}.
* @param ctx the parse tree
diff --git a/src/main/java/semantic/SemanticAnalyzer.java b/src/main/java/semantic/SemanticAnalyzer.java
index 315a51e..3e9197f 100644
--- a/src/main/java/semantic/SemanticAnalyzer.java
+++ b/src/main/java/semantic/SemanticAnalyzer.java
@@ -2,13 +2,16 @@ package semantic;
import ast.*;
+import ast.member.ConstructorNode;
+import ast.member.FieldNode;
+import ast.member.MemberNode;
import java.util.ArrayList;
import java.util.List;
public class SemanticAnalyzer {
- List usedIdentifier = new ArrayList<>();
+ List usedIdentifier = new ArrayList<>();
public void analyze(ASTNode node) {
if (node == null) return;
@@ -47,7 +50,7 @@ public class SemanticAnalyzer {
}
- public boolean identifierAlreadyUsed(Identifier identifier){
+ public boolean identifierAlreadyUsed(IdentifierNode identifier){
if(usedIdentifier.contains(identifier)){
return true;
} else {