From 43cafcd01f757c7eb033375906368f4271a1bc64 Mon Sep 17 00:00:00 2001
From: Bruder John
Date: Thu, 9 May 2024 14:21:07 +0200
Subject: [PATCH 1/4] added Expression analysis
---
src/main/java/CompilerInput.txt | 8 +-
src/main/java/ast/ExpressionNode.java | 4 +-
src/main/java/semantic/SemanticAnalyzer.java | 81 +++++++++++---------
3 files changed, 46 insertions(+), 47 deletions(-)
diff --git a/src/main/java/CompilerInput.txt b/src/main/java/CompilerInput.txt
index a7d717c..578b848 100644
--- a/src/main/java/CompilerInput.txt
+++ b/src/main/java/CompilerInput.txt
@@ -2,16 +2,10 @@ public class Example {
public int test;
- public static int test(char b){
+ public static int TestMethod(char b){
test = 3;
}
-}
-
-public class Test {
-
- public char test;
-
}
\ No newline at end of file
diff --git a/src/main/java/ast/ExpressionNode.java b/src/main/java/ast/ExpressionNode.java
index 9e6f2a8..689e1c3 100644
--- a/src/main/java/ast/ExpressionNode.java
+++ b/src/main/java/ast/ExpressionNode.java
@@ -2,10 +2,10 @@ package ast;
public class ExpressionNode extends ASTNode {
- int Value;
+ public int value;
public ExpressionNode(int value) {
- this.Value = value;
+ this.value = value;
}
}
diff --git a/src/main/java/semantic/SemanticAnalyzer.java b/src/main/java/semantic/SemanticAnalyzer.java
index 315a51e..48f316e 100644
--- a/src/main/java/semantic/SemanticAnalyzer.java
+++ b/src/main/java/semantic/SemanticAnalyzer.java
@@ -8,51 +8,56 @@ import java.util.List;
public class SemanticAnalyzer {
- List usedIdentifier = new ArrayList<>();
+ public void analyze(ASTNode node) {
+ if (node == null) {
+ return;
+ }
- public void analyze(ASTNode node) {
- if (node == null) return;
+ if (node instanceof ClassNode) {
- if (node instanceof ClassNode) {
+ ClassNode classNode = (ClassNode) node;
+ if (classNode.identifier == null) {
+ System.out.println("Klasse besitzt keinen Identifier");
+ }
- ClassNode classNode = (ClassNode) node;
- if(classNode.identifier == null){
- System.out.println("Klasse besitzt keinen Identifier");
- }
+ List memberNodes = classNode.members;
+ for (MemberNode member : memberNodes) {
+ analyze(member);
+ }
- List memberNodes = classNode.members;
- for (MemberNode member: memberNodes) {
- analyze(member);
- }
+ } else if (node instanceof AssignmentNode) {
+ AssignmentNode assignmentNode = (AssignmentNode) node;
+ System.out.println("Assignment ");
+
+
+
+ analyze(assignmentNode.expression);
+
+ } else if (node instanceof MethodNode) {
+ MethodNode methodNode = (MethodNode) node;
+ System.out.println("Methode: " + methodNode.identifier.getName());
+ List statementNodes = methodNode.statements;
+ for (StatementNode statement : statementNodes) {
+ analyze(statement);
+ }
+
+ } else if (node instanceof ExpressionNode) {
+ ExpressionNode expressionNode = (ExpressionNode) node;
+ System.out.println("Klasse besitzt keinen Expression " + expressionNode.value);
+
+ } else if (node instanceof FieldNode) {
+
+ FieldNode fieldNode = (FieldNode) node;
- }else if (node instanceof ConstructorNode) {
-
- }else if (node instanceof FieldNode) {
-
- FieldNode fieldNode = (FieldNode) node;
- if(identifierAlreadyUsed(fieldNode.identifier)){
- //throw new RuntimeException("Error: Identifier already used");
- System.out.println("Error: Identifier already used");
- }
- usedIdentifier.add(fieldNode.identifier);
-
- }else if (node instanceof ProgramNode) {
- ProgramNode programNode = (ProgramNode) node;
- List classes = programNode.classes;
- for (ClassNode classNode: classes) {
- analyze(classNode);
- }
- }
-
+ } else if (node instanceof ProgramNode) {
+ ProgramNode programNode = (ProgramNode) node;
+ List classes = programNode.classes;
+ for (ClassNode classNode : classes) {
+ analyze(classNode);
+ }
}
- public boolean identifierAlreadyUsed(Identifier identifier){
- if(usedIdentifier.contains(identifier)){
- return true;
- } else {
- return false;
- }
- }
+ }
}
\ No newline at end of file
--
2.34.1
From 0052b5b54789e088568e36803c632eac709b9efb Mon Sep 17 00:00:00 2001
From: Bruder John
Date: Thu, 9 May 2024 19:13:18 +0200
Subject: [PATCH 2/4] Added Int Literal
---
src/main/java/CompilerInput.txt | 6 ++-
src/main/java/ast/IdentifierNode.java | 2 +-
src/main/java/ast/LiteralNode.java | 13 +++++++
.../statement/AssignmentStatementNode.java | 5 ++-
.../VariableDeclarationStatementNode.java | 5 ++-
src/main/java/classFileOutput/Example.class | Bin 108 -> 101 bytes
src/main/java/parser/ASTBuilder.java | 13 +++++++
src/main/java/semantic/SemanticAnalyzer.java | 36 ++++++++----------
8 files changed, 52 insertions(+), 28 deletions(-)
create mode 100644 src/main/java/ast/LiteralNode.java
diff --git a/src/main/java/CompilerInput.txt b/src/main/java/CompilerInput.txt
index 966d475..c85e668 100644
--- a/src/main/java/CompilerInput.txt
+++ b/src/main/java/CompilerInput.txt
@@ -1,6 +1,6 @@
public class Example {
- public int test;
+ public int Example;
public Example(int conInput) {
@@ -8,7 +8,9 @@ public class Example {
public static int test(char b){
- test = 3;
+ char Example;
+ boolean Example;
+ int c;
}
diff --git a/src/main/java/ast/IdentifierNode.java b/src/main/java/ast/IdentifierNode.java
index 3300633..0c220d7 100644
--- a/src/main/java/ast/IdentifierNode.java
+++ b/src/main/java/ast/IdentifierNode.java
@@ -1,6 +1,6 @@
package ast;
-public class IdentifierNode {
+public class IdentifierNode extends ASTNode{
private String name;
diff --git a/src/main/java/ast/LiteralNode.java b/src/main/java/ast/LiteralNode.java
new file mode 100644
index 0000000..14108ad
--- /dev/null
+++ b/src/main/java/ast/LiteralNode.java
@@ -0,0 +1,13 @@
+package ast;
+
+import ast.expression.ExpressionNode;
+
+public class LiteralNode extends ExpressionNode {
+
+ int value;
+
+ public LiteralNode(int value) {
+ this.value = value;
+ }
+
+}
diff --git a/src/main/java/ast/statement/AssignmentStatementNode.java b/src/main/java/ast/statement/AssignmentStatementNode.java
index 97bcd45..2b16143 100644
--- a/src/main/java/ast/statement/AssignmentStatementNode.java
+++ b/src/main/java/ast/statement/AssignmentStatementNode.java
@@ -1,13 +1,14 @@
package ast.statement;
+import ast.IdentifierNode;
import ast.expression.ExpressionNode;
public class AssignmentStatementNode extends StatementNode {
- public String identifier;
+ public IdentifierNode identifier;
public ExpressionNode expression;
public AssignmentStatementNode(String identifier, ExpressionNode expression) {
- this.identifier = identifier;
+ this.identifier = new IdentifierNode(identifier);
this.expression = expression;
}
}
diff --git a/src/main/java/ast/statement/VariableDeclarationStatementNode.java b/src/main/java/ast/statement/VariableDeclarationStatementNode.java
index e7f6e32..7bdc1ae 100644
--- a/src/main/java/ast/statement/VariableDeclarationStatementNode.java
+++ b/src/main/java/ast/statement/VariableDeclarationStatementNode.java
@@ -1,15 +1,16 @@
package ast.statement;
+import ast.IdentifierNode;
import ast.type.TypeNode;
import ast.expression.ExpressionNode;
public class VariableDeclarationStatementNode extends StatementNode {
public TypeNode type;
- public String identifier;
+ public IdentifierNode identifier;
public ExpressionNode expression;
public VariableDeclarationStatementNode(TypeNode type, String identifier, ExpressionNode expression) {
this.type = type;
- this.identifier = identifier;
+ this.identifier = new IdentifierNode(identifier);
this.expression = expression;
}
}
\ No newline at end of file
diff --git a/src/main/java/classFileOutput/Example.class b/src/main/java/classFileOutput/Example.class
index c4a896adb0f253a0ebeaa67c21c610091b4b047a..af810a65d3b0b58d08efeae8610930ab04023686 100644
GIT binary patch
delta 56
xcmc~v {
@Override
@@ -196,4 +197,16 @@ public class ASTBuilder extends SimpleJavaBaseVisitor {
return null; // Return null or throw an exception if no valid expression found
}
+
+ @Override
+ public ASTNode visitLiteral(SimpleJavaParser.LiteralContext ctx) {
+ LiteralContext literalContext = (LiteralContext) ctx;
+ try {
+ int intValue = Integer.parseInt(literalContext.getText());
+ return new LiteralNode(intValue);
+ } catch (NumberFormatException ignored) {}
+
+ return null; // Return null or throw an exception if no valid expression found
+ }
+
}
diff --git a/src/main/java/semantic/SemanticAnalyzer.java b/src/main/java/semantic/SemanticAnalyzer.java
index e9dddd9..cfebcb2 100644
--- a/src/main/java/semantic/SemanticAnalyzer.java
+++ b/src/main/java/semantic/SemanticAnalyzer.java
@@ -2,57 +2,50 @@ package semantic;
import ast.*;
+import ast.expression.ExpressionNode;
import ast.member.ConstructorNode;
import ast.member.FieldNode;
import ast.member.MemberNode;
+import ast.member.MethodNode;
+import ast.statement.AssignmentStatementNode;
+import ast.statement.StatementNode;
import java.util.ArrayList;
import java.util.List;
public class SemanticAnalyzer {
- public void analyze(ASTNode node) {
+ public String analyze(ASTNode node) {
if (node == null) {
- return;
+ return null;
}
if (node instanceof ClassNode) {
-
ClassNode classNode = (ClassNode) node;
- if (classNode.identifier == null) {
- System.out.println("Klasse besitzt keinen Identifier");
- }
List memberNodes = classNode.members;
for (MemberNode member : memberNodes) {
analyze(member);
}
- } else if (node instanceof AssignmentNode) {
- AssignmentNode assignmentNode = (AssignmentNode) node;
- System.out.println("Assignment ");
+ } else if (node instanceof AssignmentStatementNode) {
+ AssignmentStatementNode assignmentStatementNode = (AssignmentStatementNode) node;
-
+ IdentifierNode identifierNode = assignmentStatementNode.identifier;
- analyze(assignmentNode.expression);
+ if(analyze(assignmentStatementNode.expression).equals("int")){
+ System.out.println("INTEGER");
+ }
+ } else if (node instanceof LiteralNode) {
+ return "int";
} else if (node instanceof MethodNode) {
MethodNode methodNode = (MethodNode) node;
- System.out.println("Methode: " + methodNode.identifier.getName());
List statementNodes = methodNode.statements;
for (StatementNode statement : statementNodes) {
analyze(statement);
}
- } else if (node instanceof ExpressionNode) {
- ExpressionNode expressionNode = (ExpressionNode) node;
- System.out.println("Klasse besitzt keinen Expression " + expressionNode.value);
-
- } else if (node instanceof FieldNode) {
-
- FieldNode fieldNode = (FieldNode) node;
-
-
} else if (node instanceof ProgramNode) {
ProgramNode programNode = (ProgramNode) node;
List classes = programNode.classes;
@@ -61,6 +54,7 @@ public class SemanticAnalyzer {
}
}
+ return null;
}
}
\ No newline at end of file
--
2.34.1
From 2bae802cb23e886956594ffbbf9904d492c1b680 Mon Sep 17 00:00:00 2001
From: Bruder John
Date: Thu, 9 May 2024 22:39:26 +0200
Subject: [PATCH 3/4] changed to visitor pattern
---
src/main/java/CompilerInput.txt | 12 +--
src/main/java/Main.java | 15 +---
src/main/java/ast/ASTNode.java | 5 +-
src/main/java/ast/ClassNode.java | 10 ++-
src/main/java/ast/IdentifierNode.java | 10 ++-
src/main/java/ast/ProgramNode.java | 10 ++-
src/main/java/ast/member/FieldNode.java | 13 ++-
src/main/java/ast/member/MethodNode.java | 22 +++--
src/main/java/bytecode/FieldCodeGen.java | 2 +-
src/main/java/classFileOutput/Example.class | Bin 101 -> 111 bytes
src/main/java/semantic/SemanticAnalyzer.java | 83 +++++++++++-------
src/main/java/semantic/SemanticVisitor.java | 65 ++++++++++++++
src/main/java/typechecker/Type.java | 5 ++
.../java/typechecker/TypeCheckResult.java | 21 +++++
src/main/java/typechecker/Visitable.java | 16 ++++
15 files changed, 218 insertions(+), 71 deletions(-)
create mode 100644 src/main/java/semantic/SemanticVisitor.java
create mode 100644 src/main/java/typechecker/Type.java
create mode 100644 src/main/java/typechecker/TypeCheckResult.java
create mode 100644 src/main/java/typechecker/Visitable.java
diff --git a/src/main/java/CompilerInput.txt b/src/main/java/CompilerInput.txt
index c85e668..49da971 100644
--- a/src/main/java/CompilerInput.txt
+++ b/src/main/java/CompilerInput.txt
@@ -1,16 +1,12 @@
public class Example {
- public int Example;
+ public int testVar;
- public Example(int conInput) {
+ public static int testMethod(char b){
- }
+ int a;
+ a = 3;
- public static int test(char b){
-
- char Example;
- boolean Example;
- int c;
}
diff --git a/src/main/java/Main.java b/src/main/java/Main.java
index bcb48c5..e1673c1 100644
--- a/src/main/java/Main.java
+++ b/src/main/java/Main.java
@@ -15,11 +15,8 @@ import java.nio.file.Paths;
public class Main {
public static void main(String[] args) throws Exception {
-
- CharStream codeCharStream = null;
-
try {
- codeCharStream = CharStreams.fromPath(Paths.get("src/main/java/CompilerInput.txt"));
+ CharStream codeCharStream = CharStreams.fromPath(Paths.get("src/main/java/CompilerInput.txt"));
parsefile(codeCharStream);
} catch (IOException e) {
System.err.println("Error reading the file: " + e.getMessage());
@@ -28,7 +25,6 @@ public class Main {
static void parsefile(CharStream codeCharStream){
- // CharStream codeCharStream = CharStreams.fromString("class javaFileInput.Example { } class Example2 { }");
SimpleJavaLexer lexer = new SimpleJavaLexer(codeCharStream);
CommonTokenStream tokens = new CommonTokenStream(lexer);
SimpleJavaParser parser = new SimpleJavaParser(tokens);
@@ -38,14 +34,7 @@ public class Main {
ASTBuilder builder = new ASTBuilder();
ProgramNode ast = (ProgramNode) builder.visit(tree); // build the AST
- // Optionally print or process the AST
- System.out.println("Parsed " + ast.classes.size() + " classes with identifiers/names:");
- for (ClassNode classNode : ast.classes) {
- System.out.println(classNode.identifier.getName());
- }
-
- SemanticAnalyzer semanticAnalyzer = new SemanticAnalyzer();
- semanticAnalyzer.analyze(ast);
+ SemanticAnalyzer.generateTast(ast);
ByteCodeGenerator byteCodeGenerator = new ByteCodeGenerator();
byteCodeGenerator.generateByteCode(ast);
diff --git a/src/main/java/ast/ASTNode.java b/src/main/java/ast/ASTNode.java
index 7836a79..9c5880e 100644
--- a/src/main/java/ast/ASTNode.java
+++ b/src/main/java/ast/ASTNode.java
@@ -1,8 +1,7 @@
package ast;
-import java.util.ArrayList;
-import java.util.List;
+public class ASTNode {
-public abstract class ASTNode { }
+}
diff --git a/src/main/java/ast/ClassNode.java b/src/main/java/ast/ClassNode.java
index 2f27d08..3e8d740 100644
--- a/src/main/java/ast/ClassNode.java
+++ b/src/main/java/ast/ClassNode.java
@@ -7,8 +7,11 @@ import ast.type.EnumAccessTypeNode;
import java.util.ArrayList;
import java.util.List;
+import semantic.SemanticVisitor;
+import typechecker.TypeCheckResult;
+import typechecker.Visitable;
-public class ClassNode extends ASTNode{
+public class ClassNode extends ASTNode implements Visitable {
public IdentifierNode identifier;
public AccessTypeNode accessType;
public String name;
@@ -33,4 +36,9 @@ public class ClassNode extends ASTNode{
members.add(0,constructor);
}
}
+
+ @Override
+ public TypeCheckResult accept(SemanticVisitor visitor) {
+ return visitor.typeCheck(this);
+ }
}
diff --git a/src/main/java/ast/IdentifierNode.java b/src/main/java/ast/IdentifierNode.java
index 0c220d7..992dc6b 100644
--- a/src/main/java/ast/IdentifierNode.java
+++ b/src/main/java/ast/IdentifierNode.java
@@ -1,6 +1,10 @@
package ast;
-public class IdentifierNode extends ASTNode{
+import semantic.SemanticVisitor;
+import typechecker.TypeCheckResult;
+import typechecker.Visitable;
+
+public class IdentifierNode extends ASTNode implements Visitable {
private String name;
@@ -24,4 +28,8 @@ public class IdentifierNode extends ASTNode{
return super.equals(obj);
}
+ @Override
+ public TypeCheckResult accept(SemanticVisitor visitor) {
+ return visitor.typeCheck(this);
+ }
}
diff --git a/src/main/java/ast/ProgramNode.java b/src/main/java/ast/ProgramNode.java
index 1fcc193..3d0af61 100644
--- a/src/main/java/ast/ProgramNode.java
+++ b/src/main/java/ast/ProgramNode.java
@@ -2,11 +2,19 @@ package ast;
import java.util.ArrayList;
import java.util.List;
+import semantic.SemanticVisitor;
+import typechecker.TypeCheckResult;
+import typechecker.Visitable;
-public class ProgramNode extends ASTNode {
+public class ProgramNode extends ASTNode implements Visitable{
public List classes = new ArrayList<>();
public void addClass(ClassNode classNode) {
classes.add(classNode);
}
+
+ @Override
+ public TypeCheckResult accept(SemanticVisitor visitor) {
+ return visitor.typeCheck(this);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/ast/member/FieldNode.java b/src/main/java/ast/member/FieldNode.java
index 53a5335..569cea0 100644
--- a/src/main/java/ast/member/FieldNode.java
+++ b/src/main/java/ast/member/FieldNode.java
@@ -3,16 +3,23 @@ package ast.member;
import ast.IdentifierNode;
import ast.type.AccessTypeNode;
import ast.type.TypeNode;
+import semantic.SemanticVisitor;
+import typechecker.TypeCheckResult;
+import typechecker.Visitable;
-public class FieldNode extends MemberNode {
+public class FieldNode extends MemberNode implements Visitable {
public AccessTypeNode accessTypeNode;
public TypeNode type;
- public IdentifierNode identifier;
+ public String identifier;
public FieldNode(AccessTypeNode accessTypeNode, TypeNode type, String name){
this.accessTypeNode = accessTypeNode;
this.type = type;
- this.identifier = new IdentifierNode(name);
+ this.identifier = name;
}
+ @Override
+ public TypeCheckResult accept(SemanticVisitor visitor) {
+ return visitor.typeCheck(this);
+ }
}
diff --git a/src/main/java/ast/member/MethodNode.java b/src/main/java/ast/member/MethodNode.java
index 4c937cc..2d42cc2 100644
--- a/src/main/java/ast/member/MethodNode.java
+++ b/src/main/java/ast/member/MethodNode.java
@@ -8,29 +8,35 @@ import ast.type.TypeNode;
import java.util.ArrayList;
import java.util.List;
+import semantic.SemanticVisitor;
+import typechecker.TypeCheckResult;
+import typechecker.Visitable;
-public class MethodNode extends MemberNode {
- public IdentifierNode identifier;
+public class MethodNode extends MemberNode implements Visitable {
public AccessTypeNode visibility;
public TypeNode type;
- public String name;
+ public String identifier;
public ParameterListNode parameters;
public List statements = new ArrayList<>();
- public MethodNode(AccessTypeNode visibility, TypeNode type, String name, ParameterListNode parameters,
+ public MethodNode(AccessTypeNode visibility, TypeNode type, String identifier, ParameterListNode parameters,
List statements){
this.visibility = visibility;
- this.identifier = new IdentifierNode(name);
this.type = type;
- this.name = name;
+ this.identifier = identifier;
this.parameters = parameters;
this.statements = statements;
}
- public MethodNode(AccessTypeNode visibility, String name){
+ public MethodNode(AccessTypeNode visibility, String identifier){
this.visibility = visibility;
- this.identifier = new IdentifierNode(name);
+ this.identifier = identifier;
+ }
+
+ @Override
+ public TypeCheckResult accept(SemanticVisitor visitor) {
+ return visitor.typeCheck(this);
}
}
diff --git a/src/main/java/bytecode/FieldCodeGen.java b/src/main/java/bytecode/FieldCodeGen.java
index 76e2921..abbda43 100644
--- a/src/main/java/bytecode/FieldCodeGen.java
+++ b/src/main/java/bytecode/FieldCodeGen.java
@@ -8,6 +8,6 @@ public class FieldCodeGen {
public void generateFieldCode(ClassWriter classWriter, FieldNode fieldNode) {
Mapper mapper = new Mapper();
- FieldVisitor fieldVisitor = classWriter.visitField(mapper.mapAccesTypeToOpcode(fieldNode.accessTypeNode), fieldNode.identifier.getName(), "", null, null);
+ FieldVisitor fieldVisitor = classWriter.visitField(mapper.mapAccesTypeToOpcode(fieldNode.accessTypeNode), fieldNode.identifier, "", null, null);
}
}
diff --git a/src/main/java/classFileOutput/Example.class b/src/main/java/classFileOutput/Example.class
index af810a65d3b0b58d08efeae8610930ab04023686..c0d9270e1638a12598a097c3a813e0adcc1b821b 100644
GIT binary patch
delta 47
ycmYez=Q{Oo*FFXY1``I(iCiYq>?NtiC1Ht0j6fkq1||j;FwMxo&cHFzUkm^#%LzpQ
delta 56
xcmc~# currentFields = new ArrayList<>();
- if (node instanceof ClassNode) {
- ClassNode classNode = (ClassNode) node;
+ public static ASTNode generateTast(ASTNode node) throws RuntimeException {
+ SemanticAnalyzer semanticCheck = new SemanticAnalyzer();
+ ProgramNode programNode = (ProgramNode) node;
+ var result = programNode.accept(semanticCheck);
+ if (result.isValid()) {
+ return node;
+ } else {
+ throw new RuntimeException("errorString ERROR");
+ }
+ }
- List memberNodes = classNode.members;
- for (MemberNode member : memberNodes) {
- analyze(member);
- }
+ @Override
+ public TypeCheckResult typeCheck(ProgramNode node) {
- } else if (node instanceof AssignmentStatementNode) {
- AssignmentStatementNode assignmentStatementNode = (AssignmentStatementNode) node;
+ var valid = true;
- IdentifierNode identifierNode = assignmentStatementNode.identifier;
+ List classes = node.classes;
+ for (ClassNode classNode : classes) {
+ classNode.accept(this);
+ }
+ return new TypeCheckResult(valid, null);
+ }
- if(analyze(assignmentStatementNode.expression).equals("int")){
- System.out.println("INTEGER");
- }
-
- } else if (node instanceof LiteralNode) {
- return "int";
- } else if (node instanceof MethodNode) {
- MethodNode methodNode = (MethodNode) node;
- List statementNodes = methodNode.statements;
- for (StatementNode statement : statementNodes) {
- analyze(statement);
- }
-
- } else if (node instanceof ProgramNode) {
- ProgramNode programNode = (ProgramNode) node;
- List classes = programNode.classes;
- for (ClassNode classNode : classes) {
- analyze(classNode);
+ @Override
+ public TypeCheckResult typeCheck(ClassNode classNode) {
+ List members = classNode.members;
+ for (MemberNode memberNode : members) {
+ if (memberNode instanceof FieldNode fieldNode) {
+ fieldNode.accept(this);
+ } else if (memberNode instanceof MethodNode methodNode) {
+ methodNode.accept(this);
}
}
return null;
}
+ @Override
+ public TypeCheckResult typeCheck(IdentifierNode identifierNode) {
+ return null;
+ }
+
+ @Override
+ public TypeCheckResult typeCheck(MethodNode methodNode) {
+ List statements = methodNode.statements;
+ return null;
+ }
+
+ @Override
+ public TypeCheckResult typeCheck(FieldNode toCheck) {
+ if(currentFields.contains(toCheck.identifier)){
+ throw new RuntimeException(toCheck.identifier + " Is Already Declared");
+ }else {
+ currentFields.add(toCheck.identifier);
+ }
+ return null;
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/semantic/SemanticVisitor.java b/src/main/java/semantic/SemanticVisitor.java
new file mode 100644
index 0000000..445db69
--- /dev/null
+++ b/src/main/java/semantic/SemanticVisitor.java
@@ -0,0 +1,65 @@
+package semantic;
+
+
+import ast.ASTNode;
+import ast.ClassNode;
+import ast.IdentifierNode;
+import ast.ProgramNode;
+import ast.member.FieldNode;
+import ast.member.MethodNode;
+import typechecker.TypeCheckResult;
+
+public interface SemanticVisitor {
+// TypeCheckResult typeCheck(ASTNode toCheck);
+
+ TypeCheckResult typeCheck(ProgramNode toCheck);
+
+ TypeCheckResult typeCheck(ClassNode toCheck);
+
+ TypeCheckResult typeCheck(IdentifierNode toCheck);
+
+ TypeCheckResult typeCheck(MethodNode toCheck);
+
+ TypeCheckResult typeCheck(FieldNode toCheck);
+//
+// TypeCheckResult typeCheck(Assign toCheck);
+//
+// TypeCheckResult typeCheck(MethodParameter toCheck);
+//
+// TypeCheckResult typeCheck(ForStmt forStmt);
+//
+// TypeCheckResult typeCheck(WhileStmt whileStmt);
+//
+// TypeCheckResult typeCheck(ReturnStmt returnStmt);
+//
+// TypeCheckResult typeCheck(LocalVarDecl localVarDecl);
+//
+// TypeCheckResult typeCheck(IfStmt ifStmt);
+//
+// TypeCheckResult typeCheck(Block block);
+//
+// TypeCheckResult typeCheck(NewDecl newDecl);
+//
+// TypeCheckResult typeCheck(MethodCall methodCall);
+//
+// TypeCheckResult typeCheck(Unary unary);
+//
+// TypeCheckResult typeCheck(This aThis);
+//
+// TypeCheckResult typeCheck(Null aNull);
+//
+// TypeCheckResult typeCheck(LocalOrFieldVar localOrFieldVar);
+//
+// TypeCheckResult typeCheck(IntegerExpr integerExpr);
+//
+// TypeCheckResult typeCheck(InstVar instVar);
+//
+// TypeCheckResult typeCheck(CharExpr charExpr);
+//
+// TypeCheckResult typeCheck(BoolExpr boolExpr);
+//
+// TypeCheckResult typeCheck(Binary binary);
+//
+// TypeCheckResult typeCheck(StringExpr instVar);
+
+}
\ No newline at end of file
diff --git a/src/main/java/typechecker/Type.java b/src/main/java/typechecker/Type.java
new file mode 100644
index 0000000..89b1c16
--- /dev/null
+++ b/src/main/java/typechecker/Type.java
@@ -0,0 +1,5 @@
+package typechecker;
+
+public interface Type {
+ boolean equals(Object obj);
+}
\ No newline at end of file
diff --git a/src/main/java/typechecker/TypeCheckResult.java b/src/main/java/typechecker/TypeCheckResult.java
new file mode 100644
index 0000000..9068c0d
--- /dev/null
+++ b/src/main/java/typechecker/TypeCheckResult.java
@@ -0,0 +1,21 @@
+package typechecker;
+
+
+public class TypeCheckResult {
+
+ private boolean valid;
+ private Type type;
+
+ public TypeCheckResult(boolean valid, Type type) {
+ this.valid = valid;
+ this.type = type;
+ }
+
+ public boolean isValid() {
+ return valid;
+ }
+
+ public Type getType() {
+ return type;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/typechecker/Visitable.java b/src/main/java/typechecker/Visitable.java
new file mode 100644
index 0000000..99694b7
--- /dev/null
+++ b/src/main/java/typechecker/Visitable.java
@@ -0,0 +1,16 @@
+package typechecker;
+
+import semantic.SemanticVisitor;
+
+public interface Visitable {
+// default void accept(ProgramCodeVisitor visitor) {
+// }
+//
+// default void accept(ClassCodeVisitor visitor) {
+// }
+//
+// default void accept(MethodCodeVisitor visitor) {
+// }
+
+ TypeCheckResult accept(SemanticVisitor visitor);
+}
--
2.34.1
From e987faae64a0a6007ea96bf1eff984ed141a8f08 Mon Sep 17 00:00:00 2001
From: Bruder John
Date: Fri, 10 May 2024 10:43:09 +0200
Subject: [PATCH 4/4] Added Basic Typecheck for integers
---
.idea/misc.xml | 4 +-
src/main/java/ast/ClassNode.java | 9 +-
src/main/java/ast/IdentifierNode.java | 35 --
src/main/java/ast/LiteralNode.java | 10 +
src/main/java/ast/VarNode.java | 21 +
.../java/ast/expression/ExpressionNode.java | 2 +
src/main/java/ast/member/FieldNode.java | 1 -
src/main/java/ast/member/MethodNode.java | 1 -
.../statement/AssignmentStatementNode.java | 18 +-
.../VariableDeclarationStatementNode.java | 5 +-
src/main/java/bytecode/ClassCodeGen.java | 4 +-
src/main/java/parser/ASTBuilder.java | 19 +-
src/main/java/parser/SimpleJava.g4 | 4 +-
.../java/parser/generated/SimpleJava.interp | 3 +-
.../generated/SimpleJavaBaseListener.java | 14 +-
.../generated/SimpleJavaBaseVisitor.java | 9 +-
.../parser/generated/SimpleJavaLexer.java | 2 +-
.../parser/generated/SimpleJavaListener.java | 12 +-
.../parser/generated/SimpleJavaParser.java | 583 ++++++++++--------
.../parser/generated/SimpleJavaVisitor.java | 8 +-
src/main/java/semantic/SemanticAnalyzer.java | 25 +-
src/main/java/semantic/SemanticVisitor.java | 9 +-
22 files changed, 450 insertions(+), 348 deletions(-)
delete mode 100644 src/main/java/ast/IdentifierNode.java
create mode 100644 src/main/java/ast/VarNode.java
diff --git a/.idea/misc.xml b/.idea/misc.xml
index ccb48ca..bb14756 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/src/main/java/ast/ClassNode.java b/src/main/java/ast/ClassNode.java
index 3e8d740..c57a400 100644
--- a/src/main/java/ast/ClassNode.java
+++ b/src/main/java/ast/ClassNode.java
@@ -12,15 +12,14 @@ import typechecker.TypeCheckResult;
import typechecker.Visitable;
public class ClassNode extends ASTNode implements Visitable {
- public IdentifierNode identifier;
+ public String identifier;
public AccessTypeNode accessType;
- public String name;
public List members = new ArrayList<>();
public boolean hasConstructor = false;
- public ClassNode(AccessTypeNode accessType, String name){
+ public ClassNode(AccessTypeNode accessType, String identifier){
this.accessType = accessType;
- this.name = name;
+ this.identifier = identifier;
}
public void addMember(MemberNode member) {
@@ -32,7 +31,7 @@ public class ClassNode extends ASTNode implements Visitable {
public void ensureConstructor(){
if(!hasConstructor) {
- ConstructorNode constructor = new ConstructorNode(new AccessTypeNode(EnumAccessTypeNode.PUBLIC), name);
+ ConstructorNode constructor = new ConstructorNode(new AccessTypeNode(EnumAccessTypeNode.PUBLIC), identifier);
members.add(0,constructor);
}
}
diff --git a/src/main/java/ast/IdentifierNode.java b/src/main/java/ast/IdentifierNode.java
deleted file mode 100644
index 992dc6b..0000000
--- a/src/main/java/ast/IdentifierNode.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package ast;
-
-import semantic.SemanticVisitor;
-import typechecker.TypeCheckResult;
-import typechecker.Visitable;
-
-public class IdentifierNode extends ASTNode implements Visitable {
-
- private String name;
-
- public IdentifierNode(String name){
- this.name = name;
- }
-
- public String getName(){
- return name;
- }
-
- public boolean equals(Object obj) {
- if(obj instanceof IdentifierNode){
- IdentifierNode identifier = (IdentifierNode) obj;
- if(name.equals(identifier.getName())){
- return true;
- } else {
- return false;
- }
- }
- return super.equals(obj);
- }
-
- @Override
- public TypeCheckResult accept(SemanticVisitor visitor) {
- return visitor.typeCheck(this);
- }
-}
diff --git a/src/main/java/ast/LiteralNode.java b/src/main/java/ast/LiteralNode.java
index 14108ad..8fa060a 100644
--- a/src/main/java/ast/LiteralNode.java
+++ b/src/main/java/ast/LiteralNode.java
@@ -5,9 +5,19 @@ import ast.expression.ExpressionNode;
public class LiteralNode extends ExpressionNode {
int value;
+ private String type;
public LiteralNode(int value) {
this.value = value;
}
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+
}
diff --git a/src/main/java/ast/VarNode.java b/src/main/java/ast/VarNode.java
new file mode 100644
index 0000000..a3ac170
--- /dev/null
+++ b/src/main/java/ast/VarNode.java
@@ -0,0 +1,21 @@
+package ast;
+
+public class VarNode extends ASTNode{
+
+ private String identifier;
+ private String type;
+
+ public VarNode(String type, String identifier){
+ this.type = type;
+ this.identifier = identifier;
+ }
+
+ public String getType(){
+ return type;
+ }
+
+ public String getIdentifier(){
+ return identifier;
+ }
+
+}
diff --git a/src/main/java/ast/expression/ExpressionNode.java b/src/main/java/ast/expression/ExpressionNode.java
index eff9d29..8204bed 100644
--- a/src/main/java/ast/expression/ExpressionNode.java
+++ b/src/main/java/ast/expression/ExpressionNode.java
@@ -4,4 +4,6 @@ import ast.ASTNode;
public class ExpressionNode extends ASTNode {
+
+
}
diff --git a/src/main/java/ast/member/FieldNode.java b/src/main/java/ast/member/FieldNode.java
index 569cea0..cfefdfc 100644
--- a/src/main/java/ast/member/FieldNode.java
+++ b/src/main/java/ast/member/FieldNode.java
@@ -1,6 +1,5 @@
package ast.member;
-import ast.IdentifierNode;
import ast.type.AccessTypeNode;
import ast.type.TypeNode;
import semantic.SemanticVisitor;
diff --git a/src/main/java/ast/member/MethodNode.java b/src/main/java/ast/member/MethodNode.java
index 2d42cc2..122eb5e 100644
--- a/src/main/java/ast/member/MethodNode.java
+++ b/src/main/java/ast/member/MethodNode.java
@@ -1,6 +1,5 @@
package ast.member;
-import ast.IdentifierNode;
import ast.parameter.ParameterListNode;
import ast.statement.StatementNode;
import ast.type.AccessTypeNode;
diff --git a/src/main/java/ast/statement/AssignmentStatementNode.java b/src/main/java/ast/statement/AssignmentStatementNode.java
index 2b16143..b9158e7 100644
--- a/src/main/java/ast/statement/AssignmentStatementNode.java
+++ b/src/main/java/ast/statement/AssignmentStatementNode.java
@@ -1,14 +1,22 @@
package ast.statement;
-import ast.IdentifierNode;
+import ast.VarNode;
import ast.expression.ExpressionNode;
+import semantic.SemanticVisitor;
+import typechecker.TypeCheckResult;
+import typechecker.Visitable;
-public class AssignmentStatementNode extends StatementNode {
- public IdentifierNode identifier;
+public class AssignmentStatementNode extends StatementNode implements Visitable {
+ public VarNode varNode;
public ExpressionNode expression;
- public AssignmentStatementNode(String identifier, ExpressionNode expression) {
- this.identifier = new IdentifierNode(identifier);
+ public AssignmentStatementNode(VarNode varNode, ExpressionNode expression) {
+ this.varNode = varNode;
this.expression = expression;
}
+
+ @Override
+ public TypeCheckResult accept(SemanticVisitor visitor) {
+ return visitor.typeCheck(this);
+ }
}
diff --git a/src/main/java/ast/statement/VariableDeclarationStatementNode.java b/src/main/java/ast/statement/VariableDeclarationStatementNode.java
index 7bdc1ae..e7f6e32 100644
--- a/src/main/java/ast/statement/VariableDeclarationStatementNode.java
+++ b/src/main/java/ast/statement/VariableDeclarationStatementNode.java
@@ -1,16 +1,15 @@
package ast.statement;
-import ast.IdentifierNode;
import ast.type.TypeNode;
import ast.expression.ExpressionNode;
public class VariableDeclarationStatementNode extends StatementNode {
public TypeNode type;
- public IdentifierNode identifier;
+ public String identifier;
public ExpressionNode expression;
public VariableDeclarationStatementNode(TypeNode type, String identifier, ExpressionNode expression) {
this.type = type;
- this.identifier = new IdentifierNode(identifier);
+ this.identifier = identifier;
this.expression = expression;
}
}
\ No newline at end of file
diff --git a/src/main/java/bytecode/ClassCodeGen.java b/src/main/java/bytecode/ClassCodeGen.java
index 1e931c0..3b10586 100644
--- a/src/main/java/bytecode/ClassCodeGen.java
+++ b/src/main/java/bytecode/ClassCodeGen.java
@@ -15,7 +15,7 @@ public class ClassCodeGen {
public void generateClassCode(ClassNode classNode) {
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
Mapper mapper = new Mapper();
- classWriter.visit(Opcodes.V1_8, mapper.mapAccesTypeToOpcode(classNode.accessType), classNode.name, null,
+ classWriter.visit(Opcodes.V1_8, mapper.mapAccesTypeToOpcode(classNode.accessType), classNode.identifier, null,
"java/lang/Object", null);
for (MemberNode memberNode : classNode.members) {
@@ -29,7 +29,7 @@ public class ClassCodeGen {
}
classWriter.visitEnd();
- printIntoClassFile(classWriter.toByteArray(), classNode.identifier.getName());
+ printIntoClassFile(classWriter.toByteArray(), classNode.identifier);
classWriter.visitEnd();
}
diff --git a/src/main/java/parser/ASTBuilder.java b/src/main/java/parser/ASTBuilder.java
index 1596145..87b0238 100644
--- a/src/main/java/parser/ASTBuilder.java
+++ b/src/main/java/parser/ASTBuilder.java
@@ -16,11 +16,9 @@ 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;
-
import java.util.ArrayList;
import java.util.List;
+import parser.generated.*;
import parser.generated.SimpleJavaParser.LiteralContext;
public class ASTBuilder extends SimpleJavaBaseVisitor {
@@ -36,7 +34,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 IdentifierNode(ctx.IDENTIFIER().getText());
+ classNode.identifier = ctx.IDENTIFIER().getText();
for (SimpleJavaParser.MemberDeclarationContext member : ctx.memberDeclaration()) {
classNode.addMember((MemberNode) visit(member));
}
@@ -136,9 +134,14 @@ public class ASTBuilder extends SimpleJavaBaseVisitor {
@Override
public ASTNode visitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx) {
- String identifier = ctx.IDENTIFIER().getText();
+ VarNode varNode = (VarNode) visit(ctx.var());
ExpressionNode expression = (ExpressionNode) visit(ctx.expression());
- return new AssignmentStatementNode(identifier, expression);
+ return new AssignmentStatementNode(varNode, expression);
+ }
+
+ @Override
+ public ASTNode visitVar(SimpleJavaParser.VarContext ctx) {
+ return new VarNode("int", ctx.getText());
}
@Override
@@ -203,7 +206,9 @@ public class ASTBuilder extends SimpleJavaBaseVisitor {
LiteralContext literalContext = (LiteralContext) ctx;
try {
int intValue = Integer.parseInt(literalContext.getText());
- return new LiteralNode(intValue);
+ LiteralNode literalNode = new LiteralNode(intValue);
+ literalNode.setType("int");
+ return literalNode;
} catch (NumberFormatException ignored) {}
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 3de3979..7d09aba 100644
--- a/src/main/java/parser/SimpleJava.g4
+++ b/src/main/java/parser/SimpleJava.g4
@@ -29,7 +29,9 @@ statement
variableDeclarationStatement : type IDENTIFIER ('=' expression)? ';' ;
-assignmentStatement : IDENTIFIER '=' expression ';' ;
+assignmentStatement : var '=' expression ';' ;
+
+var: IDENTIFIER;
ifStatement : 'if' '(' expression ')' statement ('else' statement)? ;
diff --git a/src/main/java/parser/generated/SimpleJava.interp b/src/main/java/parser/generated/SimpleJava.interp
index 00547cb..c3cff60 100644
--- a/src/main/java/parser/generated/SimpleJava.interp
+++ b/src/main/java/parser/generated/SimpleJava.interp
@@ -94,6 +94,7 @@ accessType
statement
variableDeclarationStatement
assignmentStatement
+var
ifStatement
whileStatement
returnStatement
@@ -105,4 +106,4 @@ charLiteral
atn:
-[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
+[4, 1, 38, 212, 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, 2, 21, 7, 21, 1, 0, 4, 0, 46, 8, 0, 11, 0, 12, 0, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 55, 8, 1, 10, 1, 12, 1, 58, 9, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 3, 2, 65, 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, 78, 8, 4, 1, 4, 1, 4, 1, 4, 5, 4, 83, 8, 4, 10, 4, 12, 4, 86, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 94, 8, 5, 1, 5, 1, 5, 1, 5, 5, 5, 99, 8, 5, 10, 5, 12, 5, 102, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 5, 6, 109, 8, 6, 10, 6, 12, 6, 112, 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, 127, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 133, 8, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 151, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 161, 8, 16, 1, 16, 1, 16, 1, 17, 1, 17, 5, 17, 167, 8, 17, 10, 17, 12, 17, 170, 9, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 185, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 196, 8, 18, 10, 18, 12, 18, 199, 9, 18, 1, 19, 1, 19, 1, 19, 3, 19, 204, 8, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 0, 1, 36, 22, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 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, 216, 0, 45, 1, 0, 0, 0, 2, 49, 1, 0, 0, 0, 4, 64, 1, 0, 0, 0, 6, 66, 1, 0, 0, 0, 8, 71, 1, 0, 0, 0, 10, 89, 1, 0, 0, 0, 12, 105, 1, 0, 0, 0, 14, 113, 1, 0, 0, 0, 16, 116, 1, 0, 0, 0, 18, 118, 1, 0, 0, 0, 20, 126, 1, 0, 0, 0, 22, 128, 1, 0, 0, 0, 24, 136, 1, 0, 0, 0, 26, 141, 1, 0, 0, 0, 28, 143, 1, 0, 0, 0, 30, 152, 1, 0, 0, 0, 32, 158, 1, 0, 0, 0, 34, 164, 1, 0, 0, 0, 36, 184, 1, 0, 0, 0, 38, 203, 1, 0, 0, 0, 40, 205, 1, 0, 0, 0, 42, 207, 1, 0, 0, 0, 44, 46, 3, 2, 1, 0, 45, 44, 1, 0, 0, 0, 46, 47, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 47, 48, 1, 0, 0, 0, 48, 1, 1, 0, 0, 0, 49, 50, 3, 18, 9, 0, 50, 51, 5, 1, 0, 0, 51, 52, 5, 37, 0, 0, 52, 56, 5, 2, 0, 0, 53, 55, 3, 4, 2, 0, 54, 53, 1, 0, 0, 0, 55, 58, 1, 0, 0, 0, 56, 54, 1, 0, 0, 0, 56, 57, 1, 0, 0, 0, 57, 59, 1, 0, 0, 0, 58, 56, 1, 0, 0, 0, 59, 60, 5, 3, 0, 0, 60, 3, 1, 0, 0, 0, 61, 65, 3, 6, 3, 0, 62, 65, 3, 8, 4, 0, 63, 65, 3, 10, 5, 0, 64, 61, 1, 0, 0, 0, 64, 62, 1, 0, 0, 0, 64, 63, 1, 0, 0, 0, 65, 5, 1, 0, 0, 0, 66, 67, 3, 18, 9, 0, 67, 68, 3, 16, 8, 0, 68, 69, 5, 37, 0, 0, 69, 70, 5, 4, 0, 0, 70, 7, 1, 0, 0, 0, 71, 72, 3, 18, 9, 0, 72, 73, 5, 5, 0, 0, 73, 74, 3, 16, 8, 0, 74, 75, 5, 37, 0, 0, 75, 77, 5, 6, 0, 0, 76, 78, 3, 12, 6, 0, 77, 76, 1, 0, 0, 0, 77, 78, 1, 0, 0, 0, 78, 79, 1, 0, 0, 0, 79, 80, 5, 7, 0, 0, 80, 84, 5, 2, 0, 0, 81, 83, 3, 20, 10, 0, 82, 81, 1, 0, 0, 0, 83, 86, 1, 0, 0, 0, 84, 82, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 87, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 87, 88, 5, 3, 0, 0, 88, 9, 1, 0, 0, 0, 89, 90, 3, 18, 9, 0, 90, 91, 5, 37, 0, 0, 91, 93, 5, 6, 0, 0, 92, 94, 3, 12, 6, 0, 93, 92, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 96, 5, 7, 0, 0, 96, 100, 5, 2, 0, 0, 97, 99, 3, 20, 10, 0, 98, 97, 1, 0, 0, 0, 99, 102, 1, 0, 0, 0, 100, 98, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 103, 1, 0, 0, 0, 102, 100, 1, 0, 0, 0, 103, 104, 5, 3, 0, 0, 104, 11, 1, 0, 0, 0, 105, 110, 3, 14, 7, 0, 106, 107, 5, 8, 0, 0, 107, 109, 3, 14, 7, 0, 108, 106, 1, 0, 0, 0, 109, 112, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 13, 1, 0, 0, 0, 112, 110, 1, 0, 0, 0, 113, 114, 3, 16, 8, 0, 114, 115, 5, 37, 0, 0, 115, 15, 1, 0, 0, 0, 116, 117, 7, 0, 0, 0, 117, 17, 1, 0, 0, 0, 118, 119, 7, 1, 0, 0, 119, 19, 1, 0, 0, 0, 120, 127, 3, 22, 11, 0, 121, 127, 3, 24, 12, 0, 122, 127, 3, 28, 14, 0, 123, 127, 3, 30, 15, 0, 124, 127, 3, 32, 16, 0, 125, 127, 3, 34, 17, 0, 126, 120, 1, 0, 0, 0, 126, 121, 1, 0, 0, 0, 126, 122, 1, 0, 0, 0, 126, 123, 1, 0, 0, 0, 126, 124, 1, 0, 0, 0, 126, 125, 1, 0, 0, 0, 127, 21, 1, 0, 0, 0, 128, 129, 3, 16, 8, 0, 129, 132, 5, 37, 0, 0, 130, 131, 5, 14, 0, 0, 131, 133, 3, 36, 18, 0, 132, 130, 1, 0, 0, 0, 132, 133, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 135, 5, 4, 0, 0, 135, 23, 1, 0, 0, 0, 136, 137, 3, 26, 13, 0, 137, 138, 5, 14, 0, 0, 138, 139, 3, 36, 18, 0, 139, 140, 5, 4, 0, 0, 140, 25, 1, 0, 0, 0, 141, 142, 5, 37, 0, 0, 142, 27, 1, 0, 0, 0, 143, 144, 5, 15, 0, 0, 144, 145, 5, 6, 0, 0, 145, 146, 3, 36, 18, 0, 146, 147, 5, 7, 0, 0, 147, 150, 3, 20, 10, 0, 148, 149, 5, 16, 0, 0, 149, 151, 3, 20, 10, 0, 150, 148, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 29, 1, 0, 0, 0, 152, 153, 5, 17, 0, 0, 153, 154, 5, 6, 0, 0, 154, 155, 3, 36, 18, 0, 155, 156, 5, 7, 0, 0, 156, 157, 3, 20, 10, 0, 157, 31, 1, 0, 0, 0, 158, 160, 5, 18, 0, 0, 159, 161, 3, 36, 18, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 163, 5, 4, 0, 0, 163, 33, 1, 0, 0, 0, 164, 168, 5, 2, 0, 0, 165, 167, 3, 20, 10, 0, 166, 165, 1, 0, 0, 0, 167, 170, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 171, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 171, 172, 5, 3, 0, 0, 172, 35, 1, 0, 0, 0, 173, 174, 6, 18, -1, 0, 174, 175, 5, 28, 0, 0, 175, 185, 3, 36, 18, 5, 176, 177, 5, 32, 0, 0, 177, 185, 3, 36, 18, 4, 178, 179, 5, 6, 0, 0, 179, 180, 3, 36, 18, 0, 180, 181, 5, 7, 0, 0, 181, 185, 1, 0, 0, 0, 182, 185, 3, 38, 19, 0, 183, 185, 5, 37, 0, 0, 184, 173, 1, 0, 0, 0, 184, 176, 1, 0, 0, 0, 184, 178, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 184, 183, 1, 0, 0, 0, 185, 197, 1, 0, 0, 0, 186, 187, 10, 8, 0, 0, 187, 188, 7, 2, 0, 0, 188, 196, 3, 36, 18, 9, 189, 190, 10, 7, 0, 0, 190, 191, 7, 3, 0, 0, 191, 196, 3, 36, 18, 8, 192, 193, 10, 6, 0, 0, 193, 194, 7, 4, 0, 0, 194, 196, 3, 36, 18, 7, 195, 186, 1, 0, 0, 0, 195, 189, 1, 0, 0, 0, 195, 192, 1, 0, 0, 0, 196, 199, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 37, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 200, 204, 5, 36, 0, 0, 201, 204, 3, 40, 20, 0, 202, 204, 3, 42, 21, 0, 203, 200, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 203, 202, 1, 0, 0, 0, 204, 39, 1, 0, 0, 0, 205, 206, 7, 5, 0, 0, 206, 41, 1, 0, 0, 0, 207, 208, 5, 35, 0, 0, 208, 209, 9, 0, 0, 0, 209, 210, 5, 35, 0, 0, 210, 43, 1, 0, 0, 0, 17, 47, 56, 64, 77, 84, 93, 100, 110, 126, 132, 150, 160, 168, 184, 195, 197, 203]
\ 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 d4d6ae5..342f385 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/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.ParserRuleContext;
@@ -168,6 +168,18 @@ public class SimpleJavaBaseListener implements SimpleJavaListener {
* The default implementation does nothing.
*/
@Override public void exitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterVar(SimpleJavaParser.VarContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitVar(SimpleJavaParser.VarContext ctx) { }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/parser/generated/SimpleJavaBaseVisitor.java b/src/main/java/parser/generated/SimpleJavaBaseVisitor.java
index 5e96c5e..4feb7ea 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/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
@@ -103,6 +103,13 @@ public class SimpleJavaBaseVisitor extends AbstractParseTreeVisitor implem
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitVar(SimpleJavaParser.VarContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/parser/generated/SimpleJavaLexer.java b/src/main/java/parser/generated/SimpleJavaLexer.java
index d0cafe6..979b0a4 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/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/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 3223932..6debbf6 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/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.tree.ParseTreeListener;
@@ -137,6 +137,16 @@ public interface SimpleJavaListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx);
+ /**
+ * Enter a parse tree produced by {@link SimpleJavaParser#var}.
+ * @param ctx the parse tree
+ */
+ void enterVar(SimpleJavaParser.VarContext ctx);
+ /**
+ * Exit a parse tree produced by {@link SimpleJavaParser#var}.
+ * @param ctx the parse tree
+ */
+ void exitVar(SimpleJavaParser.VarContext ctx);
/**
* Enter a parse tree produced by {@link SimpleJavaParser#ifStatement}.
* @param ctx the parse tree
diff --git a/src/main/java/parser/generated/SimpleJavaParser.java b/src/main/java/parser/generated/SimpleJavaParser.java
index cfa95de..5b14132 100644
--- a/src/main/java/parser/generated/SimpleJavaParser.java
+++ b/src/main/java/parser/generated/SimpleJavaParser.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/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;
@@ -28,15 +28,15 @@ public class SimpleJavaParser extends Parser {
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;
+ RULE_var = 13, RULE_ifStatement = 14, RULE_whileStatement = 15, RULE_returnStatement = 16,
+ RULE_block = 17, RULE_expression = 18, RULE_literal = 19, RULE_booleanLiteral = 20,
+ RULE_charLiteral = 21;
private static String[] makeRuleNames() {
return new String[] {
"program", "classDeclaration", "memberDeclaration", "fieldDeclaration",
"methodDeclaration", "constructorDeclaration", "parameterList", "parameter",
"type", "accessType", "statement", "variableDeclarationStatement", "assignmentStatement",
- "ifStatement", "whileStatement", "returnStatement", "block", "expression",
+ "var", "ifStatement", "whileStatement", "returnStatement", "block", "expression",
"literal", "booleanLiteral", "charLiteral"
};
}
@@ -145,17 +145,17 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(43);
+ setState(45);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(42);
+ setState(44);
classDeclaration();
}
}
- setState(45);
+ setState(47);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==T__11 || _la==T__12 );
@@ -210,29 +210,29 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(47);
- accessType();
- setState(48);
- match(T__0);
setState(49);
- match(IDENTIFIER);
+ accessType();
setState(50);
+ match(T__0);
+ setState(51);
+ match(IDENTIFIER);
+ setState(52);
match(T__1);
- setState(54);
+ setState(56);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__11 || _la==T__12) {
{
{
- setState(51);
+ setState(53);
memberDeclaration();
}
}
- setState(56);
+ setState(58);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(57);
+ setState(59);
match(T__2);
}
}
@@ -281,27 +281,27 @@ public class SimpleJavaParser extends Parser {
MemberDeclarationContext _localctx = new MemberDeclarationContext(_ctx, getState());
enterRule(_localctx, 4, RULE_memberDeclaration);
try {
- setState(62);
+ setState(64);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(59);
+ setState(61);
fieldDeclaration();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(60);
+ setState(62);
methodDeclaration();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(61);
+ setState(63);
constructorDeclaration();
}
break;
@@ -352,13 +352,13 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(64);
- accessType();
- setState(65);
- type();
setState(66);
- match(IDENTIFIER);
+ accessType();
setState(67);
+ type();
+ setState(68);
+ match(IDENTIFIER);
+ setState(69);
match(T__3);
}
}
@@ -417,45 +417,45 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(69);
- accessType();
- setState(70);
- match(T__4);
setState(71);
- type();
+ accessType();
setState(72);
- match(IDENTIFIER);
+ match(T__4);
setState(73);
- match(T__5);
+ type();
+ setState(74);
+ match(IDENTIFIER);
setState(75);
+ match(T__5);
+ setState(77);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3584L) != 0)) {
{
- setState(74);
+ setState(76);
parameterList();
}
}
- setState(77);
+ setState(79);
match(T__6);
- setState(78);
+ setState(80);
match(T__1);
- setState(82);
+ setState(84);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 137439383044L) != 0)) {
{
{
- setState(79);
+ setState(81);
statement();
}
}
- setState(84);
+ setState(86);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(85);
+ setState(87);
match(T__2);
}
}
@@ -511,41 +511,41 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(87);
- accessType();
- setState(88);
- match(IDENTIFIER);
setState(89);
- match(T__5);
+ accessType();
+ setState(90);
+ match(IDENTIFIER);
setState(91);
+ match(T__5);
+ setState(93);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3584L) != 0)) {
{
- setState(90);
+ setState(92);
parameterList();
}
}
- setState(93);
+ setState(95);
match(T__6);
- setState(94);
+ setState(96);
match(T__1);
- setState(98);
+ setState(100);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 137439383044L) != 0)) {
{
{
- setState(95);
+ setState(97);
statement();
}
}
- setState(100);
+ setState(102);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(101);
+ setState(103);
match(T__2);
}
}
@@ -594,21 +594,21 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(103);
+ setState(105);
parameter();
- setState(108);
+ setState(110);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__7) {
{
{
- setState(104);
+ setState(106);
match(T__7);
- setState(105);
+ setState(107);
parameter();
}
}
- setState(110);
+ setState(112);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -656,9 +656,9 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(111);
+ setState(113);
type();
- setState(112);
+ setState(114);
match(IDENTIFIER);
}
}
@@ -701,7 +701,7 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(114);
+ setState(116);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 3584L) != 0)) ) {
_errHandler.recoverInline(this);
@@ -752,7 +752,7 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(116);
+ setState(118);
_la = _input.LA(1);
if ( !(_la==T__11 || _la==T__12) ) {
_errHandler.recoverInline(this);
@@ -818,7 +818,7 @@ public class SimpleJavaParser extends Parser {
StatementContext _localctx = new StatementContext(_ctx, getState());
enterRule(_localctx, 20, RULE_statement);
try {
- setState(124);
+ setState(126);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__8:
@@ -826,42 +826,42 @@ public class SimpleJavaParser extends Parser {
case T__10:
enterOuterAlt(_localctx, 1);
{
- setState(118);
+ setState(120);
variableDeclarationStatement();
}
break;
case IDENTIFIER:
enterOuterAlt(_localctx, 2);
{
- setState(119);
+ setState(121);
assignmentStatement();
}
break;
case T__14:
enterOuterAlt(_localctx, 3);
{
- setState(120);
+ setState(122);
ifStatement();
}
break;
case T__16:
enterOuterAlt(_localctx, 4);
{
- setState(121);
+ setState(123);
whileStatement();
}
break;
case T__17:
enterOuterAlt(_localctx, 5);
{
- setState(122);
+ setState(124);
returnStatement();
}
break;
case T__1:
enterOuterAlt(_localctx, 6);
{
- setState(123);
+ setState(125);
block();
}
break;
@@ -915,23 +915,23 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(126);
+ setState(128);
type();
- setState(127);
+ setState(129);
match(IDENTIFIER);
- setState(130);
+ setState(132);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(128);
+ setState(130);
match(T__13);
- setState(129);
+ setState(131);
expression(0);
}
}
- setState(132);
+ setState(134);
match(T__3);
}
}
@@ -948,7 +948,9 @@ public class SimpleJavaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class AssignmentStatementContext extends ParserRuleContext {
- public TerminalNode IDENTIFIER() { return getToken(SimpleJavaParser.IDENTIFIER, 0); }
+ public VarContext var() {
+ return getRuleContext(VarContext.class,0);
+ }
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
@@ -977,13 +979,13 @@ public class SimpleJavaParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(134);
- match(IDENTIFIER);
- setState(135);
- match(T__13);
setState(136);
- expression(0);
+ var();
setState(137);
+ match(T__13);
+ setState(138);
+ expression(0);
+ setState(139);
match(T__3);
}
}
@@ -998,6 +1000,49 @@ public class SimpleJavaParser extends Parser {
return _localctx;
}
+ @SuppressWarnings("CheckReturnValue")
+ public static class VarContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(SimpleJavaParser.IDENTIFIER, 0); }
+ public VarContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_var; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof SimpleJavaListener ) ((SimpleJavaListener)listener).enterVar(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof SimpleJavaListener ) ((SimpleJavaListener)listener).exitVar(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof SimpleJavaVisitor ) return ((SimpleJavaVisitor extends T>)visitor).visitVar(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final VarContext var() throws RecognitionException {
+ VarContext _localctx = new VarContext(_ctx, getState());
+ enterRule(_localctx, 26, RULE_var);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(141);
+ match(IDENTIFIER);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
@SuppressWarnings("CheckReturnValue")
public static class IfStatementContext extends ParserRuleContext {
public ExpressionContext expression() {
@@ -1030,28 +1075,28 @@ public class SimpleJavaParser extends Parser {
public final IfStatementContext ifStatement() throws RecognitionException {
IfStatementContext _localctx = new IfStatementContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_ifStatement);
+ enterRule(_localctx, 28, RULE_ifStatement);
try {
enterOuterAlt(_localctx, 1);
{
- setState(139);
- match(T__14);
- setState(140);
- match(T__5);
- setState(141);
- expression(0);
- setState(142);
- match(T__6);
setState(143);
- statement();
+ match(T__14);
+ setState(144);
+ match(T__5);
+ setState(145);
+ expression(0);
setState(146);
+ match(T__6);
+ setState(147);
+ statement();
+ setState(150);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
case 1:
{
- setState(144);
+ setState(148);
match(T__15);
- setState(145);
+ setState(149);
statement();
}
break;
@@ -1098,19 +1143,19 @@ public class SimpleJavaParser extends Parser {
public final WhileStatementContext whileStatement() throws RecognitionException {
WhileStatementContext _localctx = new WhileStatementContext(_ctx, getState());
- enterRule(_localctx, 28, RULE_whileStatement);
+ enterRule(_localctx, 30, RULE_whileStatement);
try {
enterOuterAlt(_localctx, 1);
{
- setState(148);
- match(T__16);
- setState(149);
- match(T__5);
- setState(150);
- expression(0);
- setState(151);
- match(T__6);
setState(152);
+ match(T__16);
+ setState(153);
+ match(T__5);
+ setState(154);
+ expression(0);
+ setState(155);
+ match(T__6);
+ setState(156);
statement();
}
}
@@ -1151,24 +1196,24 @@ public class SimpleJavaParser extends Parser {
public final ReturnStatementContext returnStatement() throws RecognitionException {
ReturnStatementContext _localctx = new ReturnStatementContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_returnStatement);
+ enterRule(_localctx, 32, RULE_returnStatement);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(154);
+ setState(158);
match(T__17);
- setState(156);
+ setState(160);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 270851375168L) != 0)) {
{
- setState(155);
+ setState(159);
expression(0);
}
}
- setState(158);
+ setState(162);
match(T__3);
}
}
@@ -1212,28 +1257,28 @@ public class SimpleJavaParser extends Parser {
public final BlockContext block() throws RecognitionException {
BlockContext _localctx = new BlockContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_block);
+ enterRule(_localctx, 34, RULE_block);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(160);
- match(T__1);
setState(164);
+ match(T__1);
+ setState(168);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 137439383044L) != 0)) {
{
{
- setState(161);
+ setState(165);
statement();
}
}
- setState(166);
+ setState(170);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(167);
+ setState(171);
match(T__2);
}
}
@@ -1288,39 +1333,39 @@ public class SimpleJavaParser extends Parser {
int _parentState = getState();
ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
ExpressionContext _prevctx = _localctx;
- int _startState = 34;
- enterRecursionRule(_localctx, 34, RULE_expression, _p);
+ int _startState = 36;
+ enterRecursionRule(_localctx, 36, RULE_expression, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(180);
+ setState(184);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__27:
{
- setState(170);
+ setState(174);
match(T__27);
- setState(171);
+ setState(175);
expression(5);
}
break;
case T__31:
{
- setState(172);
+ setState(176);
match(T__31);
- setState(173);
+ setState(177);
expression(4);
}
break;
case T__5:
{
- setState(174);
+ setState(178);
match(T__5);
- setState(175);
+ setState(179);
expression(0);
- setState(176);
+ setState(180);
match(T__6);
}
break;
@@ -1329,13 +1374,13 @@ public class SimpleJavaParser extends Parser {
case T__34:
case INTEGERLITERAL:
{
- setState(178);
+ setState(182);
literal();
}
break;
case IDENTIFIER:
{
- setState(179);
+ setState(183);
match(IDENTIFIER);
}
break;
@@ -1343,7 +1388,7 @@ public class SimpleJavaParser extends Parser {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(193);
+ setState(197);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,15,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -1351,16 +1396,16 @@ public class SimpleJavaParser extends Parser {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(191);
+ setState(195);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
case 1:
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(182);
+ setState(186);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(183);
+ setState(187);
_la = _input.LA(1);
if ( !(_la==T__18 || _la==T__19) ) {
_errHandler.recoverInline(this);
@@ -1370,7 +1415,7 @@ public class SimpleJavaParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(184);
+ setState(188);
expression(9);
}
break;
@@ -1378,9 +1423,9 @@ public class SimpleJavaParser extends Parser {
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(185);
+ setState(189);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(186);
+ setState(190);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 132120576L) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1390,7 +1435,7 @@ public class SimpleJavaParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(187);
+ setState(191);
expression(8);
}
break;
@@ -1398,9 +1443,9 @@ public class SimpleJavaParser extends Parser {
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(188);
+ setState(192);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(189);
+ setState(193);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 4160749568L) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1410,14 +1455,14 @@ public class SimpleJavaParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(190);
+ setState(194);
expression(7);
}
break;
}
}
}
- setState(195);
+ setState(199);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,15,_ctx);
}
@@ -1464,15 +1509,15 @@ public class SimpleJavaParser extends Parser {
public final LiteralContext literal() throws RecognitionException {
LiteralContext _localctx = new LiteralContext(_ctx, getState());
- enterRule(_localctx, 36, RULE_literal);
+ enterRule(_localctx, 38, RULE_literal);
try {
- setState(199);
+ setState(203);
_errHandler.sync(this);
switch (_input.LA(1)) {
case INTEGERLITERAL:
enterOuterAlt(_localctx, 1);
{
- setState(196);
+ setState(200);
match(INTEGERLITERAL);
}
break;
@@ -1480,14 +1525,14 @@ public class SimpleJavaParser extends Parser {
case T__33:
enterOuterAlt(_localctx, 2);
{
- setState(197);
+ setState(201);
booleanLiteral();
}
break;
case T__34:
enterOuterAlt(_localctx, 3);
{
- setState(198);
+ setState(202);
charLiteral();
}
break;
@@ -1529,12 +1574,12 @@ public class SimpleJavaParser extends Parser {
public final BooleanLiteralContext booleanLiteral() throws RecognitionException {
BooleanLiteralContext _localctx = new BooleanLiteralContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_booleanLiteral);
+ enterRule(_localctx, 40, RULE_booleanLiteral);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(201);
+ setState(205);
_la = _input.LA(1);
if ( !(_la==T__32 || _la==T__33) ) {
_errHandler.recoverInline(this);
@@ -1580,15 +1625,15 @@ public class SimpleJavaParser extends Parser {
public final CharLiteralContext charLiteral() throws RecognitionException {
CharLiteralContext _localctx = new CharLiteralContext(_ctx, getState());
- enterRule(_localctx, 40, RULE_charLiteral);
+ enterRule(_localctx, 42, RULE_charLiteral);
try {
enterOuterAlt(_localctx, 1);
{
- setState(203);
+ setState(207);
match(T__34);
- setState(204);
+ setState(208);
matchWildcard();
- setState(205);
+ setState(209);
match(T__34);
}
}
@@ -1605,7 +1650,7 @@ public class SimpleJavaParser extends Parser {
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
- case 17:
+ case 18:
return expression_sempred((ExpressionContext)_localctx, predIndex);
}
return true;
@@ -1623,132 +1668,134 @@ public class SimpleJavaParser extends Parser {
}
public static final String _serializedATN =
- "\u0004\u0001&\u00d0\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
+ "\u0004\u0001&\u00d4\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\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"+
+ "\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+
+ "\u0001\u0000\u0004\u0000.\b\u0000\u000b\u0000\f\u0000/\u0001\u0001\u0001"+
+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u00017\b\u0001\n\u0001"+
+ "\f\u0001:\t\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+
+ "\u0002\u0003\u0002A\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\u0004N\b\u0004\u0001\u0004\u0001\u0004\u0001"+
+ "\u0004\u0005\u0004S\b\u0004\n\u0004\f\u0004V\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\u0005c\b\u0005\n\u0005"+
+ "\f\u0005f\t\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001"+
+ "\u0006\u0005\u0006m\b\u0006\n\u0006\f\u0006p\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\u007f\b\n\u0001\u000b\u0001\u000b\u0001"+
+ "\u000b\u0001\u000b\u0003\u000b\u0085\b\u000b\u0001\u000b\u0001\u000b\u0001"+
+ "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\u000e\u0001\u000e"+
+ "\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0003\u000e"+
+ "\u0097\b\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+
+ "\u0001\u000f\u0001\u0010\u0001\u0010\u0003\u0010\u00a1\b\u0010\u0001\u0010"+
+ "\u0001\u0010\u0001\u0011\u0001\u0011\u0005\u0011\u00a7\b\u0011\n\u0011"+
+ "\f\u0011\u00aa\t\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012"+
+ "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+
+ "\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u00b9\b\u0012\u0001\u0012"+
+ "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+
+ "\u0001\u0012\u0001\u0012\u0005\u0012\u00c4\b\u0012\n\u0012\f\u0012\u00c7"+
+ "\t\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0003\u0013\u00cc\b\u0013"+
+ "\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015"+
+ "\u0001\u0015\u0000\u0001$\u0016\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";
+ "\u0001\u0000\u001b\u001f\u0001\u0000!\"\u00d8\u0000-\u0001\u0000\u0000"+
+ "\u0000\u00021\u0001\u0000\u0000\u0000\u0004@\u0001\u0000\u0000\u0000\u0006"+
+ "B\u0001\u0000\u0000\u0000\bG\u0001\u0000\u0000\u0000\nY\u0001\u0000\u0000"+
+ "\u0000\fi\u0001\u0000\u0000\u0000\u000eq\u0001\u0000\u0000\u0000\u0010"+
+ "t\u0001\u0000\u0000\u0000\u0012v\u0001\u0000\u0000\u0000\u0014~\u0001"+
+ "\u0000\u0000\u0000\u0016\u0080\u0001\u0000\u0000\u0000\u0018\u0088\u0001"+
+ "\u0000\u0000\u0000\u001a\u008d\u0001\u0000\u0000\u0000\u001c\u008f\u0001"+
+ "\u0000\u0000\u0000\u001e\u0098\u0001\u0000\u0000\u0000 \u009e\u0001\u0000"+
+ "\u0000\u0000\"\u00a4\u0001\u0000\u0000\u0000$\u00b8\u0001\u0000\u0000"+
+ "\u0000&\u00cb\u0001\u0000\u0000\u0000(\u00cd\u0001\u0000\u0000\u0000*"+
+ "\u00cf\u0001\u0000\u0000\u0000,.\u0003\u0002\u0001\u0000-,\u0001\u0000"+
+ "\u0000\u0000./\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000\u0000/0\u0001"+
+ "\u0000\u0000\u00000\u0001\u0001\u0000\u0000\u000012\u0003\u0012\t\u0000"+
+ "23\u0005\u0001\u0000\u000034\u0005%\u0000\u000048\u0005\u0002\u0000\u0000"+
+ "57\u0003\u0004\u0002\u000065\u0001\u0000\u0000\u00007:\u0001\u0000\u0000"+
+ "\u000086\u0001\u0000\u0000\u000089\u0001\u0000\u0000\u00009;\u0001\u0000"+
+ "\u0000\u0000:8\u0001\u0000\u0000\u0000;<\u0005\u0003\u0000\u0000<\u0003"+
+ "\u0001\u0000\u0000\u0000=A\u0003\u0006\u0003\u0000>A\u0003\b\u0004\u0000"+
+ "?A\u0003\n\u0005\u0000@=\u0001\u0000\u0000\u0000@>\u0001\u0000\u0000\u0000"+
+ "@?\u0001\u0000\u0000\u0000A\u0005\u0001\u0000\u0000\u0000BC\u0003\u0012"+
+ "\t\u0000CD\u0003\u0010\b\u0000DE\u0005%\u0000\u0000EF\u0005\u0004\u0000"+
+ "\u0000F\u0007\u0001\u0000\u0000\u0000GH\u0003\u0012\t\u0000HI\u0005\u0005"+
+ "\u0000\u0000IJ\u0003\u0010\b\u0000JK\u0005%\u0000\u0000KM\u0005\u0006"+
+ "\u0000\u0000LN\u0003\f\u0006\u0000ML\u0001\u0000\u0000\u0000MN\u0001\u0000"+
+ "\u0000\u0000NO\u0001\u0000\u0000\u0000OP\u0005\u0007\u0000\u0000PT\u0005"+
+ "\u0002\u0000\u0000QS\u0003\u0014\n\u0000RQ\u0001\u0000\u0000\u0000SV\u0001"+
+ "\u0000\u0000\u0000TR\u0001\u0000\u0000\u0000TU\u0001\u0000\u0000\u0000"+
+ "UW\u0001\u0000\u0000\u0000VT\u0001\u0000\u0000\u0000WX\u0005\u0003\u0000"+
+ "\u0000X\t\u0001\u0000\u0000\u0000YZ\u0003\u0012\t\u0000Z[\u0005%\u0000"+
+ "\u0000[]\u0005\u0006\u0000\u0000\\^\u0003\f\u0006\u0000]\\\u0001\u0000"+
+ "\u0000\u0000]^\u0001\u0000\u0000\u0000^_\u0001\u0000\u0000\u0000_`\u0005"+
+ "\u0007\u0000\u0000`d\u0005\u0002\u0000\u0000ac\u0003\u0014\n\u0000ba\u0001"+
+ "\u0000\u0000\u0000cf\u0001\u0000\u0000\u0000db\u0001\u0000\u0000\u0000"+
+ "de\u0001\u0000\u0000\u0000eg\u0001\u0000\u0000\u0000fd\u0001\u0000\u0000"+
+ "\u0000gh\u0005\u0003\u0000\u0000h\u000b\u0001\u0000\u0000\u0000in\u0003"+
+ "\u000e\u0007\u0000jk\u0005\b\u0000\u0000km\u0003\u000e\u0007\u0000lj\u0001"+
+ "\u0000\u0000\u0000mp\u0001\u0000\u0000\u0000nl\u0001\u0000\u0000\u0000"+
+ "no\u0001\u0000\u0000\u0000o\r\u0001\u0000\u0000\u0000pn\u0001\u0000\u0000"+
+ "\u0000qr\u0003\u0010\b\u0000rs\u0005%\u0000\u0000s\u000f\u0001\u0000\u0000"+
+ "\u0000tu\u0007\u0000\u0000\u0000u\u0011\u0001\u0000\u0000\u0000vw\u0007"+
+ "\u0001\u0000\u0000w\u0013\u0001\u0000\u0000\u0000x\u007f\u0003\u0016\u000b"+
+ "\u0000y\u007f\u0003\u0018\f\u0000z\u007f\u0003\u001c\u000e\u0000{\u007f"+
+ "\u0003\u001e\u000f\u0000|\u007f\u0003 \u0010\u0000}\u007f\u0003\"\u0011"+
+ "\u0000~x\u0001\u0000\u0000\u0000~y\u0001\u0000\u0000\u0000~z\u0001\u0000"+
+ "\u0000\u0000~{\u0001\u0000\u0000\u0000~|\u0001\u0000\u0000\u0000~}\u0001"+
+ "\u0000\u0000\u0000\u007f\u0015\u0001\u0000\u0000\u0000\u0080\u0081\u0003"+
+ "\u0010\b\u0000\u0081\u0084\u0005%\u0000\u0000\u0082\u0083\u0005\u000e"+
+ "\u0000\u0000\u0083\u0085\u0003$\u0012\u0000\u0084\u0082\u0001\u0000\u0000"+
+ "\u0000\u0084\u0085\u0001\u0000\u0000\u0000\u0085\u0086\u0001\u0000\u0000"+
+ "\u0000\u0086\u0087\u0005\u0004\u0000\u0000\u0087\u0017\u0001\u0000\u0000"+
+ "\u0000\u0088\u0089\u0003\u001a\r\u0000\u0089\u008a\u0005\u000e\u0000\u0000"+
+ "\u008a\u008b\u0003$\u0012\u0000\u008b\u008c\u0005\u0004\u0000\u0000\u008c"+
+ "\u0019\u0001\u0000\u0000\u0000\u008d\u008e\u0005%\u0000\u0000\u008e\u001b"+
+ "\u0001\u0000\u0000\u0000\u008f\u0090\u0005\u000f\u0000\u0000\u0090\u0091"+
+ "\u0005\u0006\u0000\u0000\u0091\u0092\u0003$\u0012\u0000\u0092\u0093\u0005"+
+ "\u0007\u0000\u0000\u0093\u0096\u0003\u0014\n\u0000\u0094\u0095\u0005\u0010"+
+ "\u0000\u0000\u0095\u0097\u0003\u0014\n\u0000\u0096\u0094\u0001\u0000\u0000"+
+ "\u0000\u0096\u0097\u0001\u0000\u0000\u0000\u0097\u001d\u0001\u0000\u0000"+
+ "\u0000\u0098\u0099\u0005\u0011\u0000\u0000\u0099\u009a\u0005\u0006\u0000"+
+ "\u0000\u009a\u009b\u0003$\u0012\u0000\u009b\u009c\u0005\u0007\u0000\u0000"+
+ "\u009c\u009d\u0003\u0014\n\u0000\u009d\u001f\u0001\u0000\u0000\u0000\u009e"+
+ "\u00a0\u0005\u0012\u0000\u0000\u009f\u00a1\u0003$\u0012\u0000\u00a0\u009f"+
+ "\u0001\u0000\u0000\u0000\u00a0\u00a1\u0001\u0000\u0000\u0000\u00a1\u00a2"+
+ "\u0001\u0000\u0000\u0000\u00a2\u00a3\u0005\u0004\u0000\u0000\u00a3!\u0001"+
+ "\u0000\u0000\u0000\u00a4\u00a8\u0005\u0002\u0000\u0000\u00a5\u00a7\u0003"+
+ "\u0014\n\u0000\u00a6\u00a5\u0001\u0000\u0000\u0000\u00a7\u00aa\u0001\u0000"+
+ "\u0000\u0000\u00a8\u00a6\u0001\u0000\u0000\u0000\u00a8\u00a9\u0001\u0000"+
+ "\u0000\u0000\u00a9\u00ab\u0001\u0000\u0000\u0000\u00aa\u00a8\u0001\u0000"+
+ "\u0000\u0000\u00ab\u00ac\u0005\u0003\u0000\u0000\u00ac#\u0001\u0000\u0000"+
+ "\u0000\u00ad\u00ae\u0006\u0012\uffff\uffff\u0000\u00ae\u00af\u0005\u001c"+
+ "\u0000\u0000\u00af\u00b9\u0003$\u0012\u0005\u00b0\u00b1\u0005 \u0000\u0000"+
+ "\u00b1\u00b9\u0003$\u0012\u0004\u00b2\u00b3\u0005\u0006\u0000\u0000\u00b3"+
+ "\u00b4\u0003$\u0012\u0000\u00b4\u00b5\u0005\u0007\u0000\u0000\u00b5\u00b9"+
+ "\u0001\u0000\u0000\u0000\u00b6\u00b9\u0003&\u0013\u0000\u00b7\u00b9\u0005"+
+ "%\u0000\u0000\u00b8\u00ad\u0001\u0000\u0000\u0000\u00b8\u00b0\u0001\u0000"+
+ "\u0000\u0000\u00b8\u00b2\u0001\u0000\u0000\u0000\u00b8\u00b6\u0001\u0000"+
+ "\u0000\u0000\u00b8\u00b7\u0001\u0000\u0000\u0000\u00b9\u00c5\u0001\u0000"+
+ "\u0000\u0000\u00ba\u00bb\n\b\u0000\u0000\u00bb\u00bc\u0007\u0002\u0000"+
+ "\u0000\u00bc\u00c4\u0003$\u0012\t\u00bd\u00be\n\u0007\u0000\u0000\u00be"+
+ "\u00bf\u0007\u0003\u0000\u0000\u00bf\u00c4\u0003$\u0012\b\u00c0\u00c1"+
+ "\n\u0006\u0000\u0000\u00c1\u00c2\u0007\u0004\u0000\u0000\u00c2\u00c4\u0003"+
+ "$\u0012\u0007\u00c3\u00ba\u0001\u0000\u0000\u0000\u00c3\u00bd\u0001\u0000"+
+ "\u0000\u0000\u00c3\u00c0\u0001\u0000\u0000\u0000\u00c4\u00c7\u0001\u0000"+
+ "\u0000\u0000\u00c5\u00c3\u0001\u0000\u0000\u0000\u00c5\u00c6\u0001\u0000"+
+ "\u0000\u0000\u00c6%\u0001\u0000\u0000\u0000\u00c7\u00c5\u0001\u0000\u0000"+
+ "\u0000\u00c8\u00cc\u0005$\u0000\u0000\u00c9\u00cc\u0003(\u0014\u0000\u00ca"+
+ "\u00cc\u0003*\u0015\u0000\u00cb\u00c8\u0001\u0000\u0000\u0000\u00cb\u00c9"+
+ "\u0001\u0000\u0000\u0000\u00cb\u00ca\u0001\u0000\u0000\u0000\u00cc\'\u0001"+
+ "\u0000\u0000\u0000\u00cd\u00ce\u0007\u0005\u0000\u0000\u00ce)\u0001\u0000"+
+ "\u0000\u0000\u00cf\u00d0\u0005#\u0000\u0000\u00d0\u00d1\t\u0000\u0000"+
+ "\u0000\u00d1\u00d2\u0005#\u0000\u0000\u00d2+\u0001\u0000\u0000\u0000\u0011"+
+ "/8@MT]dn~\u0084\u0096\u00a0\u00a8\u00b8\u00c3\u00c5\u00cb";
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 1d10783..dd4ca0f 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/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
+// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
package parser.generated;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
@@ -88,6 +88,12 @@ public interface SimpleJavaVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx);
+ /**
+ * Visit a parse tree produced by {@link SimpleJavaParser#var}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitVar(SimpleJavaParser.VarContext ctx);
/**
* Visit a parse tree produced by {@link SimpleJavaParser#ifStatement}.
* @param ctx the parse tree
diff --git a/src/main/java/semantic/SemanticAnalyzer.java b/src/main/java/semantic/SemanticAnalyzer.java
index 11de018..07d0ca2 100644
--- a/src/main/java/semantic/SemanticAnalyzer.java
+++ b/src/main/java/semantic/SemanticAnalyzer.java
@@ -25,7 +25,7 @@ public class SemanticAnalyzer implements SemanticVisitor {
if (result.isValid()) {
return node;
} else {
- throw new RuntimeException("errorString ERROR");
+ throw new RuntimeException("Not Valid");
}
}
@@ -55,14 +55,14 @@ public class SemanticAnalyzer implements SemanticVisitor {
return null;
}
- @Override
- public TypeCheckResult typeCheck(IdentifierNode identifierNode) {
- return null;
- }
-
@Override
public TypeCheckResult typeCheck(MethodNode methodNode) {
List statements = methodNode.statements;
+ for (StatementNode statement : statements) {
+ if(statement instanceof AssignmentStatementNode assignmentStatementNode) {
+ assignmentStatementNode.accept(this);
+ }
+ }
return null;
}
@@ -76,4 +76,17 @@ public class SemanticAnalyzer implements SemanticVisitor {
return null;
}
+ @Override
+ public TypeCheckResult typeCheck(AssignmentStatementNode assignmentStatementNode) {
+ if(assignmentStatementNode.expression instanceof LiteralNode literalNode) {
+ VarNode varNode = assignmentStatementNode.varNode;
+ if(varNode.getType().equals(literalNode.getType())) {
+ System.out.println("Type is same");
+ } else {
+ System.out.println("Type Mismatch");
+ }
+ }
+ return null;
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/semantic/SemanticVisitor.java b/src/main/java/semantic/SemanticVisitor.java
index 445db69..2fbaf41 100644
--- a/src/main/java/semantic/SemanticVisitor.java
+++ b/src/main/java/semantic/SemanticVisitor.java
@@ -1,12 +1,11 @@
package semantic;
-import ast.ASTNode;
import ast.ClassNode;
-import ast.IdentifierNode;
import ast.ProgramNode;
import ast.member.FieldNode;
import ast.member.MethodNode;
+import ast.statement.AssignmentStatementNode;
import typechecker.TypeCheckResult;
public interface SemanticVisitor {
@@ -16,13 +15,11 @@ public interface SemanticVisitor {
TypeCheckResult typeCheck(ClassNode toCheck);
- TypeCheckResult typeCheck(IdentifierNode toCheck);
-
TypeCheckResult typeCheck(MethodNode toCheck);
TypeCheckResult typeCheck(FieldNode toCheck);
-//
-// TypeCheckResult typeCheck(Assign toCheck);
+
+ TypeCheckResult typeCheck(AssignmentStatementNode toCheck);
//
// TypeCheckResult typeCheck(MethodParameter toCheck);
//
--
2.34.1