Compare commits
5 Commits
1c77a99f54
...
8094a93582
Author | SHA1 | Date | |
---|---|---|---|
8094a93582 | |||
0271313a05 | |||
|
e552bd5ada | ||
|
56d316a6d0 | ||
|
22a30d5956 |
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<state>
|
||||||
|
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||||
|
</state>
|
||||||
|
</component>
|
10
.idea/misc.xml
generated
10
.idea/misc.xml
generated
@ -13,6 +13,16 @@
|
|||||||
<option name="language" value="" />
|
<option name="language" value="" />
|
||||||
<option name="generateVisitor" value="true" />
|
<option name="generateVisitor" value="true" />
|
||||||
</PerGrammarGenerationSettings>
|
</PerGrammarGenerationSettings>
|
||||||
|
<PerGrammarGenerationSettings>
|
||||||
|
<option name="fileName" value="$PROJECT_DIR$/src/main/java/parser/grammar/SimpleJava.g4" />
|
||||||
|
<option name="autoGen" value="true" />
|
||||||
|
<option name="outputDir" value="C:\Users\Maxi\Documents\DHBW\Compilerbau\NichtHaskell2.0\src\main\java" />
|
||||||
|
<option name="libDir" value="" />
|
||||||
|
<option name="encoding" value="" />
|
||||||
|
<option name="pkg" value="parser.generated" />
|
||||||
|
<option name="language" value="" />
|
||||||
|
<option name="generateVisitor" value="true" />
|
||||||
|
</PerGrammarGenerationSettings>
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
13
pom.xml
13
pom.xml
@ -27,13 +27,22 @@
|
|||||||
<artifactId>antlr4-runtime</artifactId>
|
<artifactId>antlr4-runtime</artifactId>
|
||||||
<version>4.13.1</version>
|
<version>4.13.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.ow2.asm</groupId>
|
<groupId>org.ow2.asm</groupId>
|
||||||
<artifactId>asm</artifactId>
|
<artifactId>asm</artifactId>
|
||||||
<version>9.7</version>
|
<version>9.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
<version>2.16.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<version>3.26.0</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -1,21 +1,18 @@
|
|||||||
import ast.ASTNode;
|
import oldAst.ASTNode;
|
||||||
import org.antlr.v4.runtime.*;
|
import org.antlr.v4.runtime.*;
|
||||||
import org.antlr.v4.runtime.Token;
|
import oldAst.ProgramNode;
|
||||||
import ast.ProgramNode;
|
|
||||||
import bytecode.ByteCodeGenerator;
|
import bytecode.ByteCodeGenerator;
|
||||||
import org.antlr.v4.runtime.CharStream;
|
import org.antlr.v4.runtime.CharStream;
|
||||||
import org.antlr.v4.runtime.CharStreams;
|
import org.antlr.v4.runtime.CharStreams;
|
||||||
import org.antlr.v4.runtime.tree.ParseTree;
|
import org.antlr.v4.runtime.tree.ParseTree;
|
||||||
import org.antlr.v4.runtime.CommonTokenStream;
|
import org.antlr.v4.runtime.CommonTokenStream;
|
||||||
import parser.ASTBuilder;
|
import parser.astBuilder.ASTBuilder;
|
||||||
import parser.generated.SimpleJavaLexer;
|
import parser.generated.SimpleJavaLexer;
|
||||||
import parser.generated.SimpleJavaParser;
|
import parser.generated.SimpleJavaParser;
|
||||||
import semantic.SemanticAnalyzer;
|
import semantic.SemanticAnalyzer;
|
||||||
import bytecode.ByteCodeGenerator;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
|
@ -1,25 +1,27 @@
|
|||||||
package ast;
|
package ast;
|
||||||
|
|
||||||
import ast.member.ConstructorNode;
|
|
||||||
import ast.member.MemberNode;
|
|
||||||
import ast.member.MethodNode;
|
|
||||||
import ast.type.AccessTypeNode;
|
|
||||||
import ast.type.EnumAccessTypeNode;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import bytecode.visitor.ClassVisitor;
|
import bytecode.visitor.ClassVisitor;
|
||||||
|
import oldAst.ASTNode;
|
||||||
|
import oldAst.member.ConstructorNode;
|
||||||
|
import oldAst.member.MemberNode;
|
||||||
|
import oldAst.member.MethodNode;
|
||||||
|
import oldAst.type.AccessTypeNode;
|
||||||
|
import oldAst.type.EnumAccessTypeNode;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
import visitor.Visitable;
|
import visitor.Visitable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ClassNode implements ASTNode, Visitable {
|
public class ClassNode implements ASTNode, Visitable {
|
||||||
public String identifier;
|
public String identifier;
|
||||||
public AccessTypeNode accessType;
|
public AccessTypeNode accessType;
|
||||||
public List<MemberNode> members = new ArrayList<>();
|
public List<MemberNode> members = new ArrayList<>();
|
||||||
public boolean hasConstructor = false;
|
public boolean hasConstructor = false;
|
||||||
|
|
||||||
|
public ClassNode() {}
|
||||||
|
|
||||||
public ClassNode(AccessTypeNode accessType, String identifier){
|
public ClassNode(AccessTypeNode accessType, String identifier){
|
||||||
this.accessType = accessType;
|
this.accessType = accessType;
|
||||||
this.identifier = identifier;
|
this.identifier = identifier;
|
||||||
|
4
src/main/java/ast/IdentifierNode.java
Normal file
4
src/main/java/ast/IdentifierNode.java
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
package ast;
|
||||||
|
|
||||||
|
public class IdentifierNode {
|
||||||
|
}
|
@ -1,14 +1,16 @@
|
|||||||
package ast;
|
package ast;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import ast.ASTNode;
|
||||||
import java.util.List;
|
import ast.ClassNode;
|
||||||
|
|
||||||
import bytecode.visitor.ProgramVisitor;
|
import bytecode.visitor.ProgramVisitor;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
import visitor.Visitable;
|
import visitor.Visitable;
|
||||||
|
|
||||||
public class ProgramNode implements ASTNode, Visitable{
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ProgramNode implements ASTNode, Visitable {
|
||||||
public List<ClassNode> classes = new ArrayList<>();
|
public List<ClassNode> classes = new ArrayList<>();
|
||||||
|
|
||||||
public void addClass(ClassNode classNode) {
|
public void addClass(ClassNode classNode) {
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
package ast.expression;
|
|
||||||
|
|
||||||
import ast.ASTNode;
|
|
||||||
import visitor.Visitable;
|
|
||||||
|
|
||||||
public interface ExpressionNode extends ASTNode, Visitable {
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
package ast.member;
|
|
||||||
|
|
||||||
import ast.ASTNode;
|
|
||||||
|
|
||||||
public interface MemberNode extends ASTNode {
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
package ast.statement;
|
|
||||||
|
|
||||||
import ast.expression.BinaryExpressionNode;
|
|
||||||
import semantic.SemanticVisitor;
|
|
||||||
import typechecker.TypeCheckResult;
|
|
||||||
import visitor.Visitable;
|
|
||||||
|
|
||||||
public class AssignmentStatementNode extends StatementNode implements Visitable {
|
|
||||||
public BinaryExpressionNode expression;
|
|
||||||
|
|
||||||
public AssignmentStatementNode(BinaryExpressionNode expression) {
|
|
||||||
this.expression = expression;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TypeCheckResult accept(SemanticVisitor visitor) {
|
|
||||||
return visitor.analyze(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
package ast.statement;
|
|
||||||
|
|
||||||
import ast.ASTNode;
|
|
||||||
import visitor.Visitable;
|
|
||||||
|
|
||||||
public abstract class StatementNode implements ASTNode, Visitable {
|
|
||||||
}
|
|
||||||
|
|
14
src/main/java/ast/type/AccessModifierNode.java
Normal file
14
src/main/java/ast/type/AccessModifierNode.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package ast.type;
|
||||||
|
|
||||||
|
import oldAst.ASTNode;
|
||||||
|
import oldAst.type.EnumAccessTypeNode;
|
||||||
|
|
||||||
|
public class AccessModifierNode implements ASTNode {
|
||||||
|
public EnumAccessModifierNode enumAccessModifierNode;
|
||||||
|
|
||||||
|
public AccessModifierNode(){}
|
||||||
|
|
||||||
|
public AccessModifierNode(EnumAccessModifierNode enumAccessTypeNode) {
|
||||||
|
this.enumAccessModifierNode = enumAccessTypeNode;
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +0,0 @@
|
|||||||
package ast.type;
|
|
||||||
|
|
||||||
import ast.ASTNode;
|
|
||||||
|
|
||||||
public class BaseTypeNode implements ASTNode, TypeNode {
|
|
||||||
|
|
||||||
public EnumTypeNode enumType;
|
|
||||||
|
|
||||||
public BaseTypeNode(EnumTypeNode enumType) {
|
|
||||||
this.enumType = enumType;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
5
src/main/java/ast/type/EnumAccessModifierNode.java
Normal file
5
src/main/java/ast/type/EnumAccessModifierNode.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package ast.type;
|
||||||
|
|
||||||
|
public enum EnumAccessModifierNode {
|
||||||
|
PUBLIC, PRIVATE, PUBLIC_STATIC, PRIVATE_STATIC
|
||||||
|
}
|
@ -1,6 +0,0 @@
|
|||||||
package ast.type;
|
|
||||||
|
|
||||||
import ast.ASTNode;
|
|
||||||
|
|
||||||
public class ReferenceTypeNode implements ASTNode, TypeNode {
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
package ast.type;
|
|
||||||
|
|
||||||
import ast.ASTNode;
|
|
||||||
|
|
||||||
public interface TypeNode extends ASTNode {
|
|
||||||
}
|
|
@ -1,7 +1,7 @@
|
|||||||
package bytecode;
|
package bytecode;
|
||||||
|
|
||||||
import ast.ProgramNode;
|
import oldAst.ProgramNode;
|
||||||
import ast.ClassNode;
|
import oldAst.ClassNode;
|
||||||
import bytecode.visitor.ProgramVisitor;
|
import bytecode.visitor.ProgramVisitor;
|
||||||
|
|
||||||
public class ByteCodeGenerator implements ProgramVisitor {
|
public class ByteCodeGenerator implements ProgramVisitor {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package bytecode;
|
package bytecode;
|
||||||
|
|
||||||
import ast.ClassNode;
|
import oldAst.ClassNode;
|
||||||
import ast.member.FieldNode;
|
import oldAst.member.FieldNode;
|
||||||
import ast.member.MemberNode;
|
import oldAst.member.MemberNode;
|
||||||
import ast.member.MethodNode;
|
import oldAst.member.MethodNode;
|
||||||
import ast.type.BaseTypeNode;
|
import oldAst.type.BaseTypeNode;
|
||||||
import bytecode.visitor.ClassVisitor;
|
import bytecode.visitor.ClassVisitor;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import org.objectweb.asm.ClassWriter;
|
import org.objectweb.asm.ClassWriter;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package bytecode;
|
package bytecode;
|
||||||
|
|
||||||
import ast.parameter.ParameterListNode;
|
import oldAst.parameter.ParameterListNode;
|
||||||
import ast.parameter.ParameterNode;
|
import oldAst.parameter.ParameterNode;
|
||||||
import ast.type.*;
|
import oldAst.type.*;
|
||||||
import org.objectweb.asm.Opcodes;
|
import org.objectweb.asm.Opcodes;
|
||||||
import ast.type.BaseTypeNode;
|
import oldAst.type.BaseTypeNode;
|
||||||
|
|
||||||
public class Mapper {
|
public class Mapper {
|
||||||
public int mapAccessTypeToOpcode(AccessTypeNode type) {
|
public int mapAccessTypeToOpcode(AccessTypeNode type) {
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
package bytecode;
|
package bytecode;
|
||||||
|
|
||||||
import ast.member.ConstructorNode;
|
import oldAst.member.ConstructorNode;
|
||||||
import ast.member.MethodNode;
|
import oldAst.member.MethodNode;
|
||||||
import ast.parameter.ParameterListNode;
|
import oldAst.parameter.ParameterNode;
|
||||||
import ast.parameter.ParameterNode;
|
import oldAst.type.BaseTypeNode;
|
||||||
import ast.type.BaseTypeNode;
|
|
||||||
import ast.type.EnumTypeNode;
|
|
||||||
import org.objectweb.asm.ClassWriter;
|
import org.objectweb.asm.ClassWriter;
|
||||||
import org.objectweb.asm.Label;
|
import org.objectweb.asm.Label;
|
||||||
import org.objectweb.asm.MethodVisitor;
|
import org.objectweb.asm.MethodVisitor;
|
||||||
|
@ -2,7 +2,6 @@ package bytecode.visitor;
|
|||||||
|
|
||||||
import ast.ClassNode;
|
import ast.ClassNode;
|
||||||
import ast.member.FieldNode;
|
import ast.member.FieldNode;
|
||||||
import org.objectweb.asm.ClassWriter;
|
|
||||||
|
|
||||||
public interface ClassVisitor {
|
public interface ClassVisitor {
|
||||||
void visit(ClassNode classNode);
|
void visit(ClassNode classNode);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package bytecode.visitor;
|
package bytecode.visitor;
|
||||||
|
|
||||||
import ast.member.ConstructorNode;
|
import oldAst.member.ConstructorNode;
|
||||||
import ast.member.MethodNode;
|
import oldAst.member.MethodNode;
|
||||||
|
|
||||||
public interface MethodVisitor {
|
public interface MethodVisitor {
|
||||||
void visit(ConstructorNode constructorNode);
|
void visit(ConstructorNode constructorNode);
|
||||||
|
Binary file not shown.
Binary file not shown.
12
src/main/java/oldAst/ASTNode.java
Normal file
12
src/main/java/oldAst/ASTNode.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package oldAst;
|
||||||
|
|
||||||
|
//import java.util.List;
|
||||||
|
|
||||||
|
public interface ASTNode {
|
||||||
|
/**
|
||||||
|
* Please implement this method to return a list of children of each node.
|
||||||
|
*/
|
||||||
|
// public List<ASTNode> getChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package ast;
|
package oldAst;
|
||||||
|
|
||||||
public class BlockNode {
|
public class BlockNode {
|
||||||
}
|
}
|
63
src/main/java/oldAst/ClassNode.java
Normal file
63
src/main/java/oldAst/ClassNode.java
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package oldAst;
|
||||||
|
|
||||||
|
import oldAst.member.ConstructorNode;
|
||||||
|
import oldAst.member.MemberNode;
|
||||||
|
import oldAst.member.MethodNode;
|
||||||
|
import oldAst.type.AccessTypeNode;
|
||||||
|
import oldAst.type.EnumAccessTypeNode;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import bytecode.visitor.ClassVisitor;
|
||||||
|
import semantic.SemanticVisitor;
|
||||||
|
import typechecker.TypeCheckResult;
|
||||||
|
import visitor.Visitable;
|
||||||
|
|
||||||
|
public class ClassNode implements ASTNode, Visitable {
|
||||||
|
public String identifier;
|
||||||
|
public AccessTypeNode accessType;
|
||||||
|
public List<MemberNode> members = new ArrayList<>();
|
||||||
|
public boolean hasConstructor = false;
|
||||||
|
|
||||||
|
public ClassNode() {}
|
||||||
|
|
||||||
|
public ClassNode(AccessTypeNode accessType, String identifier){
|
||||||
|
this.accessType = accessType;
|
||||||
|
this.identifier = identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMember(MemberNode member) {
|
||||||
|
if (member instanceof ConstructorNode) {
|
||||||
|
this.hasConstructor = true;
|
||||||
|
}
|
||||||
|
members.add(member);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ensureConstructor(){
|
||||||
|
if(!hasConstructor) {
|
||||||
|
ConstructorNode constructor = new ConstructorNode(new AccessTypeNode(EnumAccessTypeNode.PUBLIC), identifier);
|
||||||
|
members.add(0,constructor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MethodNode> getMethods(){
|
||||||
|
List<MethodNode> methods = new ArrayList<>();
|
||||||
|
for (MemberNode member : members) {
|
||||||
|
if (member instanceof MethodNode methodNode) {
|
||||||
|
methods.add(methodNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return methods;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TypeCheckResult accept(SemanticVisitor visitor) {
|
||||||
|
return visitor.analyze(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(ClassVisitor classVisitor) {
|
||||||
|
classVisitor.visit(this);
|
||||||
|
}
|
||||||
|
}
|
27
src/main/java/oldAst/ProgramNode.java
Normal file
27
src/main/java/oldAst/ProgramNode.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package oldAst;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import bytecode.visitor.ProgramVisitor;
|
||||||
|
import semantic.SemanticVisitor;
|
||||||
|
import typechecker.TypeCheckResult;
|
||||||
|
import visitor.Visitable;
|
||||||
|
|
||||||
|
public class ProgramNode implements ASTNode, Visitable{
|
||||||
|
public List<ClassNode> classes = new ArrayList<>();
|
||||||
|
|
||||||
|
public void addClass(ClassNode classNode) {
|
||||||
|
classes.add(classNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TypeCheckResult accept(SemanticVisitor visitor) {
|
||||||
|
return visitor.analyze(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(ProgramVisitor programVisitor) {
|
||||||
|
programVisitor.visit(this);
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package ast.expression;
|
package oldAst.expression;
|
||||||
|
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
22
src/main/java/oldAst/expression/ExpressionNode.java
Normal file
22
src/main/java/oldAst/expression/ExpressionNode.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package oldAst.expression;
|
||||||
|
|
||||||
|
import oldAst.ASTNode;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
|
import visitor.Visitable;
|
||||||
|
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
|
||||||
|
@JsonSubTypes({
|
||||||
|
@JsonSubTypes.Type(value = BinaryExpressionNode.class, name = "Binary"),
|
||||||
|
@JsonSubTypes.Type(value = This.class, name = "This"),
|
||||||
|
@JsonSubTypes.Type(value = InstVar.class, name = "InstVar"),
|
||||||
|
@JsonSubTypes.Type(value = IdentifierExpressionNode.class, name = "Identifier"),
|
||||||
|
@JsonSubTypes.Type(value = LiteralNode.class, name = "Literal"),
|
||||||
|
@JsonSubTypes.Type(value = UnaryExpressionNode.class, name = "Unary")}
|
||||||
|
)
|
||||||
|
|
||||||
|
public interface ExpressionNode extends ASTNode, Visitable {
|
||||||
|
|
||||||
|
}
|
@ -1,13 +1,13 @@
|
|||||||
package ast.expression;
|
package oldAst.expression;
|
||||||
|
|
||||||
public enum ExpresssionOperator {
|
public enum ExpresssionOperator {
|
||||||
DOT, // .
|
DOT, // . NICHT MEHR GEBRAUCHT
|
||||||
PLUS, // +
|
PLUS, // +
|
||||||
MINUS, // -
|
MINUS, // -
|
||||||
MULTIPLY, // *
|
MULTIPLY, // *
|
||||||
DIVIDE, // /
|
DIVIDE, // /
|
||||||
NOT, // !
|
NOT, // !
|
||||||
ASSIGNMENT, // =
|
ASSIGNMENT, // = (NICHT MEHR GEBRAUCHT ??)
|
||||||
EQUALS, // ==
|
EQUALS, // ==
|
||||||
UNEQUALS, // !=
|
UNEQUALS, // !=
|
||||||
ERROR //TODO: Remove This
|
ERROR //TODO: Remove This
|
@ -1,6 +1,6 @@
|
|||||||
package ast.expression;
|
package oldAst.expression;
|
||||||
|
|
||||||
import ast.type.TypeNode;
|
import oldAst.type.TypeNode;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
|
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
24
src/main/java/oldAst/expression/InstVar.java
Normal file
24
src/main/java/oldAst/expression/InstVar.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package oldAst.expression;
|
||||||
|
|
||||||
|
import oldAst.type.TypeNode;
|
||||||
|
import semantic.SemanticVisitor;
|
||||||
|
import typechecker.TypeCheckResult;
|
||||||
|
import visitor.Visitable;
|
||||||
|
|
||||||
|
public class InstVar implements ExpressionNode, Visitable {
|
||||||
|
public String identifier;
|
||||||
|
public ExpressionNode expression;
|
||||||
|
public TypeNode type;
|
||||||
|
|
||||||
|
public InstVar(){}
|
||||||
|
|
||||||
|
public InstVar(ExpressionNode expression, String identifier) {
|
||||||
|
this.identifier = identifier;
|
||||||
|
this.expression = expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TypeCheckResult accept(SemanticVisitor visitor) {
|
||||||
|
return visitor.analyze(this);
|
||||||
|
}
|
||||||
|
}
|
@ -1,29 +1,31 @@
|
|||||||
package ast;
|
package oldAst.expression;
|
||||||
|
|
||||||
import ast.expression.ExpressionNode;
|
import oldAst.type.TypeNode;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
|
|
||||||
public class LiteralNode implements ExpressionNode {
|
public class LiteralNode implements ExpressionNode {
|
||||||
|
|
||||||
int value;
|
int value;
|
||||||
private String type;
|
private TypeNode type;
|
||||||
|
|
||||||
|
public LiteralNode(){}
|
||||||
|
|
||||||
public LiteralNode(int value) {
|
public LiteralNode(int value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getType() {
|
public TypeNode getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setType(String type) {
|
public void setType(TypeNode type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeCheckResult accept(SemanticVisitor visitor) {
|
public TypeCheckResult accept(SemanticVisitor visitor) {
|
||||||
return null;
|
return visitor.analyze(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
26
src/main/java/oldAst/expression/This.java
Normal file
26
src/main/java/oldAst/expression/This.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package oldAst.expression;
|
||||||
|
|
||||||
|
import oldAst.ASTNode;
|
||||||
|
import oldAst.type.ReferenceTypeNode;
|
||||||
|
import oldAst.type.TypeNode;
|
||||||
|
import semantic.SemanticVisitor;
|
||||||
|
import typechecker.TypeCheckResult;
|
||||||
|
|
||||||
|
public class This implements ASTNode, ExpressionNode {
|
||||||
|
private TypeNode type;
|
||||||
|
|
||||||
|
public This(){}
|
||||||
|
|
||||||
|
public This(String className) {
|
||||||
|
type = new ReferenceTypeNode(className);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TypeCheckResult accept(SemanticVisitor visitor) {
|
||||||
|
return visitor.analyze(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeNode getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package ast.expression;
|
package oldAst.expression;
|
||||||
|
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
@ -1,6 +1,6 @@
|
|||||||
package ast.member;
|
package oldAst.member;
|
||||||
|
|
||||||
import ast.type.AccessTypeNode;
|
import oldAst.type.AccessTypeNode;
|
||||||
import bytecode.visitor.MethodVisitor;
|
import bytecode.visitor.MethodVisitor;
|
||||||
import visitor.Visitable;
|
import visitor.Visitable;
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
package ast.member;
|
package oldAst.member;
|
||||||
|
|
||||||
import ast.type.AccessTypeNode;
|
import oldAst.type.AccessTypeNode;
|
||||||
import ast.type.TypeNode;
|
import oldAst.type.TypeNode;
|
||||||
import bytecode.visitor.ClassVisitor;
|
import bytecode.visitor.ClassVisitor;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
@ -12,6 +12,8 @@ public class FieldNode implements MemberNode, Visitable {
|
|||||||
public TypeNode type;
|
public TypeNode type;
|
||||||
public String identifier;
|
public String identifier;
|
||||||
|
|
||||||
|
public FieldNode(){}
|
||||||
|
|
||||||
public FieldNode(AccessTypeNode accessTypeNode, TypeNode type, String name){
|
public FieldNode(AccessTypeNode accessTypeNode, TypeNode type, String name){
|
||||||
this.accessTypeNode = accessTypeNode;
|
this.accessTypeNode = accessTypeNode;
|
||||||
this.type = type;
|
this.type = type;
|
18
src/main/java/oldAst/member/MemberNode.java
Normal file
18
src/main/java/oldAst/member/MemberNode.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package oldAst.member;
|
||||||
|
|
||||||
|
import oldAst.ASTNode;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
|
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
|
||||||
|
@JsonSubTypes({
|
||||||
|
@JsonSubTypes.Type(value = MethodNode.class, name = "Method"),
|
||||||
|
|
||||||
|
@JsonSubTypes.Type(value = FieldNode.class, name = "Field") }
|
||||||
|
)
|
||||||
|
|
||||||
|
public interface MemberNode extends ASTNode {
|
||||||
|
|
||||||
|
}
|
@ -1,13 +1,13 @@
|
|||||||
package ast.member;
|
package oldAst.member;
|
||||||
|
|
||||||
import ast.parameter.ParameterListNode;
|
import oldAst.parameter.ParameterListNode;
|
||||||
import ast.statement.StatementNode;
|
import oldAst.statement.StatementNode;
|
||||||
import ast.type.AccessTypeNode;
|
import oldAst.type.AccessTypeNode;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ast.type.TypeNode;
|
import oldAst.type.TypeNode;
|
||||||
import bytecode.visitor.MethodVisitor;
|
import bytecode.visitor.MethodVisitor;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
@ -22,6 +22,8 @@ public class MethodNode implements MemberNode, Visitable {
|
|||||||
|
|
||||||
public List<StatementNode> statements = new ArrayList<>();
|
public List<StatementNode> statements = new ArrayList<>();
|
||||||
|
|
||||||
|
public MethodNode(){}
|
||||||
|
|
||||||
public MethodNode(AccessTypeNode visibility, TypeNode type, String identifier, ParameterListNode parameters,
|
public MethodNode(AccessTypeNode visibility, TypeNode type, String identifier, ParameterListNode parameters,
|
||||||
List<StatementNode> statements){
|
List<StatementNode> statements){
|
||||||
this.visibility = visibility;
|
this.visibility = visibility;
|
@ -1,6 +1,6 @@
|
|||||||
package ast.parameter;
|
package oldAst.parameter;
|
||||||
|
|
||||||
import ast.ASTNode;
|
import oldAst.ASTNode;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -8,6 +8,8 @@ import java.util.List;
|
|||||||
public class ParameterListNode implements ASTNode {
|
public class ParameterListNode implements ASTNode {
|
||||||
public List<ParameterNode> parameters = new ArrayList<>();
|
public List<ParameterNode> parameters = new ArrayList<>();
|
||||||
|
|
||||||
|
public ParameterListNode() {}
|
||||||
|
|
||||||
public ParameterListNode(List<ParameterNode> parameters){
|
public ParameterListNode(List<ParameterNode> parameters){
|
||||||
this.parameters = parameters;
|
this.parameters = parameters;
|
||||||
}
|
}
|
@ -1,12 +1,14 @@
|
|||||||
package ast.parameter;
|
package oldAst.parameter;
|
||||||
|
|
||||||
import ast.ASTNode;
|
import oldAst.ASTNode;
|
||||||
import ast.type.TypeNode;
|
import oldAst.type.TypeNode;
|
||||||
|
|
||||||
public class ParameterNode implements ASTNode {
|
public class ParameterNode implements ASTNode {
|
||||||
public TypeNode type;
|
public TypeNode type;
|
||||||
public String identifier;
|
public String identifier;
|
||||||
|
|
||||||
|
public ParameterNode(){}
|
||||||
|
|
||||||
public ParameterNode(TypeNode type, String identifier) {
|
public ParameterNode(TypeNode type, String identifier) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.identifier = identifier;
|
this.identifier = identifier;
|
24
src/main/java/oldAst/statement/AssignmentStatementNode.java
Normal file
24
src/main/java/oldAst/statement/AssignmentStatementNode.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package oldAst.statement;
|
||||||
|
|
||||||
|
import oldAst.expression.ExpressionNode;
|
||||||
|
import semantic.SemanticVisitor;
|
||||||
|
import typechecker.TypeCheckResult;
|
||||||
|
import visitor.Visitable;
|
||||||
|
|
||||||
|
public class AssignmentStatementNode extends StatementNode implements Visitable {
|
||||||
|
public ExpressionNode expressionLeft;
|
||||||
|
public ExpressionNode expressionRight;
|
||||||
|
// public TypeNode type;
|
||||||
|
|
||||||
|
public AssignmentStatementNode(){}
|
||||||
|
|
||||||
|
public AssignmentStatementNode(ExpressionNode expressionLeft, ExpressionNode expressionRight) {
|
||||||
|
this.expressionLeft = expressionLeft;
|
||||||
|
this.expressionRight = expressionRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TypeCheckResult accept(SemanticVisitor visitor) {
|
||||||
|
return visitor.analyze(this);
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package ast.statement;
|
package oldAst.statement;
|
||||||
|
|
||||||
import ast.expression.ExpressionNode;
|
import oldAst.expression.ExpressionNode;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
package ast.statement;
|
package oldAst.statement;
|
||||||
|
|
||||||
import ast.expression.ExpressionNode;
|
import oldAst.expression.ExpressionNode;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
|
|
20
src/main/java/oldAst/statement/StatementNode.java
Normal file
20
src/main/java/oldAst/statement/StatementNode.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package oldAst.statement;
|
||||||
|
|
||||||
|
import oldAst.ASTNode;
|
||||||
|
import visitor.Visitable;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
|
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
|
||||||
|
@JsonSubTypes({
|
||||||
|
@JsonSubTypes.Type(value = IfStatementNode.class, name = "IF"),
|
||||||
|
@JsonSubTypes.Type(value = AssignmentStatementNode.class, name = "Assignment"),
|
||||||
|
@JsonSubTypes.Type(value = VariableDeclarationStatementNode.class, name = "VariableDeclaration") }
|
||||||
|
)
|
||||||
|
|
||||||
|
public abstract class StatementNode implements ASTNode, Visitable {
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
package ast.statement;
|
package oldAst.statement;
|
||||||
|
|
||||||
import ast.expression.ExpressionNode;
|
import oldAst.expression.ExpressionNode;
|
||||||
import ast.type.TypeNode;
|
import oldAst.type.TypeNode;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
|
|
||||||
@ -9,6 +9,9 @@ public class VariableDeclarationStatementNode extends StatementNode {
|
|||||||
public TypeNode type;
|
public TypeNode type;
|
||||||
public String identifier;
|
public String identifier;
|
||||||
public ExpressionNode expression;
|
public ExpressionNode expression;
|
||||||
|
|
||||||
|
public VariableDeclarationStatementNode(){}
|
||||||
|
|
||||||
public VariableDeclarationStatementNode(TypeNode type, String identifier, ExpressionNode expression) {
|
public VariableDeclarationStatementNode(TypeNode type, String identifier, ExpressionNode expression) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.identifier = identifier;
|
this.identifier = identifier;
|
@ -1,6 +1,6 @@
|
|||||||
package ast.statement;
|
package oldAst.statement;
|
||||||
|
|
||||||
import ast.expression.ExpressionNode;
|
import oldAst.expression.ExpressionNode;
|
||||||
import semantic.SemanticVisitor;
|
import semantic.SemanticVisitor;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
|
|
@ -1,10 +1,12 @@
|
|||||||
package ast.type;
|
package oldAst.type;
|
||||||
|
|
||||||
import ast.ASTNode;
|
import oldAst.ASTNode;
|
||||||
|
|
||||||
public class AccessTypeNode implements ASTNode {
|
public class AccessTypeNode implements ASTNode {
|
||||||
public EnumAccessTypeNode enumAccessTypeNode;
|
public EnumAccessTypeNode enumAccessTypeNode;
|
||||||
|
|
||||||
|
public AccessTypeNode(){}
|
||||||
|
|
||||||
public AccessTypeNode(EnumAccessTypeNode enumAccessTypeNode) {
|
public AccessTypeNode(EnumAccessTypeNode enumAccessTypeNode) {
|
||||||
this.enumAccessTypeNode = enumAccessTypeNode;
|
this.enumAccessTypeNode = enumAccessTypeNode;
|
||||||
}
|
}
|
28
src/main/java/oldAst/type/BaseTypeNode.java
Normal file
28
src/main/java/oldAst/type/BaseTypeNode.java
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package oldAst.type;
|
||||||
|
|
||||||
|
import oldAst.ASTNode;
|
||||||
|
|
||||||
|
public class BaseTypeNode implements ASTNode, TypeNode {
|
||||||
|
|
||||||
|
public EnumTypeNode enumType;
|
||||||
|
|
||||||
|
public BaseTypeNode(){}
|
||||||
|
|
||||||
|
public BaseTypeNode(EnumTypeNode enumType) {
|
||||||
|
this.enumType = enumType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
BaseTypeNode other = (BaseTypeNode) obj;
|
||||||
|
if (enumType != other.enumType)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package ast.type;
|
package oldAst.type;
|
||||||
|
|
||||||
public enum EnumAccessTypeNode {
|
public enum EnumAccessTypeNode {
|
||||||
PUBLIC, PRIVATE
|
PUBLIC, PRIVATE
|
@ -1,4 +1,4 @@
|
|||||||
package ast.type;
|
package oldAst.type;
|
||||||
|
|
||||||
public enum EnumTypeNode {
|
public enum EnumTypeNode {
|
||||||
INT, BOOLEAN, CHAR
|
INT, BOOLEAN, CHAR
|
36
src/main/java/oldAst/type/ReferenceTypeNode.java
Normal file
36
src/main/java/oldAst/type/ReferenceTypeNode.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package oldAst.type;
|
||||||
|
|
||||||
|
import oldAst.ASTNode;
|
||||||
|
|
||||||
|
public class ReferenceTypeNode implements ASTNode, TypeNode {
|
||||||
|
|
||||||
|
private String identifier;
|
||||||
|
|
||||||
|
public ReferenceTypeNode() {}
|
||||||
|
|
||||||
|
public ReferenceTypeNode(String identifier) {
|
||||||
|
this.identifier = identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIdentifier() {
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
ReferenceTypeNode other = (ReferenceTypeNode) obj;
|
||||||
|
if (identifier == null) {
|
||||||
|
if (other.identifier != null)
|
||||||
|
return false;
|
||||||
|
} else if (!identifier.equals(other.identifier))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
18
src/main/java/oldAst/type/TypeNode.java
Normal file
18
src/main/java/oldAst/type/TypeNode.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package oldAst.type;
|
||||||
|
|
||||||
|
import oldAst.ASTNode;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
|
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
|
||||||
|
@JsonSubTypes({
|
||||||
|
@JsonSubTypes.Type(value = BaseTypeNode.class, name = "Base"),
|
||||||
|
|
||||||
|
@JsonSubTypes.Type(value = ReferenceTypeNode.class, name = "Reference") }
|
||||||
|
)
|
||||||
|
|
||||||
|
public interface TypeNode extends ASTNode {
|
||||||
|
}
|
@ -1,62 +0,0 @@
|
|||||||
grammar SimpleJava;
|
|
||||||
|
|
||||||
program : classDeclaration+;
|
|
||||||
|
|
||||||
classDeclaration : accessType 'class' IDENTIFIER '{' memberDeclaration* '}';
|
|
||||||
|
|
||||||
memberDeclaration : fieldDeclaration | methodDeclaration | constructorDeclaration;
|
|
||||||
|
|
||||||
fieldDeclaration : accessType type IDENTIFIER ';';
|
|
||||||
|
|
||||||
methodDeclaration : accessType 'static' type IDENTIFIER '(' parameterList? ')' '{' statement* '}' ;
|
|
||||||
|
|
||||||
constructorDeclaration : accessType IDENTIFIER '(' parameterList? ')' '{' statement* '}' ;
|
|
||||||
|
|
||||||
parameterList : parameter (',' parameter)* ;
|
|
||||||
parameter : type IDENTIFIER ;
|
|
||||||
|
|
||||||
type : 'int' | 'boolean' | 'char' ;
|
|
||||||
accessType : 'public' | 'private' ;
|
|
||||||
|
|
||||||
statement
|
|
||||||
: variableDeclarationStatement
|
|
||||||
| assignmentStatement
|
|
||||||
| ifStatement
|
|
||||||
| whileStatement
|
|
||||||
| returnStatement
|
|
||||||
| block
|
|
||||||
;
|
|
||||||
|
|
||||||
variableDeclarationStatement : type IDENTIFIER ('=' expression)? ';' ;
|
|
||||||
|
|
||||||
assignmentStatement : var '=' expression ';' ;
|
|
||||||
|
|
||||||
var: IDENTIFIER;
|
|
||||||
|
|
||||||
ifStatement : 'if' '(' expression ')' statement ('else' statement)? ;
|
|
||||||
|
|
||||||
whileStatement : 'while' '(' expression ')' statement ;
|
|
||||||
|
|
||||||
returnStatement : 'return' (expression)? ';' ;
|
|
||||||
|
|
||||||
block : '{' statement* '}' ;
|
|
||||||
|
|
||||||
expression
|
|
||||||
: expression ('&&' | '||') expression
|
|
||||||
| expression ('==' | '!=' | '<' | '<=' | '>' | '>=') expression
|
|
||||||
| expression ('+' | '-' | '*' | '/' | '%') expression
|
|
||||||
| '-' expression
|
|
||||||
| '!' expression
|
|
||||||
| '(' expression ')'
|
|
||||||
| literal
|
|
||||||
| IDENTIFIER
|
|
||||||
;
|
|
||||||
|
|
||||||
literal : INTEGERLITERAL | booleanLiteral | charLiteral ;
|
|
||||||
|
|
||||||
INTEGERLITERAL : [0-9]+ ;
|
|
||||||
booleanLiteral : 'true' | 'false' ;
|
|
||||||
charLiteral : '\'' . '\'' ;
|
|
||||||
IDENTIFIER : [a-zA-Z][a-zA-Z0-9_]* ;
|
|
||||||
|
|
||||||
WS : [ \t\r\n]+ -> skip;
|
|
@ -1,25 +1,21 @@
|
|||||||
package parser;
|
package parser.astBuilder;
|
||||||
|
|
||||||
import ast.*;
|
import oldAst.*;
|
||||||
import ast.expression.BinaryExpressionNode;
|
import oldAst.expression.*;
|
||||||
import ast.expression.ExpressionNode;
|
import oldAst.member.FieldNode;
|
||||||
import ast.expression.ExpresssionOperator;
|
import oldAst.member.MemberNode;
|
||||||
import ast.expression.IdentifierExpressionNode;
|
import oldAst.member.MethodNode;
|
||||||
import ast.expression.UnaryExpressionNode;
|
import oldAst.parameter.ParameterListNode;
|
||||||
import ast.member.FieldNode;
|
import oldAst.parameter.ParameterNode;
|
||||||
import ast.member.MemberNode;
|
import oldAst.statement.*;
|
||||||
import ast.member.MethodNode;
|
import oldAst.type.*;
|
||||||
import ast.parameter.ParameterListNode;
|
|
||||||
import ast.parameter.ParameterNode;
|
|
||||||
import ast.statement.*;
|
|
||||||
import ast.type.*;
|
|
||||||
import org.antlr.v4.runtime.tree.TerminalNode;
|
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import parser.generated.*;
|
import parser.generated.*;
|
||||||
import parser.generated.SimpleJavaParser.LiteralContext;
|
import parser.generated.SimpleJavaParser.LiteralContext;
|
||||||
import ast.type.BaseTypeNode;
|
import oldAst.type.BaseTypeNode;
|
||||||
|
|
||||||
public class ASTBuilder extends SimpleJavaBaseVisitor<ASTNode> {
|
public class ASTBuilder extends SimpleJavaBaseVisitor<ASTNode> {
|
||||||
@Override
|
@Override
|
||||||
@ -138,9 +134,8 @@ public class ASTBuilder extends SimpleJavaBaseVisitor<ASTNode> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ASTNode visitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx) {
|
public ASTNode visitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx) {
|
||||||
|
ExpressionNode expression = (ExpressionNode) visit(ctx.expression());
|
||||||
BinaryExpressionNode expression = (BinaryExpressionNode) visit(ctx.expression());
|
return null;
|
||||||
return new AssignmentStatementNode(expression);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -211,7 +206,7 @@ public class ASTBuilder extends SimpleJavaBaseVisitor<ASTNode> {
|
|||||||
int intValue = Integer.parseInt(literalContext.getText());
|
int intValue = Integer.parseInt(literalContext.getText());
|
||||||
LiteralNode literalNode = new LiteralNode(intValue);
|
LiteralNode literalNode = new LiteralNode(intValue);
|
||||||
|
|
||||||
literalNode.setType("int");
|
literalNode.setType(new BaseTypeNode(EnumTypeNode.INT));
|
||||||
return literalNode;
|
return literalNode;
|
||||||
} catch (NumberFormatException ignored) {}
|
} catch (NumberFormatException ignored) {}
|
||||||
|
|
File diff suppressed because one or more lines are too long
@ -1,73 +1,88 @@
|
|||||||
T__0=1
|
T__0=1
|
||||||
T__1=2
|
T__1=2
|
||||||
T__2=3
|
Void=3
|
||||||
T__3=4
|
Boolean=4
|
||||||
T__4=5
|
Char=5
|
||||||
T__5=6
|
Int=6
|
||||||
T__6=7
|
AccessModifier=7
|
||||||
T__7=8
|
MainMethodDeclaration=8
|
||||||
T__8=9
|
DotOperator=9
|
||||||
T__9=10
|
LineOperator=10
|
||||||
T__10=11
|
ComparisonOperator=11
|
||||||
T__11=12
|
LogicalOperator=12
|
||||||
T__12=13
|
Assign=13
|
||||||
T__13=14
|
Plus=14
|
||||||
T__14=15
|
Minus=15
|
||||||
T__15=16
|
Mult=16
|
||||||
T__16=17
|
Modulo=17
|
||||||
T__17=18
|
Div=18
|
||||||
T__18=19
|
Greater=19
|
||||||
T__19=20
|
Less=20
|
||||||
T__20=21
|
GreaterEqual=21
|
||||||
T__21=22
|
LessEqual=22
|
||||||
T__22=23
|
Equal=23
|
||||||
T__23=24
|
NotEqual=24
|
||||||
T__24=25
|
Not=25
|
||||||
T__25=26
|
And=26
|
||||||
T__26=27
|
Or=27
|
||||||
T__27=28
|
Dot=28
|
||||||
T__28=29
|
OpenRoundBracket=29
|
||||||
T__29=30
|
ClosedRoundBracket=30
|
||||||
T__30=31
|
OpenCurlyBracket=31
|
||||||
T__31=32
|
ClosedCurlyBracket=32
|
||||||
T__32=33
|
Semicolon=33
|
||||||
T__33=34
|
Comma=34
|
||||||
T__34=35
|
Class=35
|
||||||
INTEGERLITERAL=36
|
This=36
|
||||||
IDENTIFIER=37
|
While=37
|
||||||
WS=38
|
If=38
|
||||||
'class'=1
|
Else=39
|
||||||
'{'=2
|
For=40
|
||||||
'}'=3
|
Return=41
|
||||||
';'=4
|
New=42
|
||||||
'static'=5
|
CharValue=43
|
||||||
'('=6
|
IntValue=44
|
||||||
')'=7
|
BooleanValue=45
|
||||||
','=8
|
NullValue=46
|
||||||
'int'=9
|
Identifier=47
|
||||||
'boolean'=10
|
WS=48
|
||||||
'char'=11
|
InlineComment=49
|
||||||
'public'=12
|
MultilineComment=50
|
||||||
'private'=13
|
'++'=1
|
||||||
'='=14
|
'--'=2
|
||||||
'if'=15
|
'void'=3
|
||||||
'else'=16
|
'boolean'=4
|
||||||
'while'=17
|
'char'=5
|
||||||
'return'=18
|
'int'=6
|
||||||
'&&'=19
|
'public static void main(String[] args)'=8
|
||||||
'||'=20
|
'='=13
|
||||||
'=='=21
|
'+'=14
|
||||||
'!='=22
|
'-'=15
|
||||||
'<'=23
|
'*'=16
|
||||||
'<='=24
|
'%'=17
|
||||||
'>'=25
|
'/'=18
|
||||||
'>='=26
|
'>'=19
|
||||||
'+'=27
|
'<'=20
|
||||||
'-'=28
|
'>='=21
|
||||||
'*'=29
|
'<='=22
|
||||||
'/'=30
|
'=='=23
|
||||||
'%'=31
|
'!='=24
|
||||||
'!'=32
|
'!'=25
|
||||||
'true'=33
|
'&&'=26
|
||||||
'false'=34
|
'||'=27
|
||||||
'\''=35
|
'.'=28
|
||||||
|
'('=29
|
||||||
|
')'=30
|
||||||
|
'{'=31
|
||||||
|
'}'=32
|
||||||
|
';'=33
|
||||||
|
','=34
|
||||||
|
'class'=35
|
||||||
|
'this'=36
|
||||||
|
'while'=37
|
||||||
|
'if'=38
|
||||||
|
'else'=39
|
||||||
|
'for'=40
|
||||||
|
'return'=41
|
||||||
|
'new'=42
|
||||||
|
'null'=46
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
|
// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/grammar/SimpleJava.g4 by ANTLR 4.13.1
|
||||||
package parser.generated;
|
package parser.generated;
|
||||||
|
|
||||||
import org.antlr.v4.runtime.ParserRuleContext;
|
import org.antlr.v4.runtime.ParserRuleContext;
|
||||||
@ -48,6 +48,18 @@ public class SimpleJavaBaseListener implements SimpleJavaListener {
|
|||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void exitMemberDeclaration(SimpleJavaParser.MemberDeclarationContext ctx) { }
|
@Override public void exitMemberDeclaration(SimpleJavaParser.MemberDeclarationContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -72,18 +84,6 @@ public class SimpleJavaBaseListener implements SimpleJavaListener {
|
|||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void exitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx) { }
|
@Override public void exitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx) { }
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void enterConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx) { }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void exitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx) { }
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -113,25 +113,13 @@ public class SimpleJavaBaseListener implements SimpleJavaListener {
|
|||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void enterType(SimpleJavaParser.TypeContext ctx) { }
|
@Override public void enterArgumentList(SimpleJavaParser.ArgumentListContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void exitType(SimpleJavaParser.TypeContext ctx) { }
|
@Override public void exitArgumentList(SimpleJavaParser.ArgumentListContext ctx) { }
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void enterAccessType(SimpleJavaParser.AccessTypeContext ctx) { }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void exitAccessType(SimpleJavaParser.AccessTypeContext ctx) { }
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -149,61 +137,13 @@ public class SimpleJavaBaseListener implements SimpleJavaListener {
|
|||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void enterVariableDeclarationStatement(SimpleJavaParser.VariableDeclarationStatementContext ctx) { }
|
@Override public void enterBlock(SimpleJavaParser.BlockContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void exitVariableDeclarationStatement(SimpleJavaParser.VariableDeclarationStatementContext ctx) { }
|
@Override public void exitBlock(SimpleJavaParser.BlockContext ctx) { }
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void enterAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx) { }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void exitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx) { }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void enterVar(SimpleJavaParser.VarContext ctx) { }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void exitVar(SimpleJavaParser.VarContext ctx) { }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void enterIfStatement(SimpleJavaParser.IfStatementContext ctx) { }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void exitIfStatement(SimpleJavaParser.IfStatementContext ctx) { }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void enterWhileStatement(SimpleJavaParser.WhileStatementContext ctx) { }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation does nothing.</p>
|
|
||||||
*/
|
|
||||||
@Override public void exitWhileStatement(SimpleJavaParser.WhileStatementContext ctx) { }
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -221,13 +161,109 @@ public class SimpleJavaBaseListener implements SimpleJavaListener {
|
|||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void enterBlock(SimpleJavaParser.BlockContext ctx) { }
|
@Override public void enterLocalVariableDeclaration(SimpleJavaParser.LocalVariableDeclarationContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void exitBlock(SimpleJavaParser.BlockContext ctx) { }
|
@Override public void exitLocalVariableDeclaration(SimpleJavaParser.LocalVariableDeclarationContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterWhileStatement(SimpleJavaParser.WhileStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitWhileStatement(SimpleJavaParser.WhileStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterForStatement(SimpleJavaParser.ForStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitForStatement(SimpleJavaParser.ForStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterIfElseStatement(SimpleJavaParser.IfElseStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitIfElseStatement(SimpleJavaParser.IfElseStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterIfStatement(SimpleJavaParser.IfStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitIfStatement(SimpleJavaParser.IfStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterElseStatement(SimpleJavaParser.ElseStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitElseStatement(SimpleJavaParser.ElseStatementContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterStatementExpression(SimpleJavaParser.StatementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitStatementExpression(SimpleJavaParser.StatementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterAssign(SimpleJavaParser.AssignContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitAssign(SimpleJavaParser.AssignContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterNewDeclaration(SimpleJavaParser.NewDeclarationContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitNewDeclaration(SimpleJavaParser.NewDeclarationContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -245,37 +281,265 @@ public class SimpleJavaBaseListener implements SimpleJavaListener {
|
|||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void enterLiteral(SimpleJavaParser.LiteralContext ctx) { }
|
@Override public void enterUnaryExpression(SimpleJavaParser.UnaryExpressionContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void exitLiteral(SimpleJavaParser.LiteralContext ctx) { }
|
@Override public void exitUnaryExpression(SimpleJavaParser.UnaryExpressionContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void enterBooleanLiteral(SimpleJavaParser.BooleanLiteralContext ctx) { }
|
@Override public void enterNotExpression(SimpleJavaParser.NotExpressionContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void exitBooleanLiteral(SimpleJavaParser.BooleanLiteralContext ctx) { }
|
@Override public void exitNotExpression(SimpleJavaParser.NotExpressionContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void enterCharLiteral(SimpleJavaParser.CharLiteralContext ctx) { }
|
@Override public void enterCrementExpression(SimpleJavaParser.CrementExpressionContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void exitCharLiteral(SimpleJavaParser.CharLiteralContext ctx) { }
|
@Override public void exitCrementExpression(SimpleJavaParser.CrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterIncrementExpression(SimpleJavaParser.IncrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitIncrementExpression(SimpleJavaParser.IncrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterPrefixIncrementExpression(SimpleJavaParser.PrefixIncrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitPrefixIncrementExpression(SimpleJavaParser.PrefixIncrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterSuffixIncrementExpression(SimpleJavaParser.SuffixIncrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitSuffixIncrementExpression(SimpleJavaParser.SuffixIncrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterDecrementExpression(SimpleJavaParser.DecrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitDecrementExpression(SimpleJavaParser.DecrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterPrefixDecrementExpression(SimpleJavaParser.PrefixDecrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitPrefixDecrementExpression(SimpleJavaParser.PrefixDecrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterSuffixDecrementExpression(SimpleJavaParser.SuffixDecrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitSuffixDecrementExpression(SimpleJavaParser.SuffixDecrementExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterAssignableExpression(SimpleJavaParser.AssignableExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitAssignableExpression(SimpleJavaParser.AssignableExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterMemberAccess(SimpleJavaParser.MemberAccessContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitMemberAccess(SimpleJavaParser.MemberAccessContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterBinaryExpression(SimpleJavaParser.BinaryExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitBinaryExpression(SimpleJavaParser.BinaryExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterCalculationExpression(SimpleJavaParser.CalculationExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitCalculationExpression(SimpleJavaParser.CalculationExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterDotExpression(SimpleJavaParser.DotExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitDotExpression(SimpleJavaParser.DotExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterDotSubtractionExpression(SimpleJavaParser.DotSubtractionExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitDotSubtractionExpression(SimpleJavaParser.DotSubtractionExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterNonCalculationExpression(SimpleJavaParser.NonCalculationExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitNonCalculationExpression(SimpleJavaParser.NonCalculationExpressionContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterMethodCall(SimpleJavaParser.MethodCallContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitMethodCall(SimpleJavaParser.MethodCallContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterTarget(SimpleJavaParser.TargetContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitTarget(SimpleJavaParser.TargetContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterChainedMethod(SimpleJavaParser.ChainedMethodContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitChainedMethod(SimpleJavaParser.ChainedMethodContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterType(SimpleJavaParser.TypeContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitType(SimpleJavaParser.TypeContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterValue(SimpleJavaParser.ValueContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitValue(SimpleJavaParser.ValueContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterNonCalculationOperator(SimpleJavaParser.NonCalculationOperatorContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitNonCalculationOperator(SimpleJavaParser.NonCalculationOperatorContext ctx) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
|
// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/grammar/SimpleJava.g4 by ANTLR 4.13.1
|
||||||
package parser.generated;
|
package parser.generated;
|
||||||
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
|
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
|
||||||
|
|
||||||
@ -33,6 +33,13 @@ public class SimpleJavaBaseVisitor<T> extends AbstractParseTreeVisitor<T> implem
|
|||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
*/
|
*/
|
||||||
@Override public T visitMemberDeclaration(SimpleJavaParser.MemberDeclarationContext ctx) { return visitChildren(ctx); }
|
@Override public T visitMemberDeclaration(SimpleJavaParser.MemberDeclarationContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx) { return visitChildren(ctx); }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -47,13 +54,6 @@ public class SimpleJavaBaseVisitor<T> extends AbstractParseTreeVisitor<T> implem
|
|||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
*/
|
*/
|
||||||
@Override public T visitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx) { return visitChildren(ctx); }
|
@Override public T visitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx) { return visitChildren(ctx); }
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation returns the result of calling
|
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
|
||||||
*/
|
|
||||||
@Override public T visitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx) { return visitChildren(ctx); }
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -74,14 +74,7 @@ public class SimpleJavaBaseVisitor<T> extends AbstractParseTreeVisitor<T> implem
|
|||||||
* <p>The default implementation returns the result of calling
|
* <p>The default implementation returns the result of calling
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
*/
|
*/
|
||||||
@Override public T visitType(SimpleJavaParser.TypeContext ctx) { return visitChildren(ctx); }
|
@Override public T visitArgumentList(SimpleJavaParser.ArgumentListContext ctx) { return visitChildren(ctx); }
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation returns the result of calling
|
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
|
||||||
*/
|
|
||||||
@Override public T visitAccessType(SimpleJavaParser.AccessTypeContext ctx) { return visitChildren(ctx); }
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -95,35 +88,7 @@ public class SimpleJavaBaseVisitor<T> extends AbstractParseTreeVisitor<T> implem
|
|||||||
* <p>The default implementation returns the result of calling
|
* <p>The default implementation returns the result of calling
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
*/
|
*/
|
||||||
@Override public T visitVariableDeclarationStatement(SimpleJavaParser.VariableDeclarationStatementContext ctx) { return visitChildren(ctx); }
|
@Override public T visitBlock(SimpleJavaParser.BlockContext ctx) { return visitChildren(ctx); }
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation returns the result of calling
|
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
|
||||||
*/
|
|
||||||
@Override public T visitAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx) { return visitChildren(ctx); }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation returns the result of calling
|
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
|
||||||
*/
|
|
||||||
@Override public T visitVar(SimpleJavaParser.VarContext ctx) { return visitChildren(ctx); }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation returns the result of calling
|
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
|
||||||
*/
|
|
||||||
@Override public T visitIfStatement(SimpleJavaParser.IfStatementContext ctx) { return visitChildren(ctx); }
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*
|
|
||||||
* <p>The default implementation returns the result of calling
|
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
|
||||||
*/
|
|
||||||
@Override public T visitWhileStatement(SimpleJavaParser.WhileStatementContext ctx) { return visitChildren(ctx); }
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -137,7 +102,63 @@ public class SimpleJavaBaseVisitor<T> extends AbstractParseTreeVisitor<T> implem
|
|||||||
* <p>The default implementation returns the result of calling
|
* <p>The default implementation returns the result of calling
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
*/
|
*/
|
||||||
@Override public T visitBlock(SimpleJavaParser.BlockContext ctx) { return visitChildren(ctx); }
|
@Override public T visitLocalVariableDeclaration(SimpleJavaParser.LocalVariableDeclarationContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitWhileStatement(SimpleJavaParser.WhileStatementContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitForStatement(SimpleJavaParser.ForStatementContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitIfElseStatement(SimpleJavaParser.IfElseStatementContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitIfStatement(SimpleJavaParser.IfStatementContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitElseStatement(SimpleJavaParser.ElseStatementContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitStatementExpression(SimpleJavaParser.StatementExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitAssign(SimpleJavaParser.AssignContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitNewDeclaration(SimpleJavaParser.NewDeclarationContext ctx) { return visitChildren(ctx); }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
@ -151,19 +172,152 @@ public class SimpleJavaBaseVisitor<T> extends AbstractParseTreeVisitor<T> implem
|
|||||||
* <p>The default implementation returns the result of calling
|
* <p>The default implementation returns the result of calling
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
*/
|
*/
|
||||||
@Override public T visitLiteral(SimpleJavaParser.LiteralContext ctx) { return visitChildren(ctx); }
|
@Override public T visitUnaryExpression(SimpleJavaParser.UnaryExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation returns the result of calling
|
* <p>The default implementation returns the result of calling
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
*/
|
*/
|
||||||
@Override public T visitBooleanLiteral(SimpleJavaParser.BooleanLiteralContext ctx) { return visitChildren(ctx); }
|
@Override public T visitNotExpression(SimpleJavaParser.NotExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* <p>The default implementation returns the result of calling
|
* <p>The default implementation returns the result of calling
|
||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
*/
|
*/
|
||||||
@Override public T visitCharLiteral(SimpleJavaParser.CharLiteralContext ctx) { return visitChildren(ctx); }
|
@Override public T visitCrementExpression(SimpleJavaParser.CrementExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitIncrementExpression(SimpleJavaParser.IncrementExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitPrefixIncrementExpression(SimpleJavaParser.PrefixIncrementExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitSuffixIncrementExpression(SimpleJavaParser.SuffixIncrementExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitDecrementExpression(SimpleJavaParser.DecrementExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitPrefixDecrementExpression(SimpleJavaParser.PrefixDecrementExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitSuffixDecrementExpression(SimpleJavaParser.SuffixDecrementExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitAssignableExpression(SimpleJavaParser.AssignableExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitMemberAccess(SimpleJavaParser.MemberAccessContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitBinaryExpression(SimpleJavaParser.BinaryExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitCalculationExpression(SimpleJavaParser.CalculationExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitDotExpression(SimpleJavaParser.DotExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitDotSubtractionExpression(SimpleJavaParser.DotSubtractionExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitNonCalculationExpression(SimpleJavaParser.NonCalculationExpressionContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitMethodCall(SimpleJavaParser.MethodCallContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitTarget(SimpleJavaParser.TargetContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitChainedMethod(SimpleJavaParser.ChainedMethodContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitType(SimpleJavaParser.TypeContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitValue(SimpleJavaParser.ValueContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitNonCalculationOperator(SimpleJavaParser.NonCalculationOperatorContext ctx) { return visitChildren(ctx); }
|
||||||
}
|
}
|
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
|||||||
// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
|
// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/grammar/SimpleJava.g4 by ANTLR 4.13.1
|
||||||
package parser.generated;
|
package parser.generated;
|
||||||
import org.antlr.v4.runtime.Lexer;
|
import org.antlr.v4.runtime.Lexer;
|
||||||
import org.antlr.v4.runtime.CharStream;
|
import org.antlr.v4.runtime.CharStream;
|
||||||
@ -17,12 +17,15 @@ public class SimpleJavaLexer extends Lexer {
|
|||||||
protected static final PredictionContextCache _sharedContextCache =
|
protected static final PredictionContextCache _sharedContextCache =
|
||||||
new PredictionContextCache();
|
new PredictionContextCache();
|
||||||
public static final int
|
public static final int
|
||||||
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
|
T__0=1, T__1=2, Void=3, Boolean=4, Char=5, Int=6, AccessModifier=7, MainMethodDeclaration=8,
|
||||||
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
|
DotOperator=9, LineOperator=10, ComparisonOperator=11, LogicalOperator=12,
|
||||||
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
|
Assign=13, Plus=14, Minus=15, Mult=16, Modulo=17, Div=18, Greater=19,
|
||||||
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
|
Less=20, GreaterEqual=21, LessEqual=22, Equal=23, NotEqual=24, Not=25,
|
||||||
T__31=32, T__32=33, T__33=34, T__34=35, INTEGERLITERAL=36, IDENTIFIER=37,
|
And=26, Or=27, Dot=28, OpenRoundBracket=29, ClosedRoundBracket=30, OpenCurlyBracket=31,
|
||||||
WS=38;
|
ClosedCurlyBracket=32, Semicolon=33, Comma=34, Class=35, This=36, While=37,
|
||||||
|
If=38, Else=39, For=40, Return=41, New=42, CharValue=43, IntValue=44,
|
||||||
|
BooleanValue=45, NullValue=46, Identifier=47, WS=48, InlineComment=49,
|
||||||
|
MultilineComment=50;
|
||||||
public static String[] channelNames = {
|
public static String[] channelNames = {
|
||||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
||||||
};
|
};
|
||||||
@ -33,31 +36,40 @@ public class SimpleJavaLexer extends Lexer {
|
|||||||
|
|
||||||
private static String[] makeRuleNames() {
|
private static String[] makeRuleNames() {
|
||||||
return new String[] {
|
return new String[] {
|
||||||
"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8",
|
"T__0", "T__1", "Void", "Boolean", "Char", "Int", "AccessModifier", "MainMethodDeclaration",
|
||||||
"T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16",
|
"DotOperator", "LineOperator", "ComparisonOperator", "LogicalOperator",
|
||||||
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
|
"Assign", "Plus", "Minus", "Mult", "Modulo", "Div", "Greater", "Less",
|
||||||
"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32",
|
"GreaterEqual", "LessEqual", "Equal", "NotEqual", "Not", "And", "Or",
|
||||||
"T__33", "T__34", "INTEGERLITERAL", "IDENTIFIER", "WS"
|
"Dot", "OpenRoundBracket", "ClosedRoundBracket", "OpenCurlyBracket",
|
||||||
|
"ClosedCurlyBracket", "Semicolon", "Comma", "Class", "This", "While",
|
||||||
|
"If", "Else", "For", "Return", "New", "CharValue", "IntValue", "BooleanValue",
|
||||||
|
"NullValue", "Alphabetic", "Numeric", "ValidIdentSymbols", "Identifier",
|
||||||
|
"WS", "InlineComment", "MultilineComment"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
public static final String[] ruleNames = makeRuleNames();
|
public static final String[] ruleNames = makeRuleNames();
|
||||||
|
|
||||||
private static String[] makeLiteralNames() {
|
private static String[] makeLiteralNames() {
|
||||||
return new String[] {
|
return new String[] {
|
||||||
null, "'class'", "'{'", "'}'", "';'", "'static'", "'('", "')'", "','",
|
null, "'++'", "'--'", "'void'", "'boolean'", "'char'", "'int'", null,
|
||||||
"'int'", "'boolean'", "'char'", "'public'", "'private'", "'='", "'if'",
|
"'public static void main(String[] args)'", null, null, null, null, "'='",
|
||||||
"'else'", "'while'", "'return'", "'&&'", "'||'", "'=='", "'!='", "'<'",
|
"'+'", "'-'", "'*'", "'%'", "'/'", "'>'", "'<'", "'>='", "'<='", "'=='",
|
||||||
"'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "'true'",
|
"'!='", "'!'", "'&&'", "'||'", "'.'", "'('", "')'", "'{'", "'}'", "';'",
|
||||||
"'false'", "'''"
|
"','", "'class'", "'this'", "'while'", "'if'", "'else'", "'for'", "'return'",
|
||||||
|
"'new'", null, null, null, "'null'"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
private static final String[] _LITERAL_NAMES = makeLiteralNames();
|
private static final String[] _LITERAL_NAMES = makeLiteralNames();
|
||||||
private static String[] makeSymbolicNames() {
|
private static String[] makeSymbolicNames() {
|
||||||
return new String[] {
|
return new String[] {
|
||||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
null, null, null, "Void", "Boolean", "Char", "Int", "AccessModifier",
|
||||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
"MainMethodDeclaration", "DotOperator", "LineOperator", "ComparisonOperator",
|
||||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
"LogicalOperator", "Assign", "Plus", "Minus", "Mult", "Modulo", "Div",
|
||||||
"INTEGERLITERAL", "IDENTIFIER", "WS"
|
"Greater", "Less", "GreaterEqual", "LessEqual", "Equal", "NotEqual",
|
||||||
|
"Not", "And", "Or", "Dot", "OpenRoundBracket", "ClosedRoundBracket",
|
||||||
|
"OpenCurlyBracket", "ClosedCurlyBracket", "Semicolon", "Comma", "Class",
|
||||||
|
"This", "While", "If", "Else", "For", "Return", "New", "CharValue", "IntValue",
|
||||||
|
"BooleanValue", "NullValue", "Identifier", "WS", "InlineComment", "MultilineComment"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
|
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
|
||||||
@ -119,7 +131,7 @@ public class SimpleJavaLexer extends Lexer {
|
|||||||
public ATN getATN() { return _ATN; }
|
public ATN getATN() { return _ATN; }
|
||||||
|
|
||||||
public static final String _serializedATN =
|
public static final String _serializedATN =
|
||||||
"\u0004\u0000&\u00df\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
|
"\u0004\u00002\u0198\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
|
||||||
"\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
|
"\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\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\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
|
||||||
@ -130,43 +142,67 @@ public class SimpleJavaLexer extends Lexer {
|
|||||||
"\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+
|
"\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+
|
||||||
"\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+
|
"\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+
|
||||||
"\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+
|
"\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+
|
||||||
"!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0001\u0000"+
|
"!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+
|
||||||
"\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+
|
"&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+
|
||||||
"\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004"+
|
"+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+
|
||||||
"\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+
|
"0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u0001\u0000"+
|
||||||
"\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+
|
"\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002"+
|
||||||
"\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+
|
"\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+
|
||||||
"\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+
|
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
|
||||||
"\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+
|
"\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+
|
||||||
"\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f"+
|
"\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+
|
||||||
"\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001"+
|
"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+
|
||||||
"\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001"+
|
"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+
|
||||||
"\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001"+
|
"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+
|
||||||
"\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001"+
|
"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+
|
||||||
"\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001"+
|
"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+
|
||||||
"\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+
|
"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+
|
||||||
"\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001"+
|
"\u0001\u0006\u0003\u0006\u00b0\b\u0006\u0001\u0007\u0001\u0007\u0001\u0007"+
|
||||||
"\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001b\u0001"+
|
"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+
|
||||||
"\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001e\u0001"+
|
"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+
|
||||||
"\u001e\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+
|
"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+
|
||||||
"!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001#\u0004#\u00ce"+
|
"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+
|
||||||
"\b#\u000b#\f#\u00cf\u0001$\u0001$\u0005$\u00d4\b$\n$\f$\u00d7\t$\u0001"+
|
"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+
|
||||||
"%\u0004%\u00da\b%\u000b%\f%\u00db\u0001%\u0001%\u0000\u0000&\u0001\u0001"+
|
"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+
|
||||||
|
"\u0001\b\u0001\b\u0001\b\u0003\b\u00dc\b\b\u0001\t\u0001\t\u0003\t\u00e0"+
|
||||||
|
"\b\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0003\n\u00e8\b\n"+
|
||||||
|
"\u0001\u000b\u0001\u000b\u0003\u000b\u00ec\b\u000b\u0001\f\u0001\f\u0001"+
|
||||||
|
"\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010"+
|
||||||
|
"\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013"+
|
||||||
|
"\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+
|
||||||
|
"\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017"+
|
||||||
|
"\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019"+
|
||||||
|
"\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001c"+
|
||||||
|
"\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001f"+
|
||||||
|
"\u0001\u001f\u0001 \u0001 \u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+
|
||||||
|
"\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001$\u0001$\u0001"+
|
||||||
|
"$\u0001$\u0001$\u0001$\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001"+
|
||||||
|
"&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001"+
|
||||||
|
"(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0005*\u014a"+
|
||||||
|
"\b*\n*\f*\u014d\t*\u0001*\u0001*\u0001+\u0003+\u0152\b+\u0001+\u0004+"+
|
||||||
|
"\u0155\b+\u000b+\f+\u0156\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+
|
||||||
|
",\u0001,\u0001,\u0003,\u0162\b,\u0001-\u0001-\u0001-\u0001-\u0001-\u0001"+
|
||||||
|
".\u0001.\u0001/\u0001/\u00010\u00010\u00010\u00030\u0170\b0\u00011\u0001"+
|
||||||
|
"1\u00051\u0174\b1\n1\f1\u0177\t1\u00012\u00042\u017a\b2\u000b2\f2\u017b"+
|
||||||
|
"\u00012\u00012\u00013\u00013\u00013\u00013\u00053\u0184\b3\n3\f3\u0187"+
|
||||||
|
"\t3\u00013\u00013\u00014\u00014\u00014\u00014\u00054\u018f\b4\n4\f4\u0192"+
|
||||||
|
"\t4\u00014\u00014\u00014\u00014\u00014\u0001\u0190\u00005\u0001\u0001"+
|
||||||
"\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f"+
|
"\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f"+
|
||||||
"\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f"+
|
"\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f"+
|
||||||
"\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/\u0018"+
|
"\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/\u0018"+
|
||||||
"1\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K&\u0001"+
|
"1\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O("+
|
||||||
"\u0000\u0004\u0001\u000009\u0002\u0000AZaz\u0004\u000009AZ__az\u0003\u0000"+
|
"Q)S*U+W,Y-[.]\u0000_\u0000a\u0000c/e0g1i2\u0001\u0000\u0005\u0002\u0000"+
|
||||||
"\t\n\r\r \u00e1\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+
|
"\n\n\r\r\u0002\u0000AZaz\u0001\u000009\u0002\u0000$$__\u0003\u0000\t\n"+
|
||||||
"\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+
|
"\r\r \u01aa\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000"+
|
||||||
"\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+
|
"\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000"+
|
||||||
"\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+
|
"\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000"+
|
||||||
"\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+
|
"\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000"+
|
||||||
"\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+
|
"\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000"+
|
||||||
"\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+
|
"\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000"+
|
||||||
"\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+
|
"\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000"+
|
||||||
"\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+
|
"\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000"+
|
||||||
"%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+
|
"\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%"+
|
||||||
|
"\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+
|
||||||
"\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+
|
"\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+
|
||||||
"\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+
|
"\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+
|
||||||
"3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+
|
"3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+
|
||||||
@ -174,84 +210,179 @@ public class SimpleJavaLexer extends Lexer {
|
|||||||
"\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+
|
"\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+
|
||||||
"A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+
|
"A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+
|
||||||
"\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+
|
"\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+
|
||||||
"\u0000\u0000K\u0001\u0000\u0000\u0000\u0001M\u0001\u0000\u0000\u0000\u0003"+
|
"\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+
|
||||||
"S\u0001\u0000\u0000\u0000\u0005U\u0001\u0000\u0000\u0000\u0007W\u0001"+
|
"O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+
|
||||||
"\u0000\u0000\u0000\tY\u0001\u0000\u0000\u0000\u000b`\u0001\u0000\u0000"+
|
"\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+
|
||||||
"\u0000\rb\u0001\u0000\u0000\u0000\u000fd\u0001\u0000\u0000\u0000\u0011"+
|
"\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+
|
||||||
"f\u0001\u0000\u0000\u0000\u0013j\u0001\u0000\u0000\u0000\u0015r\u0001"+
|
"c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000\u0000g\u0001"+
|
||||||
"\u0000\u0000\u0000\u0017w\u0001\u0000\u0000\u0000\u0019~\u0001\u0000\u0000"+
|
"\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0001k\u0001\u0000\u0000"+
|
||||||
"\u0000\u001b\u0086\u0001\u0000\u0000\u0000\u001d\u0088\u0001\u0000\u0000"+
|
"\u0000\u0003n\u0001\u0000\u0000\u0000\u0005q\u0001\u0000\u0000\u0000\u0007"+
|
||||||
"\u0000\u001f\u008b\u0001\u0000\u0000\u0000!\u0090\u0001\u0000\u0000\u0000"+
|
"v\u0001\u0000\u0000\u0000\t~\u0001\u0000\u0000\u0000\u000b\u0083\u0001"+
|
||||||
"#\u0096\u0001\u0000\u0000\u0000%\u009d\u0001\u0000\u0000\u0000\'\u00a0"+
|
"\u0000\u0000\u0000\r\u00af\u0001\u0000\u0000\u0000\u000f\u00b1\u0001\u0000"+
|
||||||
"\u0001\u0000\u0000\u0000)\u00a3\u0001\u0000\u0000\u0000+\u00a6\u0001\u0000"+
|
"\u0000\u0000\u0011\u00db\u0001\u0000\u0000\u0000\u0013\u00df\u0001\u0000"+
|
||||||
"\u0000\u0000-\u00a9\u0001\u0000\u0000\u0000/\u00ab\u0001\u0000\u0000\u0000"+
|
"\u0000\u0000\u0015\u00e7\u0001\u0000\u0000\u0000\u0017\u00eb\u0001\u0000"+
|
||||||
"1\u00ae\u0001\u0000\u0000\u00003\u00b0\u0001\u0000\u0000\u00005\u00b3"+
|
"\u0000\u0000\u0019\u00ed\u0001\u0000\u0000\u0000\u001b\u00ef\u0001\u0000"+
|
||||||
"\u0001\u0000\u0000\u00007\u00b5\u0001\u0000\u0000\u00009\u00b7\u0001\u0000"+
|
"\u0000\u0000\u001d\u00f1\u0001\u0000\u0000\u0000\u001f\u00f3\u0001\u0000"+
|
||||||
"\u0000\u0000;\u00b9\u0001\u0000\u0000\u0000=\u00bb\u0001\u0000\u0000\u0000"+
|
"\u0000\u0000!\u00f5\u0001\u0000\u0000\u0000#\u00f7\u0001\u0000\u0000\u0000"+
|
||||||
"?\u00bd\u0001\u0000\u0000\u0000A\u00bf\u0001\u0000\u0000\u0000C\u00c4"+
|
"%\u00f9\u0001\u0000\u0000\u0000\'\u00fb\u0001\u0000\u0000\u0000)\u00fd"+
|
||||||
"\u0001\u0000\u0000\u0000E\u00ca\u0001\u0000\u0000\u0000G\u00cd\u0001\u0000"+
|
"\u0001\u0000\u0000\u0000+\u0100\u0001\u0000\u0000\u0000-\u0103\u0001\u0000"+
|
||||||
"\u0000\u0000I\u00d1\u0001\u0000\u0000\u0000K\u00d9\u0001\u0000\u0000\u0000"+
|
"\u0000\u0000/\u0106\u0001\u0000\u0000\u00001\u0109\u0001\u0000\u0000\u0000"+
|
||||||
"MN\u0005c\u0000\u0000NO\u0005l\u0000\u0000OP\u0005a\u0000\u0000PQ\u0005"+
|
"3\u010b\u0001\u0000\u0000\u00005\u010e\u0001\u0000\u0000\u00007\u0111"+
|
||||||
"s\u0000\u0000QR\u0005s\u0000\u0000R\u0002\u0001\u0000\u0000\u0000ST\u0005"+
|
"\u0001\u0000\u0000\u00009\u0113\u0001\u0000\u0000\u0000;\u0115\u0001\u0000"+
|
||||||
"{\u0000\u0000T\u0004\u0001\u0000\u0000\u0000UV\u0005}\u0000\u0000V\u0006"+
|
"\u0000\u0000=\u0117\u0001\u0000\u0000\u0000?\u0119\u0001\u0000\u0000\u0000"+
|
||||||
"\u0001\u0000\u0000\u0000WX\u0005;\u0000\u0000X\b\u0001\u0000\u0000\u0000"+
|
"A\u011b\u0001\u0000\u0000\u0000C\u011d\u0001\u0000\u0000\u0000E\u011f"+
|
||||||
"YZ\u0005s\u0000\u0000Z[\u0005t\u0000\u0000[\\\u0005a\u0000\u0000\\]\u0005"+
|
"\u0001\u0000\u0000\u0000G\u0125\u0001\u0000\u0000\u0000I\u012a\u0001\u0000"+
|
||||||
"t\u0000\u0000]^\u0005i\u0000\u0000^_\u0005c\u0000\u0000_\n\u0001\u0000"+
|
"\u0000\u0000K\u0130\u0001\u0000\u0000\u0000M\u0133\u0001\u0000\u0000\u0000"+
|
||||||
"\u0000\u0000`a\u0005(\u0000\u0000a\f\u0001\u0000\u0000\u0000bc\u0005)"+
|
"O\u0138\u0001\u0000\u0000\u0000Q\u013c\u0001\u0000\u0000\u0000S\u0143"+
|
||||||
"\u0000\u0000c\u000e\u0001\u0000\u0000\u0000de\u0005,\u0000\u0000e\u0010"+
|
"\u0001\u0000\u0000\u0000U\u0147\u0001\u0000\u0000\u0000W\u0151\u0001\u0000"+
|
||||||
"\u0001\u0000\u0000\u0000fg\u0005i\u0000\u0000gh\u0005n\u0000\u0000hi\u0005"+
|
"\u0000\u0000Y\u0161\u0001\u0000\u0000\u0000[\u0163\u0001\u0000\u0000\u0000"+
|
||||||
"t\u0000\u0000i\u0012\u0001\u0000\u0000\u0000jk\u0005b\u0000\u0000kl\u0005"+
|
"]\u0168\u0001\u0000\u0000\u0000_\u016a\u0001\u0000\u0000\u0000a\u016f"+
|
||||||
"o\u0000\u0000lm\u0005o\u0000\u0000mn\u0005l\u0000\u0000no\u0005e\u0000"+
|
"\u0001\u0000\u0000\u0000c\u0171\u0001\u0000\u0000\u0000e\u0179\u0001\u0000"+
|
||||||
"\u0000op\u0005a\u0000\u0000pq\u0005n\u0000\u0000q\u0014\u0001\u0000\u0000"+
|
"\u0000\u0000g\u017f\u0001\u0000\u0000\u0000i\u018a\u0001\u0000\u0000\u0000"+
|
||||||
"\u0000rs\u0005c\u0000\u0000st\u0005h\u0000\u0000tu\u0005a\u0000\u0000"+
|
"kl\u0005+\u0000\u0000lm\u0005+\u0000\u0000m\u0002\u0001\u0000\u0000\u0000"+
|
||||||
"uv\u0005r\u0000\u0000v\u0016\u0001\u0000\u0000\u0000wx\u0005p\u0000\u0000"+
|
"no\u0005-\u0000\u0000op\u0005-\u0000\u0000p\u0004\u0001\u0000\u0000\u0000"+
|
||||||
"xy\u0005u\u0000\u0000yz\u0005b\u0000\u0000z{\u0005l\u0000\u0000{|\u0005"+
|
"qr\u0005v\u0000\u0000rs\u0005o\u0000\u0000st\u0005i\u0000\u0000tu\u0005"+
|
||||||
"i\u0000\u0000|}\u0005c\u0000\u0000}\u0018\u0001\u0000\u0000\u0000~\u007f"+
|
"d\u0000\u0000u\u0006\u0001\u0000\u0000\u0000vw\u0005b\u0000\u0000wx\u0005"+
|
||||||
"\u0005p\u0000\u0000\u007f\u0080\u0005r\u0000\u0000\u0080\u0081\u0005i"+
|
"o\u0000\u0000xy\u0005o\u0000\u0000yz\u0005l\u0000\u0000z{\u0005e\u0000"+
|
||||||
"\u0000\u0000\u0081\u0082\u0005v\u0000\u0000\u0082\u0083\u0005a\u0000\u0000"+
|
"\u0000{|\u0005a\u0000\u0000|}\u0005n\u0000\u0000}\b\u0001\u0000\u0000"+
|
||||||
"\u0083\u0084\u0005t\u0000\u0000\u0084\u0085\u0005e\u0000\u0000\u0085\u001a"+
|
"\u0000~\u007f\u0005c\u0000\u0000\u007f\u0080\u0005h\u0000\u0000\u0080"+
|
||||||
"\u0001\u0000\u0000\u0000\u0086\u0087\u0005=\u0000\u0000\u0087\u001c\u0001"+
|
"\u0081\u0005a\u0000\u0000\u0081\u0082\u0005r\u0000\u0000\u0082\n\u0001"+
|
||||||
"\u0000\u0000\u0000\u0088\u0089\u0005i\u0000\u0000\u0089\u008a\u0005f\u0000"+
|
"\u0000\u0000\u0000\u0083\u0084\u0005i\u0000\u0000\u0084\u0085\u0005n\u0000"+
|
||||||
"\u0000\u008a\u001e\u0001\u0000\u0000\u0000\u008b\u008c\u0005e\u0000\u0000"+
|
"\u0000\u0085\u0086\u0005t\u0000\u0000\u0086\f\u0001\u0000\u0000\u0000"+
|
||||||
"\u008c\u008d\u0005l\u0000\u0000\u008d\u008e\u0005s\u0000\u0000\u008e\u008f"+
|
"\u0087\u0088\u0005p\u0000\u0000\u0088\u0089\u0005u\u0000\u0000\u0089\u008a"+
|
||||||
"\u0005e\u0000\u0000\u008f \u0001\u0000\u0000\u0000\u0090\u0091\u0005w"+
|
"\u0005b\u0000\u0000\u008a\u008b\u0005l\u0000\u0000\u008b\u008c\u0005i"+
|
||||||
"\u0000\u0000\u0091\u0092\u0005h\u0000\u0000\u0092\u0093\u0005i\u0000\u0000"+
|
"\u0000\u0000\u008c\u00b0\u0005c\u0000\u0000\u008d\u008e\u0005p\u0000\u0000"+
|
||||||
"\u0093\u0094\u0005l\u0000\u0000\u0094\u0095\u0005e\u0000\u0000\u0095\""+
|
"\u008e\u008f\u0005r\u0000\u0000\u008f\u0090\u0005i\u0000\u0000\u0090\u0091"+
|
||||||
"\u0001\u0000\u0000\u0000\u0096\u0097\u0005r\u0000\u0000\u0097\u0098\u0005"+
|
"\u0005v\u0000\u0000\u0091\u0092\u0005a\u0000\u0000\u0092\u0093\u0005t"+
|
||||||
"e\u0000\u0000\u0098\u0099\u0005t\u0000\u0000\u0099\u009a\u0005u\u0000"+
|
"\u0000\u0000\u0093\u00b0\u0005e\u0000\u0000\u0094\u0095\u0005p\u0000\u0000"+
|
||||||
"\u0000\u009a\u009b\u0005r\u0000\u0000\u009b\u009c\u0005n\u0000\u0000\u009c"+
|
"\u0095\u0096\u0005u\u0000\u0000\u0096\u0097\u0005b\u0000\u0000\u0097\u0098"+
|
||||||
"$\u0001\u0000\u0000\u0000\u009d\u009e\u0005&\u0000\u0000\u009e\u009f\u0005"+
|
"\u0005l\u0000\u0000\u0098\u0099\u0005i\u0000\u0000\u0099\u009a\u0005c"+
|
||||||
"&\u0000\u0000\u009f&\u0001\u0000\u0000\u0000\u00a0\u00a1\u0005|\u0000"+
|
"\u0000\u0000\u009a\u009b\u0005 \u0000\u0000\u009b\u009c\u0005s\u0000\u0000"+
|
||||||
"\u0000\u00a1\u00a2\u0005|\u0000\u0000\u00a2(\u0001\u0000\u0000\u0000\u00a3"+
|
"\u009c\u009d\u0005t\u0000\u0000\u009d\u009e\u0005a\u0000\u0000\u009e\u009f"+
|
||||||
"\u00a4\u0005=\u0000\u0000\u00a4\u00a5\u0005=\u0000\u0000\u00a5*\u0001"+
|
"\u0005t\u0000\u0000\u009f\u00a0\u0005i\u0000\u0000\u00a0\u00b0\u0005c"+
|
||||||
"\u0000\u0000\u0000\u00a6\u00a7\u0005!\u0000\u0000\u00a7\u00a8\u0005=\u0000"+
|
"\u0000\u0000\u00a1\u00a2\u0005p\u0000\u0000\u00a2\u00a3\u0005r\u0000\u0000"+
|
||||||
"\u0000\u00a8,\u0001\u0000\u0000\u0000\u00a9\u00aa\u0005<\u0000\u0000\u00aa"+
|
"\u00a3\u00a4\u0005i\u0000\u0000\u00a4\u00a5\u0005v\u0000\u0000\u00a5\u00a6"+
|
||||||
".\u0001\u0000\u0000\u0000\u00ab\u00ac\u0005<\u0000\u0000\u00ac\u00ad\u0005"+
|
"\u0005a\u0000\u0000\u00a6\u00a7\u0005t\u0000\u0000\u00a7\u00a8\u0005e"+
|
||||||
"=\u0000\u0000\u00ad0\u0001\u0000\u0000\u0000\u00ae\u00af\u0005>\u0000"+
|
"\u0000\u0000\u00a8\u00a9\u0005 \u0000\u0000\u00a9\u00aa\u0005s\u0000\u0000"+
|
||||||
"\u0000\u00af2\u0001\u0000\u0000\u0000\u00b0\u00b1\u0005>\u0000\u0000\u00b1"+
|
"\u00aa\u00ab\u0005t\u0000\u0000\u00ab\u00ac\u0005a\u0000\u0000\u00ac\u00ad"+
|
||||||
"\u00b2\u0005=\u0000\u0000\u00b24\u0001\u0000\u0000\u0000\u00b3\u00b4\u0005"+
|
"\u0005t\u0000\u0000\u00ad\u00ae\u0005i\u0000\u0000\u00ae\u00b0\u0005c"+
|
||||||
"+\u0000\u0000\u00b46\u0001\u0000\u0000\u0000\u00b5\u00b6\u0005-\u0000"+
|
"\u0000\u0000\u00af\u0087\u0001\u0000\u0000\u0000\u00af\u008d\u0001\u0000"+
|
||||||
"\u0000\u00b68\u0001\u0000\u0000\u0000\u00b7\u00b8\u0005*\u0000\u0000\u00b8"+
|
"\u0000\u0000\u00af\u0094\u0001\u0000\u0000\u0000\u00af\u00a1\u0001\u0000"+
|
||||||
":\u0001\u0000\u0000\u0000\u00b9\u00ba\u0005/\u0000\u0000\u00ba<\u0001"+
|
"\u0000\u0000\u00b0\u000e\u0001\u0000\u0000\u0000\u00b1\u00b2\u0005p\u0000"+
|
||||||
"\u0000\u0000\u0000\u00bb\u00bc\u0005%\u0000\u0000\u00bc>\u0001\u0000\u0000"+
|
"\u0000\u00b2\u00b3\u0005u\u0000\u0000\u00b3\u00b4\u0005b\u0000\u0000\u00b4"+
|
||||||
"\u0000\u00bd\u00be\u0005!\u0000\u0000\u00be@\u0001\u0000\u0000\u0000\u00bf"+
|
"\u00b5\u0005l\u0000\u0000\u00b5\u00b6\u0005i\u0000\u0000\u00b6\u00b7\u0005"+
|
||||||
"\u00c0\u0005t\u0000\u0000\u00c0\u00c1\u0005r\u0000\u0000\u00c1\u00c2\u0005"+
|
"c\u0000\u0000\u00b7\u00b8\u0005 \u0000\u0000\u00b8\u00b9\u0005s\u0000"+
|
||||||
"u\u0000\u0000\u00c2\u00c3\u0005e\u0000\u0000\u00c3B\u0001\u0000\u0000"+
|
"\u0000\u00b9\u00ba\u0005t\u0000\u0000\u00ba\u00bb\u0005a\u0000\u0000\u00bb"+
|
||||||
"\u0000\u00c4\u00c5\u0005f\u0000\u0000\u00c5\u00c6\u0005a\u0000\u0000\u00c6"+
|
"\u00bc\u0005t\u0000\u0000\u00bc\u00bd\u0005i\u0000\u0000\u00bd\u00be\u0005"+
|
||||||
"\u00c7\u0005l\u0000\u0000\u00c7\u00c8\u0005s\u0000\u0000\u00c8\u00c9\u0005"+
|
"c\u0000\u0000\u00be\u00bf\u0005 \u0000\u0000\u00bf\u00c0\u0005v\u0000"+
|
||||||
"e\u0000\u0000\u00c9D\u0001\u0000\u0000\u0000\u00ca\u00cb\u0005\'\u0000"+
|
"\u0000\u00c0\u00c1\u0005o\u0000\u0000\u00c1\u00c2\u0005i\u0000\u0000\u00c2"+
|
||||||
"\u0000\u00cbF\u0001\u0000\u0000\u0000\u00cc\u00ce\u0007\u0000\u0000\u0000"+
|
"\u00c3\u0005d\u0000\u0000\u00c3\u00c4\u0005 \u0000\u0000\u00c4\u00c5\u0005"+
|
||||||
"\u00cd\u00cc\u0001\u0000\u0000\u0000\u00ce\u00cf\u0001\u0000\u0000\u0000"+
|
"m\u0000\u0000\u00c5\u00c6\u0005a\u0000\u0000\u00c6\u00c7\u0005i\u0000"+
|
||||||
"\u00cf\u00cd\u0001\u0000\u0000\u0000\u00cf\u00d0\u0001\u0000\u0000\u0000"+
|
"\u0000\u00c7\u00c8\u0005n\u0000\u0000\u00c8\u00c9\u0005(\u0000\u0000\u00c9"+
|
||||||
"\u00d0H\u0001\u0000\u0000\u0000\u00d1\u00d5\u0007\u0001\u0000\u0000\u00d2"+
|
"\u00ca\u0005S\u0000\u0000\u00ca\u00cb\u0005t\u0000\u0000\u00cb\u00cc\u0005"+
|
||||||
"\u00d4\u0007\u0002\u0000\u0000\u00d3\u00d2\u0001\u0000\u0000\u0000\u00d4"+
|
"r\u0000\u0000\u00cc\u00cd\u0005i\u0000\u0000\u00cd\u00ce\u0005n\u0000"+
|
||||||
"\u00d7\u0001\u0000\u0000\u0000\u00d5\u00d3\u0001\u0000\u0000\u0000\u00d5"+
|
"\u0000\u00ce\u00cf\u0005g\u0000\u0000\u00cf\u00d0\u0005[\u0000\u0000\u00d0"+
|
||||||
"\u00d6\u0001\u0000\u0000\u0000\u00d6J\u0001\u0000\u0000\u0000\u00d7\u00d5"+
|
"\u00d1\u0005]\u0000\u0000\u00d1\u00d2\u0005 \u0000\u0000\u00d2\u00d3\u0005"+
|
||||||
"\u0001\u0000\u0000\u0000\u00d8\u00da\u0007\u0003\u0000\u0000\u00d9\u00d8"+
|
"a\u0000\u0000\u00d3\u00d4\u0005r\u0000\u0000\u00d4\u00d5\u0005g\u0000"+
|
||||||
"\u0001\u0000\u0000\u0000\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u00d9"+
|
"\u0000\u00d5\u00d6\u0005s\u0000\u0000\u00d6\u00d7\u0005)\u0000\u0000\u00d7"+
|
||||||
"\u0001\u0000\u0000\u0000\u00db\u00dc\u0001\u0000\u0000\u0000\u00dc\u00dd"+
|
"\u0010\u0001\u0000\u0000\u0000\u00d8\u00dc\u0003\u001f\u000f\u0000\u00d9"+
|
||||||
"\u0001\u0000\u0000\u0000\u00dd\u00de\u0006%\u0000\u0000\u00deL\u0001\u0000"+
|
"\u00dc\u0003#\u0011\u0000\u00da\u00dc\u0003!\u0010\u0000\u00db\u00d8\u0001"+
|
||||||
"\u0000\u0000\u0004\u0000\u00cf\u00d5\u00db\u0001\u0006\u0000\u0000";
|
"\u0000\u0000\u0000\u00db\u00d9\u0001\u0000\u0000\u0000\u00db\u00da\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u00dc\u0012\u0001\u0000\u0000\u0000\u00dd\u00e0\u0003"+
|
||||||
|
"\u001b\r\u0000\u00de\u00e0\u0003\u001d\u000e\u0000\u00df\u00dd\u0001\u0000"+
|
||||||
|
"\u0000\u0000\u00df\u00de\u0001\u0000\u0000\u0000\u00e0\u0014\u0001\u0000"+
|
||||||
|
"\u0000\u0000\u00e1\u00e8\u0003%\u0012\u0000\u00e2\u00e8\u0003\'\u0013"+
|
||||||
|
"\u0000\u00e3\u00e8\u0003)\u0014\u0000\u00e4\u00e8\u0003+\u0015\u0000\u00e5"+
|
||||||
|
"\u00e8\u0003-\u0016\u0000\u00e6\u00e8\u0003/\u0017\u0000\u00e7\u00e1\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u00e7\u00e2\u0001\u0000\u0000\u0000\u00e7\u00e3\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u00e7\u00e4\u0001\u0000\u0000\u0000\u00e7\u00e5\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u00e7\u00e6\u0001\u0000\u0000\u0000\u00e8\u0016\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u00e9\u00ec\u00033\u0019\u0000\u00ea\u00ec\u00035\u001a"+
|
||||||
|
"\u0000\u00eb\u00e9\u0001\u0000\u0000\u0000\u00eb\u00ea\u0001\u0000\u0000"+
|
||||||
|
"\u0000\u00ec\u0018\u0001\u0000\u0000\u0000\u00ed\u00ee\u0005=\u0000\u0000"+
|
||||||
|
"\u00ee\u001a\u0001\u0000\u0000\u0000\u00ef\u00f0\u0005+\u0000\u0000\u00f0"+
|
||||||
|
"\u001c\u0001\u0000\u0000\u0000\u00f1\u00f2\u0005-\u0000\u0000\u00f2\u001e"+
|
||||||
|
"\u0001\u0000\u0000\u0000\u00f3\u00f4\u0005*\u0000\u0000\u00f4 \u0001\u0000"+
|
||||||
|
"\u0000\u0000\u00f5\u00f6\u0005%\u0000\u0000\u00f6\"\u0001\u0000\u0000"+
|
||||||
|
"\u0000\u00f7\u00f8\u0005/\u0000\u0000\u00f8$\u0001\u0000\u0000\u0000\u00f9"+
|
||||||
|
"\u00fa\u0005>\u0000\u0000\u00fa&\u0001\u0000\u0000\u0000\u00fb\u00fc\u0005"+
|
||||||
|
"<\u0000\u0000\u00fc(\u0001\u0000\u0000\u0000\u00fd\u00fe\u0005>\u0000"+
|
||||||
|
"\u0000\u00fe\u00ff\u0005=\u0000\u0000\u00ff*\u0001\u0000\u0000\u0000\u0100"+
|
||||||
|
"\u0101\u0005<\u0000\u0000\u0101\u0102\u0005=\u0000\u0000\u0102,\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u0103\u0104\u0005=\u0000\u0000\u0104\u0105\u0005=\u0000"+
|
||||||
|
"\u0000\u0105.\u0001\u0000\u0000\u0000\u0106\u0107\u0005!\u0000\u0000\u0107"+
|
||||||
|
"\u0108\u0005=\u0000\u0000\u01080\u0001\u0000\u0000\u0000\u0109\u010a\u0005"+
|
||||||
|
"!\u0000\u0000\u010a2\u0001\u0000\u0000\u0000\u010b\u010c\u0005&\u0000"+
|
||||||
|
"\u0000\u010c\u010d\u0005&\u0000\u0000\u010d4\u0001\u0000\u0000\u0000\u010e"+
|
||||||
|
"\u010f\u0005|\u0000\u0000\u010f\u0110\u0005|\u0000\u0000\u01106\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u0111\u0112\u0005.\u0000\u0000\u01128\u0001\u0000\u0000"+
|
||||||
|
"\u0000\u0113\u0114\u0005(\u0000\u0000\u0114:\u0001\u0000\u0000\u0000\u0115"+
|
||||||
|
"\u0116\u0005)\u0000\u0000\u0116<\u0001\u0000\u0000\u0000\u0117\u0118\u0005"+
|
||||||
|
"{\u0000\u0000\u0118>\u0001\u0000\u0000\u0000\u0119\u011a\u0005}\u0000"+
|
||||||
|
"\u0000\u011a@\u0001\u0000\u0000\u0000\u011b\u011c\u0005;\u0000\u0000\u011c"+
|
||||||
|
"B\u0001\u0000\u0000\u0000\u011d\u011e\u0005,\u0000\u0000\u011eD\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u011f\u0120\u0005c\u0000\u0000\u0120\u0121\u0005l\u0000"+
|
||||||
|
"\u0000\u0121\u0122\u0005a\u0000\u0000\u0122\u0123\u0005s\u0000\u0000\u0123"+
|
||||||
|
"\u0124\u0005s\u0000\u0000\u0124F\u0001\u0000\u0000\u0000\u0125\u0126\u0005"+
|
||||||
|
"t\u0000\u0000\u0126\u0127\u0005h\u0000\u0000\u0127\u0128\u0005i\u0000"+
|
||||||
|
"\u0000\u0128\u0129\u0005s\u0000\u0000\u0129H\u0001\u0000\u0000\u0000\u012a"+
|
||||||
|
"\u012b\u0005w\u0000\u0000\u012b\u012c\u0005h\u0000\u0000\u012c\u012d\u0005"+
|
||||||
|
"i\u0000\u0000\u012d\u012e\u0005l\u0000\u0000\u012e\u012f\u0005e\u0000"+
|
||||||
|
"\u0000\u012fJ\u0001\u0000\u0000\u0000\u0130\u0131\u0005i\u0000\u0000\u0131"+
|
||||||
|
"\u0132\u0005f\u0000\u0000\u0132L\u0001\u0000\u0000\u0000\u0133\u0134\u0005"+
|
||||||
|
"e\u0000\u0000\u0134\u0135\u0005l\u0000\u0000\u0135\u0136\u0005s\u0000"+
|
||||||
|
"\u0000\u0136\u0137\u0005e\u0000\u0000\u0137N\u0001\u0000\u0000\u0000\u0138"+
|
||||||
|
"\u0139\u0005f\u0000\u0000\u0139\u013a\u0005o\u0000\u0000\u013a\u013b\u0005"+
|
||||||
|
"r\u0000\u0000\u013bP\u0001\u0000\u0000\u0000\u013c\u013d\u0005r\u0000"+
|
||||||
|
"\u0000\u013d\u013e\u0005e\u0000\u0000\u013e\u013f\u0005t\u0000\u0000\u013f"+
|
||||||
|
"\u0140\u0005u\u0000\u0000\u0140\u0141\u0005r\u0000\u0000\u0141\u0142\u0005"+
|
||||||
|
"n\u0000\u0000\u0142R\u0001\u0000\u0000\u0000\u0143\u0144\u0005n\u0000"+
|
||||||
|
"\u0000\u0144\u0145\u0005e\u0000\u0000\u0145\u0146\u0005w\u0000\u0000\u0146"+
|
||||||
|
"T\u0001\u0000\u0000\u0000\u0147\u014b\u0005\'\u0000\u0000\u0148\u014a"+
|
||||||
|
"\b\u0000\u0000\u0000\u0149\u0148\u0001\u0000\u0000\u0000\u014a\u014d\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u014b\u0149\u0001\u0000\u0000\u0000\u014b\u014c\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u014c\u014e\u0001\u0000\u0000\u0000\u014d\u014b\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u014e\u014f\u0005\'\u0000\u0000\u014fV\u0001\u0000"+
|
||||||
|
"\u0000\u0000\u0150\u0152\u0003\u001d\u000e\u0000\u0151\u0150\u0001\u0000"+
|
||||||
|
"\u0000\u0000\u0151\u0152\u0001\u0000\u0000\u0000\u0152\u0154\u0001\u0000"+
|
||||||
|
"\u0000\u0000\u0153\u0155\u0003_/\u0000\u0154\u0153\u0001\u0000\u0000\u0000"+
|
||||||
|
"\u0155\u0156\u0001\u0000\u0000\u0000\u0156\u0154\u0001\u0000\u0000\u0000"+
|
||||||
|
"\u0156\u0157\u0001\u0000\u0000\u0000\u0157X\u0001\u0000\u0000\u0000\u0158"+
|
||||||
|
"\u0159\u0005t\u0000\u0000\u0159\u015a\u0005r\u0000\u0000\u015a\u015b\u0005"+
|
||||||
|
"u\u0000\u0000\u015b\u0162\u0005e\u0000\u0000\u015c\u015d\u0005f\u0000"+
|
||||||
|
"\u0000\u015d\u015e\u0005a\u0000\u0000\u015e\u015f\u0005l\u0000\u0000\u015f"+
|
||||||
|
"\u0160\u0005s\u0000\u0000\u0160\u0162\u0005e\u0000\u0000\u0161\u0158\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u0161\u015c\u0001\u0000\u0000\u0000\u0162Z\u0001\u0000"+
|
||||||
|
"\u0000\u0000\u0163\u0164\u0005n\u0000\u0000\u0164\u0165\u0005u\u0000\u0000"+
|
||||||
|
"\u0165\u0166\u0005l\u0000\u0000\u0166\u0167\u0005l\u0000\u0000\u0167\\"+
|
||||||
|
"\u0001\u0000\u0000\u0000\u0168\u0169\u0007\u0001\u0000\u0000\u0169^\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u016a\u016b\u0007\u0002\u0000\u0000\u016b`\u0001\u0000"+
|
||||||
|
"\u0000\u0000\u016c\u0170\u0003].\u0000\u016d\u0170\u0003_/\u0000\u016e"+
|
||||||
|
"\u0170\u0007\u0003\u0000\u0000\u016f\u016c\u0001\u0000\u0000\u0000\u016f"+
|
||||||
|
"\u016d\u0001\u0000\u0000\u0000\u016f\u016e\u0001\u0000\u0000\u0000\u0170"+
|
||||||
|
"b\u0001\u0000\u0000\u0000\u0171\u0175\u0003].\u0000\u0172\u0174\u0003"+
|
||||||
|
"a0\u0000\u0173\u0172\u0001\u0000\u0000\u0000\u0174\u0177\u0001\u0000\u0000"+
|
||||||
|
"\u0000\u0175\u0173\u0001\u0000\u0000\u0000\u0175\u0176\u0001\u0000\u0000"+
|
||||||
|
"\u0000\u0176d\u0001\u0000\u0000\u0000\u0177\u0175\u0001\u0000\u0000\u0000"+
|
||||||
|
"\u0178\u017a\u0007\u0004\u0000\u0000\u0179\u0178\u0001\u0000\u0000\u0000"+
|
||||||
|
"\u017a\u017b\u0001\u0000\u0000\u0000\u017b\u0179\u0001\u0000\u0000\u0000"+
|
||||||
|
"\u017b\u017c\u0001\u0000\u0000\u0000\u017c\u017d\u0001\u0000\u0000\u0000"+
|
||||||
|
"\u017d\u017e\u00062\u0000\u0000\u017ef\u0001\u0000\u0000\u0000\u017f\u0180"+
|
||||||
|
"\u0005/\u0000\u0000\u0180\u0181\u0005/\u0000\u0000\u0181\u0185\u0001\u0000"+
|
||||||
|
"\u0000\u0000\u0182\u0184\b\u0000\u0000\u0000\u0183\u0182\u0001\u0000\u0000"+
|
||||||
|
"\u0000\u0184\u0187\u0001\u0000\u0000\u0000\u0185\u0183\u0001\u0000\u0000"+
|
||||||
|
"\u0000\u0185\u0186\u0001\u0000\u0000\u0000\u0186\u0188\u0001\u0000\u0000"+
|
||||||
|
"\u0000\u0187\u0185\u0001\u0000\u0000\u0000\u0188\u0189\u00063\u0000\u0000"+
|
||||||
|
"\u0189h\u0001\u0000\u0000\u0000\u018a\u018b\u0005/\u0000\u0000\u018b\u018c"+
|
||||||
|
"\u0005*\u0000\u0000\u018c\u0190\u0001\u0000\u0000\u0000\u018d\u018f\t"+
|
||||||
|
"\u0000\u0000\u0000\u018e\u018d\u0001\u0000\u0000\u0000\u018f\u0192\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u0190\u0191\u0001\u0000\u0000\u0000\u0190\u018e\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u0191\u0193\u0001\u0000\u0000\u0000\u0192\u0190\u0001"+
|
||||||
|
"\u0000\u0000\u0000\u0193\u0194\u0005*\u0000\u0000\u0194\u0195\u0005/\u0000"+
|
||||||
|
"\u0000\u0195\u0196\u0001\u0000\u0000\u0000\u0196\u0197\u00064\u0000\u0000"+
|
||||||
|
"\u0197j\u0001\u0000\u0000\u0000\u000f\u0000\u00af\u00db\u00df\u00e7\u00eb"+
|
||||||
|
"\u014b\u0151\u0156\u0161\u016f\u0175\u017b\u0185\u0190\u0001\u0006\u0000"+
|
||||||
|
"\u0000";
|
||||||
public static final ATN _ATN =
|
public static final ATN _ATN =
|
||||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||||
static {
|
static {
|
||||||
|
@ -1,73 +1,88 @@
|
|||||||
T__0=1
|
T__0=1
|
||||||
T__1=2
|
T__1=2
|
||||||
T__2=3
|
Void=3
|
||||||
T__3=4
|
Boolean=4
|
||||||
T__4=5
|
Char=5
|
||||||
T__5=6
|
Int=6
|
||||||
T__6=7
|
AccessModifier=7
|
||||||
T__7=8
|
MainMethodDeclaration=8
|
||||||
T__8=9
|
DotOperator=9
|
||||||
T__9=10
|
LineOperator=10
|
||||||
T__10=11
|
ComparisonOperator=11
|
||||||
T__11=12
|
LogicalOperator=12
|
||||||
T__12=13
|
Assign=13
|
||||||
T__13=14
|
Plus=14
|
||||||
T__14=15
|
Minus=15
|
||||||
T__15=16
|
Mult=16
|
||||||
T__16=17
|
Modulo=17
|
||||||
T__17=18
|
Div=18
|
||||||
T__18=19
|
Greater=19
|
||||||
T__19=20
|
Less=20
|
||||||
T__20=21
|
GreaterEqual=21
|
||||||
T__21=22
|
LessEqual=22
|
||||||
T__22=23
|
Equal=23
|
||||||
T__23=24
|
NotEqual=24
|
||||||
T__24=25
|
Not=25
|
||||||
T__25=26
|
And=26
|
||||||
T__26=27
|
Or=27
|
||||||
T__27=28
|
Dot=28
|
||||||
T__28=29
|
OpenRoundBracket=29
|
||||||
T__29=30
|
ClosedRoundBracket=30
|
||||||
T__30=31
|
OpenCurlyBracket=31
|
||||||
T__31=32
|
ClosedCurlyBracket=32
|
||||||
T__32=33
|
Semicolon=33
|
||||||
T__33=34
|
Comma=34
|
||||||
T__34=35
|
Class=35
|
||||||
INTEGERLITERAL=36
|
This=36
|
||||||
IDENTIFIER=37
|
While=37
|
||||||
WS=38
|
If=38
|
||||||
'class'=1
|
Else=39
|
||||||
'{'=2
|
For=40
|
||||||
'}'=3
|
Return=41
|
||||||
';'=4
|
New=42
|
||||||
'static'=5
|
CharValue=43
|
||||||
'('=6
|
IntValue=44
|
||||||
')'=7
|
BooleanValue=45
|
||||||
','=8
|
NullValue=46
|
||||||
'int'=9
|
Identifier=47
|
||||||
'boolean'=10
|
WS=48
|
||||||
'char'=11
|
InlineComment=49
|
||||||
'public'=12
|
MultilineComment=50
|
||||||
'private'=13
|
'++'=1
|
||||||
'='=14
|
'--'=2
|
||||||
'if'=15
|
'void'=3
|
||||||
'else'=16
|
'boolean'=4
|
||||||
'while'=17
|
'char'=5
|
||||||
'return'=18
|
'int'=6
|
||||||
'&&'=19
|
'public static void main(String[] args)'=8
|
||||||
'||'=20
|
'='=13
|
||||||
'=='=21
|
'+'=14
|
||||||
'!='=22
|
'-'=15
|
||||||
'<'=23
|
'*'=16
|
||||||
'<='=24
|
'%'=17
|
||||||
'>'=25
|
'/'=18
|
||||||
'>='=26
|
'>'=19
|
||||||
'+'=27
|
'<'=20
|
||||||
'-'=28
|
'>='=21
|
||||||
'*'=29
|
'<='=22
|
||||||
'/'=30
|
'=='=23
|
||||||
'%'=31
|
'!='=24
|
||||||
'!'=32
|
'!'=25
|
||||||
'true'=33
|
'&&'=26
|
||||||
'false'=34
|
'||'=27
|
||||||
'\''=35
|
'.'=28
|
||||||
|
'('=29
|
||||||
|
')'=30
|
||||||
|
'{'=31
|
||||||
|
'}'=32
|
||||||
|
';'=33
|
||||||
|
','=34
|
||||||
|
'class'=35
|
||||||
|
'this'=36
|
||||||
|
'while'=37
|
||||||
|
'if'=38
|
||||||
|
'else'=39
|
||||||
|
'for'=40
|
||||||
|
'return'=41
|
||||||
|
'new'=42
|
||||||
|
'null'=46
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
|
// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/grammar/SimpleJava.g4 by ANTLR 4.13.1
|
||||||
package parser.generated;
|
package parser.generated;
|
||||||
import org.antlr.v4.runtime.tree.ParseTreeListener;
|
import org.antlr.v4.runtime.tree.ParseTreeListener;
|
||||||
|
|
||||||
@ -37,6 +37,16 @@ public interface SimpleJavaListener extends ParseTreeListener {
|
|||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void exitMemberDeclaration(SimpleJavaParser.MemberDeclarationContext ctx);
|
void exitMemberDeclaration(SimpleJavaParser.MemberDeclarationContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#constructorDeclaration}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#constructorDeclaration}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx);
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#fieldDeclaration}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#fieldDeclaration}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -57,16 +67,6 @@ public interface SimpleJavaListener extends ParseTreeListener {
|
|||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void exitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx);
|
void exitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx);
|
||||||
/**
|
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#constructorDeclaration}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
*/
|
|
||||||
void enterConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx);
|
|
||||||
/**
|
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#constructorDeclaration}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
*/
|
|
||||||
void exitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx);
|
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#parameterList}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#parameterList}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -88,25 +88,15 @@ public interface SimpleJavaListener extends ParseTreeListener {
|
|||||||
*/
|
*/
|
||||||
void exitParameter(SimpleJavaParser.ParameterContext ctx);
|
void exitParameter(SimpleJavaParser.ParameterContext ctx);
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#type}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#argumentList}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void enterType(SimpleJavaParser.TypeContext ctx);
|
void enterArgumentList(SimpleJavaParser.ArgumentListContext ctx);
|
||||||
/**
|
/**
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#type}.
|
* Exit a parse tree produced by {@link SimpleJavaParser#argumentList}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void exitType(SimpleJavaParser.TypeContext ctx);
|
void exitArgumentList(SimpleJavaParser.ArgumentListContext ctx);
|
||||||
/**
|
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#accessType}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
*/
|
|
||||||
void enterAccessType(SimpleJavaParser.AccessTypeContext ctx);
|
|
||||||
/**
|
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#accessType}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
*/
|
|
||||||
void exitAccessType(SimpleJavaParser.AccessTypeContext ctx);
|
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#statement}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#statement}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -118,55 +108,15 @@ public interface SimpleJavaListener extends ParseTreeListener {
|
|||||||
*/
|
*/
|
||||||
void exitStatement(SimpleJavaParser.StatementContext ctx);
|
void exitStatement(SimpleJavaParser.StatementContext ctx);
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#variableDeclarationStatement}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#block}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void enterVariableDeclarationStatement(SimpleJavaParser.VariableDeclarationStatementContext ctx);
|
void enterBlock(SimpleJavaParser.BlockContext ctx);
|
||||||
/**
|
/**
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#variableDeclarationStatement}.
|
* Exit a parse tree produced by {@link SimpleJavaParser#block}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void exitVariableDeclarationStatement(SimpleJavaParser.VariableDeclarationStatementContext ctx);
|
void exitBlock(SimpleJavaParser.BlockContext ctx);
|
||||||
/**
|
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#assignmentStatement}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
*/
|
|
||||||
void enterAssignmentStatement(SimpleJavaParser.AssignmentStatementContext ctx);
|
|
||||||
/**
|
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#assignmentStatement}.
|
|
||||||
* @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
|
|
||||||
*/
|
|
||||||
void enterIfStatement(SimpleJavaParser.IfStatementContext ctx);
|
|
||||||
/**
|
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#ifStatement}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
*/
|
|
||||||
void exitIfStatement(SimpleJavaParser.IfStatementContext ctx);
|
|
||||||
/**
|
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#whileStatement}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
*/
|
|
||||||
void enterWhileStatement(SimpleJavaParser.WhileStatementContext ctx);
|
|
||||||
/**
|
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#whileStatement}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
*/
|
|
||||||
void exitWhileStatement(SimpleJavaParser.WhileStatementContext ctx);
|
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#returnStatement}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#returnStatement}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -178,15 +128,95 @@ public interface SimpleJavaListener extends ParseTreeListener {
|
|||||||
*/
|
*/
|
||||||
void exitReturnStatement(SimpleJavaParser.ReturnStatementContext ctx);
|
void exitReturnStatement(SimpleJavaParser.ReturnStatementContext ctx);
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#block}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#localVariableDeclaration}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void enterBlock(SimpleJavaParser.BlockContext ctx);
|
void enterLocalVariableDeclaration(SimpleJavaParser.LocalVariableDeclarationContext ctx);
|
||||||
/**
|
/**
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#block}.
|
* Exit a parse tree produced by {@link SimpleJavaParser#localVariableDeclaration}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void exitBlock(SimpleJavaParser.BlockContext ctx);
|
void exitLocalVariableDeclaration(SimpleJavaParser.LocalVariableDeclarationContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#whileStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterWhileStatement(SimpleJavaParser.WhileStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#whileStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitWhileStatement(SimpleJavaParser.WhileStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#forStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterForStatement(SimpleJavaParser.ForStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#forStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitForStatement(SimpleJavaParser.ForStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#ifElseStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterIfElseStatement(SimpleJavaParser.IfElseStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#ifElseStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitIfElseStatement(SimpleJavaParser.IfElseStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#ifStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterIfStatement(SimpleJavaParser.IfStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#ifStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitIfStatement(SimpleJavaParser.IfStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#elseStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterElseStatement(SimpleJavaParser.ElseStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#elseStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitElseStatement(SimpleJavaParser.ElseStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#statementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterStatementExpression(SimpleJavaParser.StatementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#statementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitStatementExpression(SimpleJavaParser.StatementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#assign}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterAssign(SimpleJavaParser.AssignContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#assign}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitAssign(SimpleJavaParser.AssignContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#newDeclaration}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterNewDeclaration(SimpleJavaParser.NewDeclarationContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#newDeclaration}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitNewDeclaration(SimpleJavaParser.NewDeclarationContext ctx);
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#expression}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#expression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -198,33 +228,223 @@ public interface SimpleJavaListener extends ParseTreeListener {
|
|||||||
*/
|
*/
|
||||||
void exitExpression(SimpleJavaParser.ExpressionContext ctx);
|
void exitExpression(SimpleJavaParser.ExpressionContext ctx);
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#literal}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#unaryExpression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void enterLiteral(SimpleJavaParser.LiteralContext ctx);
|
void enterUnaryExpression(SimpleJavaParser.UnaryExpressionContext ctx);
|
||||||
/**
|
/**
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#literal}.
|
* Exit a parse tree produced by {@link SimpleJavaParser#unaryExpression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void exitLiteral(SimpleJavaParser.LiteralContext ctx);
|
void exitUnaryExpression(SimpleJavaParser.UnaryExpressionContext ctx);
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#booleanLiteral}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#notExpression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void enterBooleanLiteral(SimpleJavaParser.BooleanLiteralContext ctx);
|
void enterNotExpression(SimpleJavaParser.NotExpressionContext ctx);
|
||||||
/**
|
/**
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#booleanLiteral}.
|
* Exit a parse tree produced by {@link SimpleJavaParser#notExpression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void exitBooleanLiteral(SimpleJavaParser.BooleanLiteralContext ctx);
|
void exitNotExpression(SimpleJavaParser.NotExpressionContext ctx);
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link SimpleJavaParser#charLiteral}.
|
* Enter a parse tree produced by {@link SimpleJavaParser#crementExpression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void enterCharLiteral(SimpleJavaParser.CharLiteralContext ctx);
|
void enterCrementExpression(SimpleJavaParser.CrementExpressionContext ctx);
|
||||||
/**
|
/**
|
||||||
* Exit a parse tree produced by {@link SimpleJavaParser#charLiteral}.
|
* Exit a parse tree produced by {@link SimpleJavaParser#crementExpression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void exitCharLiteral(SimpleJavaParser.CharLiteralContext ctx);
|
void exitCrementExpression(SimpleJavaParser.CrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#incrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterIncrementExpression(SimpleJavaParser.IncrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#incrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitIncrementExpression(SimpleJavaParser.IncrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#prefixIncrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterPrefixIncrementExpression(SimpleJavaParser.PrefixIncrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#prefixIncrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitPrefixIncrementExpression(SimpleJavaParser.PrefixIncrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#suffixIncrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterSuffixIncrementExpression(SimpleJavaParser.SuffixIncrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#suffixIncrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitSuffixIncrementExpression(SimpleJavaParser.SuffixIncrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#decrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterDecrementExpression(SimpleJavaParser.DecrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#decrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitDecrementExpression(SimpleJavaParser.DecrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#prefixDecrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterPrefixDecrementExpression(SimpleJavaParser.PrefixDecrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#prefixDecrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitPrefixDecrementExpression(SimpleJavaParser.PrefixDecrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#suffixDecrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterSuffixDecrementExpression(SimpleJavaParser.SuffixDecrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#suffixDecrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitSuffixDecrementExpression(SimpleJavaParser.SuffixDecrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#assignableExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterAssignableExpression(SimpleJavaParser.AssignableExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#assignableExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitAssignableExpression(SimpleJavaParser.AssignableExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#memberAccess}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterMemberAccess(SimpleJavaParser.MemberAccessContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#memberAccess}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitMemberAccess(SimpleJavaParser.MemberAccessContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#binaryExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterBinaryExpression(SimpleJavaParser.BinaryExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#binaryExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitBinaryExpression(SimpleJavaParser.BinaryExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#calculationExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterCalculationExpression(SimpleJavaParser.CalculationExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#calculationExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitCalculationExpression(SimpleJavaParser.CalculationExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#dotExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterDotExpression(SimpleJavaParser.DotExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#dotExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitDotExpression(SimpleJavaParser.DotExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#dotSubtractionExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterDotSubtractionExpression(SimpleJavaParser.DotSubtractionExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#dotSubtractionExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitDotSubtractionExpression(SimpleJavaParser.DotSubtractionExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#nonCalculationExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterNonCalculationExpression(SimpleJavaParser.NonCalculationExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#nonCalculationExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitNonCalculationExpression(SimpleJavaParser.NonCalculationExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#methodCall}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterMethodCall(SimpleJavaParser.MethodCallContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#methodCall}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitMethodCall(SimpleJavaParser.MethodCallContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#target}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterTarget(SimpleJavaParser.TargetContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#target}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitTarget(SimpleJavaParser.TargetContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#chainedMethod}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterChainedMethod(SimpleJavaParser.ChainedMethodContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#chainedMethod}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitChainedMethod(SimpleJavaParser.ChainedMethodContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#type}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterType(SimpleJavaParser.TypeContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#type}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitType(SimpleJavaParser.TypeContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#value}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterValue(SimpleJavaParser.ValueContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#value}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitValue(SimpleJavaParser.ValueContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link SimpleJavaParser#nonCalculationOperator}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterNonCalculationOperator(SimpleJavaParser.NonCalculationOperatorContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link SimpleJavaParser#nonCalculationOperator}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitNonCalculationOperator(SimpleJavaParser.NonCalculationOperatorContext ctx);
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
// Generated from C:/Users/Johannes/Documents/Github/JavaCompiler/src/main/java/parser/SimpleJava.g4 by ANTLR 4.13.1
|
// Generated from C:/Users/Maxi/Documents/DHBW/Compilerbau/NichtHaskell2.0/src/main/java/parser/grammar/SimpleJava.g4 by ANTLR 4.13.1
|
||||||
package parser.generated;
|
package parser.generated;
|
||||||
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
|
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
|
||||||
|
|
||||||
@ -28,6 +28,12 @@ public interface SimpleJavaVisitor<T> extends ParseTreeVisitor<T> {
|
|||||||
* @return the visitor result
|
* @return the visitor result
|
||||||
*/
|
*/
|
||||||
T visitMemberDeclaration(SimpleJavaParser.MemberDeclarationContext ctx);
|
T visitMemberDeclaration(SimpleJavaParser.MemberDeclarationContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#constructorDeclaration}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx);
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#fieldDeclaration}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#fieldDeclaration}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -40,12 +46,6 @@ public interface SimpleJavaVisitor<T> extends ParseTreeVisitor<T> {
|
|||||||
* @return the visitor result
|
* @return the visitor result
|
||||||
*/
|
*/
|
||||||
T visitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx);
|
T visitMethodDeclaration(SimpleJavaParser.MethodDeclarationContext ctx);
|
||||||
/**
|
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#constructorDeclaration}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
* @return the visitor result
|
|
||||||
*/
|
|
||||||
T visitConstructorDeclaration(SimpleJavaParser.ConstructorDeclarationContext ctx);
|
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#parameterList}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#parameterList}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -59,17 +59,11 @@ public interface SimpleJavaVisitor<T> extends ParseTreeVisitor<T> {
|
|||||||
*/
|
*/
|
||||||
T visitParameter(SimpleJavaParser.ParameterContext ctx);
|
T visitParameter(SimpleJavaParser.ParameterContext ctx);
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#type}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#argumentList}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
* @return the visitor result
|
* @return the visitor result
|
||||||
*/
|
*/
|
||||||
T visitType(SimpleJavaParser.TypeContext ctx);
|
T visitArgumentList(SimpleJavaParser.ArgumentListContext ctx);
|
||||||
/**
|
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#accessType}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
* @return the visitor result
|
|
||||||
*/
|
|
||||||
T visitAccessType(SimpleJavaParser.AccessTypeContext ctx);
|
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#statement}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#statement}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -77,35 +71,11 @@ public interface SimpleJavaVisitor<T> extends ParseTreeVisitor<T> {
|
|||||||
*/
|
*/
|
||||||
T visitStatement(SimpleJavaParser.StatementContext ctx);
|
T visitStatement(SimpleJavaParser.StatementContext ctx);
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#variableDeclarationStatement}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#block}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
* @return the visitor result
|
* @return the visitor result
|
||||||
*/
|
*/
|
||||||
T visitVariableDeclarationStatement(SimpleJavaParser.VariableDeclarationStatementContext ctx);
|
T visitBlock(SimpleJavaParser.BlockContext ctx);
|
||||||
/**
|
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#assignmentStatement}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
* @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
|
|
||||||
* @return the visitor result
|
|
||||||
*/
|
|
||||||
T visitIfStatement(SimpleJavaParser.IfStatementContext ctx);
|
|
||||||
/**
|
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#whileStatement}.
|
|
||||||
* @param ctx the parse tree
|
|
||||||
* @return the visitor result
|
|
||||||
*/
|
|
||||||
T visitWhileStatement(SimpleJavaParser.WhileStatementContext ctx);
|
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#returnStatement}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#returnStatement}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -113,11 +83,59 @@ public interface SimpleJavaVisitor<T> extends ParseTreeVisitor<T> {
|
|||||||
*/
|
*/
|
||||||
T visitReturnStatement(SimpleJavaParser.ReturnStatementContext ctx);
|
T visitReturnStatement(SimpleJavaParser.ReturnStatementContext ctx);
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#block}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#localVariableDeclaration}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
* @return the visitor result
|
* @return the visitor result
|
||||||
*/
|
*/
|
||||||
T visitBlock(SimpleJavaParser.BlockContext ctx);
|
T visitLocalVariableDeclaration(SimpleJavaParser.LocalVariableDeclarationContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#whileStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitWhileStatement(SimpleJavaParser.WhileStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#forStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitForStatement(SimpleJavaParser.ForStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#ifElseStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitIfElseStatement(SimpleJavaParser.IfElseStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#ifStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitIfStatement(SimpleJavaParser.IfStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#elseStatement}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitElseStatement(SimpleJavaParser.ElseStatementContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#statementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitStatementExpression(SimpleJavaParser.StatementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#assign}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitAssign(SimpleJavaParser.AssignContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#newDeclaration}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitNewDeclaration(SimpleJavaParser.NewDeclarationContext ctx);
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#expression}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#expression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
@ -125,21 +143,135 @@ public interface SimpleJavaVisitor<T> extends ParseTreeVisitor<T> {
|
|||||||
*/
|
*/
|
||||||
T visitExpression(SimpleJavaParser.ExpressionContext ctx);
|
T visitExpression(SimpleJavaParser.ExpressionContext ctx);
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#literal}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#unaryExpression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
* @return the visitor result
|
* @return the visitor result
|
||||||
*/
|
*/
|
||||||
T visitLiteral(SimpleJavaParser.LiteralContext ctx);
|
T visitUnaryExpression(SimpleJavaParser.UnaryExpressionContext ctx);
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#booleanLiteral}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#notExpression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
* @return the visitor result
|
* @return the visitor result
|
||||||
*/
|
*/
|
||||||
T visitBooleanLiteral(SimpleJavaParser.BooleanLiteralContext ctx);
|
T visitNotExpression(SimpleJavaParser.NotExpressionContext ctx);
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link SimpleJavaParser#charLiteral}.
|
* Visit a parse tree produced by {@link SimpleJavaParser#crementExpression}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
* @return the visitor result
|
* @return the visitor result
|
||||||
*/
|
*/
|
||||||
T visitCharLiteral(SimpleJavaParser.CharLiteralContext ctx);
|
T visitCrementExpression(SimpleJavaParser.CrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#incrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitIncrementExpression(SimpleJavaParser.IncrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#prefixIncrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitPrefixIncrementExpression(SimpleJavaParser.PrefixIncrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#suffixIncrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitSuffixIncrementExpression(SimpleJavaParser.SuffixIncrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#decrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitDecrementExpression(SimpleJavaParser.DecrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#prefixDecrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitPrefixDecrementExpression(SimpleJavaParser.PrefixDecrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#suffixDecrementExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitSuffixDecrementExpression(SimpleJavaParser.SuffixDecrementExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#assignableExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitAssignableExpression(SimpleJavaParser.AssignableExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#memberAccess}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitMemberAccess(SimpleJavaParser.MemberAccessContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#binaryExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitBinaryExpression(SimpleJavaParser.BinaryExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#calculationExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitCalculationExpression(SimpleJavaParser.CalculationExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#dotExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitDotExpression(SimpleJavaParser.DotExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#dotSubtractionExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitDotSubtractionExpression(SimpleJavaParser.DotSubtractionExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#nonCalculationExpression}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitNonCalculationExpression(SimpleJavaParser.NonCalculationExpressionContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#methodCall}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitMethodCall(SimpleJavaParser.MethodCallContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#target}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitTarget(SimpleJavaParser.TargetContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#chainedMethod}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitChainedMethod(SimpleJavaParser.ChainedMethodContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#type}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitType(SimpleJavaParser.TypeContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#value}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitValue(SimpleJavaParser.ValueContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link SimpleJavaParser#nonCalculationOperator}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitNonCalculationOperator(SimpleJavaParser.NonCalculationOperatorContext ctx);
|
||||||
}
|
}
|
168
src/main/java/parser/grammar/SimpleJava.g4
Normal file
168
src/main/java/parser/grammar/SimpleJava.g4
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
grammar SimpleJava;
|
||||||
|
|
||||||
|
// Programm-Konstrukte
|
||||||
|
program: classDeclaration+;
|
||||||
|
|
||||||
|
classDeclaration: AccessModifier? 'class' Identifier OpenCurlyBracket memberDeclaration* ClosedCurlyBracket;
|
||||||
|
memberDeclaration: constructorDeclaration | fieldDeclaration | methodDeclaration;
|
||||||
|
|
||||||
|
constructorDeclaration: AccessModifier? Identifier OpenRoundBracket parameterList? ClosedRoundBracket block;
|
||||||
|
fieldDeclaration: AccessModifier? type Identifier Semicolon;
|
||||||
|
methodDeclaration: MainMethodDeclaration block | AccessModifier? (type | Void) Identifier OpenRoundBracket parameterList? ClosedRoundBracket block;
|
||||||
|
|
||||||
|
parameterList: parameter (Comma parameter)*;
|
||||||
|
parameter: type Identifier;
|
||||||
|
argumentList: (expression (Comma expression)*)?;
|
||||||
|
|
||||||
|
// Anweisungen
|
||||||
|
statement: returnStatement Semicolon
|
||||||
|
| localVariableDeclaration Semicolon
|
||||||
|
| block
|
||||||
|
| whileStatement
|
||||||
|
| forStatement
|
||||||
|
| ifElseStatement
|
||||||
|
| statementExpression Semicolon;
|
||||||
|
|
||||||
|
block: OpenCurlyBracket statement* ClosedCurlyBracket;
|
||||||
|
|
||||||
|
returnStatement: Return (expression)?;
|
||||||
|
localVariableDeclaration: type Identifier (Assign expression)?;
|
||||||
|
|
||||||
|
whileStatement: While OpenRoundBracket expression ClosedRoundBracket block;
|
||||||
|
forStatement: For OpenRoundBracket (statementExpression | localVariableDeclaration) Semicolon (expression)? Semicolon (statementExpression)? ClosedRoundBracket statement;
|
||||||
|
|
||||||
|
ifElseStatement: ifStatement elseStatement?;
|
||||||
|
ifStatement: If OpenRoundBracket expression ClosedRoundBracket statement;
|
||||||
|
elseStatement: Else statement;
|
||||||
|
|
||||||
|
statementExpression: assign | newDeclaration | methodCall | crementExpression;
|
||||||
|
assign: assignableExpression Assign expression;
|
||||||
|
newDeclaration: New Identifier OpenRoundBracket argumentList ClosedRoundBracket;
|
||||||
|
|
||||||
|
// Ausdrücke
|
||||||
|
expression: unaryExpression | binaryExpression;
|
||||||
|
|
||||||
|
unaryExpression: This
|
||||||
|
| Identifier
|
||||||
|
| memberAccess
|
||||||
|
| value
|
||||||
|
| notExpression
|
||||||
|
| statementExpression
|
||||||
|
| OpenRoundBracket expression ClosedRoundBracket;
|
||||||
|
|
||||||
|
notExpression: Not expression;
|
||||||
|
|
||||||
|
crementExpression: incrementExpression | decrementExpression;
|
||||||
|
|
||||||
|
incrementExpression: prefixIncrementExpression | suffixIncrementExpression;
|
||||||
|
prefixIncrementExpression: '++' assignableExpression;
|
||||||
|
suffixIncrementExpression: assignableExpression '++';
|
||||||
|
|
||||||
|
decrementExpression: prefixDecrementExpression | suffixDecrementExpression;
|
||||||
|
prefixDecrementExpression: '--' assignableExpression;
|
||||||
|
suffixDecrementExpression: assignableExpression '--';
|
||||||
|
|
||||||
|
assignableExpression: Identifier | memberAccess;
|
||||||
|
|
||||||
|
memberAccess: This Dot Identifier
|
||||||
|
| (This Dot)? (Identifier Dot)+ Identifier;
|
||||||
|
|
||||||
|
binaryExpression: calculationExpression | nonCalculationExpression;
|
||||||
|
|
||||||
|
calculationExpression: calculationExpression LineOperator dotExpression
|
||||||
|
| dotExpression;
|
||||||
|
|
||||||
|
dotExpression: dotExpression DotOperator dotSubtractionExpression
|
||||||
|
| dotSubtractionExpression;
|
||||||
|
|
||||||
|
dotSubtractionExpression: IntValue
|
||||||
|
| Identifier
|
||||||
|
| memberAccess
|
||||||
|
| methodCall OpenRoundBracket calculationExpression ClosedRoundBracket;
|
||||||
|
|
||||||
|
nonCalculationExpression: unaryExpression nonCalculationOperator expression;
|
||||||
|
|
||||||
|
// Methodenaufrufe
|
||||||
|
methodCall: target? chainedMethod* Identifier OpenRoundBracket argumentList ClosedRoundBracket;
|
||||||
|
target: (This | memberAccess | newDeclaration | Identifier) Dot;
|
||||||
|
chainedMethod: Identifier OpenRoundBracket argumentList ClosedRoundBracket Dot;
|
||||||
|
|
||||||
|
// Typen
|
||||||
|
type: Int
|
||||||
|
| Boolean
|
||||||
|
| Char
|
||||||
|
| Identifier;
|
||||||
|
|
||||||
|
Void: 'void';
|
||||||
|
Boolean: 'boolean';
|
||||||
|
Char: 'char';
|
||||||
|
Int: 'int';
|
||||||
|
|
||||||
|
value: IntValue
|
||||||
|
| BooleanValue
|
||||||
|
| CharValue
|
||||||
|
| NullValue;
|
||||||
|
|
||||||
|
// Zugriffsmodifikatoren
|
||||||
|
AccessModifier: 'public' | 'private' | 'public static' | 'private static';
|
||||||
|
MainMethodDeclaration: 'public static void main(String[] args)';
|
||||||
|
|
||||||
|
// Operatoren
|
||||||
|
nonCalculationOperator: LogicalOperator | ComparisonOperator;
|
||||||
|
|
||||||
|
DotOperator: Mult | Div | Modulo;
|
||||||
|
LineOperator: Plus | Minus;
|
||||||
|
ComparisonOperator: Greater | Less | GreaterEqual | LessEqual | Equal | NotEqual;
|
||||||
|
LogicalOperator: And | Or;
|
||||||
|
|
||||||
|
Assign: '=';
|
||||||
|
Plus: '+';
|
||||||
|
Minus: '-';
|
||||||
|
Mult: '*';
|
||||||
|
Modulo: '%';
|
||||||
|
Div: '/';
|
||||||
|
Greater: '>';
|
||||||
|
Less: '<';
|
||||||
|
GreaterEqual: '>=';
|
||||||
|
LessEqual: '<=';
|
||||||
|
Equal: '==';
|
||||||
|
NotEqual: '!=';
|
||||||
|
Not: '!';
|
||||||
|
And: '&&';
|
||||||
|
Or: '||';
|
||||||
|
|
||||||
|
// Symbole
|
||||||
|
Dot: '.';
|
||||||
|
OpenRoundBracket: '(';
|
||||||
|
ClosedRoundBracket: ')';
|
||||||
|
OpenCurlyBracket: '{';
|
||||||
|
ClosedCurlyBracket: '}';
|
||||||
|
Semicolon: ';';
|
||||||
|
Comma: ',';
|
||||||
|
|
||||||
|
// Schlüsselwörter
|
||||||
|
Class: 'class';
|
||||||
|
This: 'this';
|
||||||
|
While: 'while';
|
||||||
|
If: 'if';
|
||||||
|
Else: 'else';
|
||||||
|
For: 'for';
|
||||||
|
Return: 'return';
|
||||||
|
New: 'new';
|
||||||
|
|
||||||
|
// Werte
|
||||||
|
CharValue: '\'' ~[\r\n]* '\'';
|
||||||
|
IntValue: Minus? Numeric+;
|
||||||
|
BooleanValue: 'true' | 'false';
|
||||||
|
NullValue: 'null';
|
||||||
|
|
||||||
|
// Bezeichner
|
||||||
|
fragment Alphabetic: [a-zA-Z];
|
||||||
|
fragment Numeric: [0-9];
|
||||||
|
fragment ValidIdentSymbols: Alphabetic | Numeric | '$' | '_';
|
||||||
|
Identifier: Alphabetic ValidIdentSymbols*;
|
||||||
|
|
||||||
|
// Whitespaces und Kommentare ignorieren
|
||||||
|
WS: [ \t\r\n]+ -> skip;
|
||||||
|
InlineComment: '//' ~[\r\n]* -> skip;
|
||||||
|
MultilineComment: '/*' .*? '*/' -> skip;
|
@ -1,6 +1,6 @@
|
|||||||
package semantic;
|
package semantic;
|
||||||
|
|
||||||
import ast.type.TypeNode;
|
import oldAst.type.TypeNode;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
@ -1,31 +1,38 @@
|
|||||||
package semantic;
|
package semantic;
|
||||||
|
|
||||||
|
|
||||||
import ast.*;
|
import oldAst.*;
|
||||||
import ast.expression.BinaryExpressionNode;
|
import oldAst.expression.*;
|
||||||
import ast.expression.IdentifierExpressionNode;
|
import oldAst.member.FieldNode;
|
||||||
import ast.expression.UnaryExpressionNode;
|
import oldAst.member.MemberNode;
|
||||||
import ast.member.ConstructorNode;
|
|
||||||
import ast.member.FieldNode;
|
|
||||||
import ast.member.MemberNode;
|
|
||||||
|
|
||||||
import ast.member.MethodNode;
|
import oldAst.member.MethodNode;
|
||||||
import ast.parameter.ParameterListNode;
|
import oldAst.parameter.ParameterListNode;
|
||||||
import ast.parameter.ParameterNode;
|
import oldAst.parameter.ParameterNode;
|
||||||
import ast.statement.*;
|
import oldAst.statement.*;
|
||||||
|
import oldAst.type.ReferenceTypeNode;
|
||||||
|
import oldAst.expression.This;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import oldAst.type.BaseTypeNode;
|
||||||
|
import oldAst.type.TypeNode;
|
||||||
|
import semantic.context.Context;
|
||||||
import semantic.exeptions.AlreadyDeclearedException;
|
import semantic.exeptions.AlreadyDeclearedException;
|
||||||
|
import semantic.exeptions.NotDeclearedException;
|
||||||
|
import semantic.exeptions.TypeMismatchException;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
|
|
||||||
public class SemanticAnalyzer implements SemanticVisitor {
|
public class SemanticAnalyzer implements SemanticVisitor {
|
||||||
|
|
||||||
private static ArrayList<String> currentFields = new ArrayList<>();
|
private static HashMap<String, TypeNode> currentFields = new HashMap<>();
|
||||||
|
|
||||||
public static ArrayList<Exception> errors = new ArrayList<>();
|
public static ArrayList<Exception> errors = new ArrayList<>();
|
||||||
|
|
||||||
|
private Context context;
|
||||||
private static Scope currentScope;
|
private static Scope currentScope;
|
||||||
private static ClassNode currentClass;
|
private static ClassNode currentClass;
|
||||||
|
|
||||||
@ -56,6 +63,7 @@ public class SemanticAnalyzer implements SemanticVisitor {
|
|||||||
var valid = true;
|
var valid = true;
|
||||||
|
|
||||||
currentScope = new Scope();
|
currentScope = new Scope();
|
||||||
|
context = new Context(node);
|
||||||
|
|
||||||
List<ClassNode> classes = node.classes;
|
List<ClassNode> classes = node.classes;
|
||||||
for (ClassNode classNode : classes) {
|
for (ClassNode classNode : classes) {
|
||||||
@ -70,7 +78,7 @@ public class SemanticAnalyzer implements SemanticVisitor {
|
|||||||
var valid = true;
|
var valid = true;
|
||||||
|
|
||||||
currentClass = classNode;
|
currentClass = classNode;
|
||||||
|
currentFields.clear();
|
||||||
List<MemberNode> members = classNode.members;
|
List<MemberNode> members = classNode.members;
|
||||||
for (MemberNode memberNode : members) {
|
for (MemberNode memberNode : members) {
|
||||||
if (memberNode instanceof FieldNode fieldNode) {
|
if (memberNode instanceof FieldNode fieldNode) {
|
||||||
@ -134,11 +142,11 @@ public class SemanticAnalyzer implements SemanticVisitor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeCheckResult analyze(FieldNode toCheck) {
|
public TypeCheckResult analyze(FieldNode toCheck) {
|
||||||
if (currentFields.contains(toCheck.identifier)) {
|
if (currentFields.get(toCheck.identifier) != null) {
|
||||||
errors.add(new AlreadyDeclearedException("Already declared " + toCheck.identifier));
|
errors.add(new AlreadyDeclearedException("Already declared " + toCheck.identifier));
|
||||||
return new TypeCheckResult(false, null);
|
return new TypeCheckResult(false, null);
|
||||||
} else {
|
} else {
|
||||||
currentFields.add(toCheck.identifier);
|
currentFields.put(toCheck.identifier, toCheck.type);
|
||||||
}
|
}
|
||||||
return new TypeCheckResult(true, null);
|
return new TypeCheckResult(true, null);
|
||||||
}
|
}
|
||||||
@ -146,21 +154,59 @@ public class SemanticAnalyzer implements SemanticVisitor {
|
|||||||
@Override
|
@Override
|
||||||
public TypeCheckResult analyze(AssignmentStatementNode assignmentStatementNode) {
|
public TypeCheckResult analyze(AssignmentStatementNode assignmentStatementNode) {
|
||||||
boolean valid = true;
|
boolean valid = true;
|
||||||
BinaryExpressionNode binaryExpressionNode = assignmentStatementNode.expression;
|
ExpressionNode expressionNodeLeft = assignmentStatementNode.expressionLeft;
|
||||||
var result = binaryExpressionNode.accept(this);
|
var resultLeft = expressionNodeLeft.accept(this);
|
||||||
valid = valid && result.isValid();
|
valid = valid && resultLeft.isValid();
|
||||||
|
ExpressionNode expressionNodeRight = assignmentStatementNode.expressionRight;
|
||||||
|
var resultRight = expressionNodeRight.accept(this);
|
||||||
|
valid = valid && resultRight.isValid();
|
||||||
|
|
||||||
|
if(Objects.equals(resultLeft.getType(), resultRight.getType())){
|
||||||
|
System.out.println("SAME TYPE");
|
||||||
|
} else {
|
||||||
|
errors.add(new TypeMismatchException("Type mismatch"));
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
|
||||||
return new TypeCheckResult(valid, null);
|
return new TypeCheckResult(valid, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeCheckResult analyze(BinaryExpressionNode toCheck) {
|
public TypeCheckResult analyze(BinaryExpressionNode toCheck) {
|
||||||
boolean valid = true;
|
boolean valid = true;
|
||||||
|
ExpressionNode left = toCheck.left;
|
||||||
|
var resultLeft = left.accept(this);
|
||||||
|
ExpressionNode right = toCheck.right;
|
||||||
|
var resultRight = right.accept(this);
|
||||||
|
|
||||||
|
switch (toCheck.operator) {
|
||||||
|
case ASSIGNMENT:
|
||||||
|
if(Objects.equals(resultRight.getType(), resultLeft.getType())){
|
||||||
|
System.out.println("Correct Type");
|
||||||
|
} else {
|
||||||
|
valid = false;
|
||||||
|
errors.add(new TypeMismatchException("Type Mismatch " + resultLeft.getType() + " and " + resultRight.getType()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DOT:
|
||||||
|
return new TypeCheckResult(true, resultRight.getType());
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Unexpected operator: " + toCheck.operator);
|
||||||
|
}
|
||||||
|
|
||||||
return new TypeCheckResult(valid, null);
|
return new TypeCheckResult(valid, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeCheckResult analyze(IdentifierExpressionNode toCheck) {
|
public TypeCheckResult analyze(IdentifierExpressionNode toCheck) {
|
||||||
return null;
|
if(toCheck.name == "this"){
|
||||||
|
return new TypeCheckResult(true, null);
|
||||||
|
} else if (currentFields.get(toCheck.name) == null) {
|
||||||
|
errors.add(new AlreadyDeclearedException("Not declared " + toCheck.name + " in this scope"));
|
||||||
|
return new TypeCheckResult(false, null);
|
||||||
|
} else {
|
||||||
|
return new TypeCheckResult(false, currentFields.get(toCheck.name));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -194,4 +240,40 @@ public class SemanticAnalyzer implements SemanticVisitor {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TypeCheckResult analyze(LiteralNode toCheck) {
|
||||||
|
return new TypeCheckResult(true, toCheck.getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TypeCheckResult analyze(InstVar toCheck) {
|
||||||
|
boolean valid = true;
|
||||||
|
|
||||||
|
var result = toCheck.expression.accept(this);
|
||||||
|
|
||||||
|
if(result.getType() instanceof BaseTypeNode){
|
||||||
|
throw new RuntimeException("BaseType has no Methods or Fields");
|
||||||
|
} else {
|
||||||
|
//Get typ of Field
|
||||||
|
|
||||||
|
var type = (ReferenceTypeNode)result.getType();
|
||||||
|
var classContext = context.getClass(type.getIdentifier());
|
||||||
|
|
||||||
|
if(classContext == null){
|
||||||
|
errors.add(new NotDeclearedException("Not declared " + type.getIdentifier() + " in this scope"));
|
||||||
|
return new TypeCheckResult(false, null);
|
||||||
|
} else {
|
||||||
|
var field = classContext.getField(toCheck.identifier);
|
||||||
|
|
||||||
|
return new TypeCheckResult(valid, field.getType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TypeCheckResult analyze(This toCheck) {
|
||||||
|
return new TypeCheckResult(true, toCheck.getType());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -2,13 +2,16 @@ package semantic;
|
|||||||
|
|
||||||
|
|
||||||
import ast.ClassNode;
|
import ast.ClassNode;
|
||||||
|
import ast.expression.LiteralNode;
|
||||||
import ast.ProgramNode;
|
import ast.ProgramNode;
|
||||||
import ast.expression.BinaryExpressionNode;
|
import ast.expression.BinaryExpressionNode;
|
||||||
import ast.expression.IdentifierExpressionNode;
|
import ast.expression.IdentifierExpressionNode;
|
||||||
|
import ast.expression.InstVar;
|
||||||
import ast.expression.UnaryExpressionNode;
|
import ast.expression.UnaryExpressionNode;
|
||||||
import ast.member.FieldNode;
|
import ast.member.FieldNode;
|
||||||
import ast.member.MethodNode;
|
import ast.member.MethodNode;
|
||||||
import ast.statement.*;
|
import ast.statement.*;
|
||||||
|
import ast.expression.This;
|
||||||
import typechecker.TypeCheckResult;
|
import typechecker.TypeCheckResult;
|
||||||
|
|
||||||
public interface SemanticVisitor {
|
public interface SemanticVisitor {
|
||||||
@ -36,4 +39,10 @@ public interface SemanticVisitor {
|
|||||||
TypeCheckResult analyze(ReturnStatementNode toCheck);
|
TypeCheckResult analyze(ReturnStatementNode toCheck);
|
||||||
|
|
||||||
TypeCheckResult analyze(WhileStatementNode toCheck);
|
TypeCheckResult analyze(WhileStatementNode toCheck);
|
||||||
|
|
||||||
|
TypeCheckResult analyze(LiteralNode toCheck);
|
||||||
|
|
||||||
|
TypeCheckResult analyze(InstVar toCheck);
|
||||||
|
|
||||||
|
TypeCheckResult analyze(This toCheck);
|
||||||
}
|
}
|
27
src/main/java/semantic/context/ClassContext.java
Normal file
27
src/main/java/semantic/context/ClassContext.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package semantic.context;
|
||||||
|
|
||||||
|
import oldAst.ClassNode;
|
||||||
|
import oldAst.member.FieldNode;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class ClassContext {
|
||||||
|
|
||||||
|
private HashMap<String, FieldContext> fields;
|
||||||
|
|
||||||
|
public ClassContext(ClassNode classNode) {
|
||||||
|
|
||||||
|
fields = new HashMap<>();
|
||||||
|
|
||||||
|
classNode.members.forEach(member -> {
|
||||||
|
if(member instanceof FieldNode fieldNode) {
|
||||||
|
fields.put(fieldNode.identifier, new FieldContext(fieldNode));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldContext getField(String name) {
|
||||||
|
return fields.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
src/main/java/semantic/context/Context.java
Normal file
24
src/main/java/semantic/context/Context.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package semantic.context;
|
||||||
|
|
||||||
|
import oldAst.ProgramNode;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class Context {
|
||||||
|
|
||||||
|
private HashMap<String, ClassContext> classes;
|
||||||
|
|
||||||
|
public Context(ProgramNode programNode) {
|
||||||
|
classes = new HashMap<>();
|
||||||
|
|
||||||
|
programNode.classes.forEach(classNode -> {
|
||||||
|
ClassContext classContext = new ClassContext(classNode);
|
||||||
|
classes.put(classNode.identifier, classContext);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClassContext getClass(String identifier) {
|
||||||
|
return classes.get(identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
21
src/main/java/semantic/context/FieldContext.java
Normal file
21
src/main/java/semantic/context/FieldContext.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package semantic.context;
|
||||||
|
|
||||||
|
import oldAst.member.FieldNode;
|
||||||
|
import oldAst.type.AccessTypeNode;
|
||||||
|
import oldAst.type.TypeNode;
|
||||||
|
|
||||||
|
public class FieldContext {
|
||||||
|
|
||||||
|
private AccessTypeNode accessModifier;
|
||||||
|
private TypeNode type;
|
||||||
|
|
||||||
|
public FieldContext(FieldNode field) {
|
||||||
|
accessModifier = field.accessTypeNode;
|
||||||
|
type = field.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeNode getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package semantic.exeptions;
|
||||||
|
|
||||||
|
public class NotDeclearedException extends RuntimeException {
|
||||||
|
|
||||||
|
public NotDeclearedException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package semantic.exeptions;
|
||||||
|
|
||||||
|
public class TypeMismatchException extends RuntimeException {
|
||||||
|
|
||||||
|
public TypeMismatchException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package typechecker;
|
package typechecker;
|
||||||
|
|
||||||
|
|
||||||
import ast.type.TypeNode;
|
import oldAst.type.TypeNode;
|
||||||
|
|
||||||
public class TypeCheckResult {
|
public class TypeCheckResult {
|
||||||
|
|
||||||
|
@ -4,8 +4,8 @@ import org.antlr.v4.runtime.CharStreams;
|
|||||||
import org.antlr.v4.runtime.CommonTokenStream;
|
import org.antlr.v4.runtime.CommonTokenStream;
|
||||||
import org.antlr.v4.runtime.tree.ParseTree;
|
import org.antlr.v4.runtime.tree.ParseTree;
|
||||||
import parser.ASTBuilder;
|
import parser.ASTBuilder;
|
||||||
import ast.ClassNode;
|
import oldAst.ClassNode;
|
||||||
import ast.ProgramNode;
|
import oldAst.ProgramNode;
|
||||||
import bytecode.ByteCodeGenerator;
|
import bytecode.ByteCodeGenerator;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
76
src/test/java/semantic/Mocker.java
Normal file
76
src/test/java/semantic/Mocker.java
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
package semantic;
|
||||||
|
|
||||||
|
import oldAst.ClassNode;
|
||||||
|
import oldAst.expression.LiteralNode;
|
||||||
|
import oldAst.ProgramNode;
|
||||||
|
import oldAst.expression.*;
|
||||||
|
import oldAst.member.FieldNode;
|
||||||
|
import oldAst.member.MemberNode;
|
||||||
|
import oldAst.member.MethodNode;
|
||||||
|
import oldAst.parameter.ParameterListNode;
|
||||||
|
import oldAst.parameter.ParameterNode;
|
||||||
|
import oldAst.statement.AssignmentStatementNode;
|
||||||
|
import oldAst.statement.StatementNode;
|
||||||
|
import oldAst.type.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Mocker {
|
||||||
|
|
||||||
|
public static ProgramNode mockCorrectProgrammNode(){
|
||||||
|
|
||||||
|
ProgramNode programNode = new ProgramNode();
|
||||||
|
List<ClassNode> classList = new ArrayList<ClassNode>();
|
||||||
|
AccessTypeNode accessTypeNode = new AccessTypeNode(EnumAccessTypeNode.PUBLIC);
|
||||||
|
ClassNode classNode = new ClassNode(accessTypeNode, "testClass");
|
||||||
|
|
||||||
|
MemberNode memberNode1 = new FieldNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "testVar1");
|
||||||
|
classNode.members.add(memberNode1);
|
||||||
|
|
||||||
|
MemberNode memberNode2 = new FieldNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "objectVar");
|
||||||
|
classNode.members.add(memberNode2);
|
||||||
|
|
||||||
|
List<ParameterNode> parameterNodeList = new ArrayList<ParameterNode>();
|
||||||
|
ParameterNode parameterNode1 = new ParameterNode(new BaseTypeNode(EnumTypeNode.INT), "param1");
|
||||||
|
parameterNodeList.add(parameterNode1);
|
||||||
|
ParameterListNode parameterListNode = new ParameterListNode(parameterNodeList);
|
||||||
|
|
||||||
|
List<StatementNode> statementNodeList = new ArrayList<StatementNode>();
|
||||||
|
|
||||||
|
ExpressionNode expressionNodeLeft = new InstVar(new This("testClass"), "objectVar");
|
||||||
|
|
||||||
|
LiteralNode expressionNodeRight = new LiteralNode();
|
||||||
|
expressionNodeRight.setType(new BaseTypeNode(EnumTypeNode.INT));
|
||||||
|
|
||||||
|
StatementNode statementNode1 = new AssignmentStatementNode(expressionNodeLeft, expressionNodeRight);
|
||||||
|
statementNodeList.add(statementNode1);
|
||||||
|
|
||||||
|
MemberNode memberNode3 = new MethodNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "testVar2",parameterListNode, statementNodeList );
|
||||||
|
classNode.members.add(memberNode3);
|
||||||
|
|
||||||
|
classList.add(classNode);
|
||||||
|
programNode.classes = classList;
|
||||||
|
|
||||||
|
return programNode;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ProgramNode mockFieldNodeAlreadyDeclaredProgrammNode(){
|
||||||
|
ProgramNode programNode = new ProgramNode();
|
||||||
|
List<ClassNode> classList = new ArrayList<ClassNode>();
|
||||||
|
AccessTypeNode accessTypeNode = new AccessTypeNode(EnumAccessTypeNode.PUBLIC);
|
||||||
|
ClassNode classNode = new ClassNode(accessTypeNode, "testClass");
|
||||||
|
|
||||||
|
MemberNode memberNode1 = new FieldNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "testVar");
|
||||||
|
classNode.members.add(memberNode1);
|
||||||
|
|
||||||
|
MemberNode memberNode2 = new FieldNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "testVar");
|
||||||
|
classNode.members.add(memberNode2);
|
||||||
|
|
||||||
|
classList.add(classNode);
|
||||||
|
programNode.classes = classList;
|
||||||
|
|
||||||
|
return programNode;
|
||||||
|
}
|
||||||
|
}
|
@ -1,30 +1,19 @@
|
|||||||
package semantic;
|
package semantic;
|
||||||
|
|
||||||
|
|
||||||
import ast.*;
|
import oldAst.*;
|
||||||
import ast.expression.BinaryExpressionNode;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import ast.expression.ExpressionNode;
|
|
||||||
import ast.expression.ExpresssionOperator;
|
|
||||||
import ast.expression.IdentifierExpressionNode;
|
|
||||||
import ast.member.FieldNode;
|
|
||||||
import ast.member.MemberNode;
|
|
||||||
import ast.member.MethodNode;
|
|
||||||
import ast.parameter.ParameterListNode;
|
|
||||||
import ast.parameter.ParameterNode;
|
|
||||||
import ast.statement.AssignmentStatementNode;
|
|
||||||
import ast.statement.StatementNode;
|
|
||||||
import ast.type.AccessTypeNode;
|
|
||||||
import ast.type.BaseTypeNode;
|
|
||||||
import ast.type.EnumAccessTypeNode;
|
|
||||||
import ast.type.EnumTypeNode;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import semantic.exeptions.AlreadyDeclearedException;
|
import semantic.exeptions.AlreadyDeclearedException;
|
||||||
|
import semantic.exeptions.TypeMismatchException;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.io.File;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
public class SemanticTest {
|
public class SemanticTest {
|
||||||
|
|
||||||
@ -34,24 +23,18 @@ public class SemanticTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void alreadyDeclaredLocalFieldVar(){
|
public void alreadyDeclaredLocalFieldVar() {
|
||||||
|
|
||||||
ProgramNode programNode = new ProgramNode();
|
//Arrange
|
||||||
List<ClassNode> classList = new ArrayList<ClassNode>();
|
|
||||||
AccessTypeNode accessTypeNode = new AccessTypeNode(EnumAccessTypeNode.PUBLIC);
|
|
||||||
ClassNode classNode = new ClassNode(accessTypeNode, "testClass");
|
|
||||||
|
|
||||||
MemberNode memberNode1 = new FieldNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "testVar");
|
ProgramNode programNode = Mocker.mockFieldNodeAlreadyDeclaredProgrammNode();
|
||||||
classNode.members.add(memberNode1);
|
|
||||||
|
|
||||||
MemberNode memberNode2 = new FieldNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "testVar");
|
//Act
|
||||||
classNode.members.add(memberNode2);
|
|
||||||
|
|
||||||
classList.add(classNode);
|
|
||||||
programNode.classes = classList;
|
|
||||||
|
|
||||||
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
|
||||||
assertEquals(1, SemanticAnalyzer.errors.size());
|
assertEquals(1, SemanticAnalyzer.errors.size());
|
||||||
assertEquals(true, SemanticAnalyzer.errors.get(0) instanceof AlreadyDeclearedException);
|
assertEquals(true, SemanticAnalyzer.errors.get(0) instanceof AlreadyDeclearedException);
|
||||||
assertEquals(null, typedAst);
|
assertEquals(null, typedAst);
|
||||||
@ -59,49 +42,121 @@ public class SemanticTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldWorkWithNoError(){
|
public void alreadyDecleared() {
|
||||||
|
|
||||||
ProgramNode programNode = new ProgramNode();
|
//Arrange
|
||||||
List<ClassNode> classList = new ArrayList<ClassNode>();
|
|
||||||
AccessTypeNode accessTypeNode = new AccessTypeNode(EnumAccessTypeNode.PUBLIC);
|
|
||||||
ClassNode classNode = new ClassNode(accessTypeNode, "testClass");
|
|
||||||
|
|
||||||
MemberNode memberNode1 = new FieldNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "testVar1");
|
ProgramNode programNode = Mocker.mockFieldNodeAlreadyDeclaredProgrammNode();
|
||||||
classNode.members.add(memberNode1);
|
|
||||||
|
|
||||||
MemberNode memberNode2 = new FieldNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "testVar2");
|
//Act
|
||||||
classNode.members.add(memberNode2);
|
|
||||||
|
|
||||||
List<ParameterNode> parameterNodeList = new ArrayList<ParameterNode>();
|
|
||||||
ParameterNode parameterNode1 = new ParameterNode(new BaseTypeNode(EnumTypeNode.INT), "param1");
|
|
||||||
parameterNodeList.add(parameterNode1);
|
|
||||||
ParameterListNode parameterListNode = new ParameterListNode(parameterNodeList);
|
|
||||||
|
|
||||||
List<StatementNode> statementNodeList = new ArrayList<StatementNode>();
|
|
||||||
|
|
||||||
ExpressionNode expressionNodeObjectVariableLeft = new IdentifierExpressionNode("this");
|
|
||||||
ExpressionNode expressionNodeObjectVariableRight = new IdentifierExpressionNode("objectVar");
|
|
||||||
|
|
||||||
ExpressionNode expressionNodeLeft = new BinaryExpressionNode(expressionNodeObjectVariableLeft, expressionNodeObjectVariableRight, ExpresssionOperator.DOT);
|
|
||||||
|
|
||||||
ExpressionNode expressionNodeRight = new LiteralNode(1);
|
|
||||||
|
|
||||||
BinaryExpressionNode expressionNode = new BinaryExpressionNode(expressionNodeLeft, expressionNodeRight, ExpresssionOperator.ASSIGNMENT);
|
|
||||||
|
|
||||||
StatementNode statementNode1 = new AssignmentStatementNode(expressionNode);
|
|
||||||
statementNodeList.add(statementNode1);
|
|
||||||
|
|
||||||
MemberNode memberNode3 = new MethodNode(accessTypeNode, new BaseTypeNode(EnumTypeNode.INT), "testVar2",parameterListNode, statementNodeList );
|
|
||||||
classNode.members.add(memberNode3);
|
|
||||||
|
|
||||||
classList.add(classNode);
|
|
||||||
programNode.classes = classList;
|
|
||||||
|
|
||||||
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
|
||||||
|
assertEquals(1, SemanticAnalyzer.errors.size());
|
||||||
|
assertInstanceOf(AlreadyDeclearedException.class, SemanticAnalyzer.errors.getFirst());
|
||||||
|
assertNull(typedAst);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldWorkWithNoError() {
|
||||||
|
|
||||||
|
//Arrange
|
||||||
|
|
||||||
|
ProgramNode programNode = Mocker.mockCorrectProgrammNode();
|
||||||
|
|
||||||
|
//Act
|
||||||
|
|
||||||
|
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
|
||||||
assertEquals(0, SemanticAnalyzer.errors.size());
|
assertEquals(0, SemanticAnalyzer.errors.size());
|
||||||
assertEquals(programNode, typedAst);
|
assertEquals(programNode, typedAst);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void refTypeCorrect() {
|
||||||
|
|
||||||
|
//Arrange
|
||||||
|
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
ProgramNode programNode = null;
|
||||||
|
try{
|
||||||
|
programNode = objectMapper.readValue(new File("src/test/resources/semantic/correctRefType.json"), ProgramNode.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Act
|
||||||
|
|
||||||
|
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
|
||||||
|
assertEquals(0, SemanticAnalyzer.errors.size());
|
||||||
|
assertEquals(programNode, typedAst);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void jsonWriteTest() {
|
||||||
|
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
|
//Arrange
|
||||||
|
|
||||||
|
ProgramNode programNode = Mocker.mockCorrectProgrammNode();
|
||||||
|
try{
|
||||||
|
objectMapper.writeValue(new File("src/test/resources/semantic/test.json"), programNode);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void jsonReadTest() {
|
||||||
|
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
|
ProgramNode programNode1 = null;
|
||||||
|
try{
|
||||||
|
programNode1 = objectMapper.readValue(new File("src/test/resources/semantic/test.json"), ProgramNode.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
ProgramNode programNode2 = Mocker.mockCorrectProgrammNode();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void typeMismatch() {
|
||||||
|
|
||||||
|
//Arrange
|
||||||
|
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
ProgramNode programNode = null;
|
||||||
|
try{
|
||||||
|
programNode = objectMapper.readValue(new File("src/test/resources/semantic/refTypeMismatch.json"), ProgramNode.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Act
|
||||||
|
|
||||||
|
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
|
||||||
|
assertEquals(1, SemanticAnalyzer.errors.size());
|
||||||
|
assertInstanceOf(TypeMismatchException.class, SemanticAnalyzer.errors.getFirst());
|
||||||
|
assertNull(typedAst);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
70
src/test/resources/semantic/correctRefType.json
Normal file
70
src/test/resources/semantic/correctRefType.json
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"classes": [
|
||||||
|
{
|
||||||
|
"identifier": "testClass1",
|
||||||
|
"accessType": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"@type": "Field",
|
||||||
|
"accessTypeNode": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testVar1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "Method",
|
||||||
|
"visibility": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testMethod",
|
||||||
|
"parameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"statements": [
|
||||||
|
{
|
||||||
|
"@type": "Assignment",
|
||||||
|
"expressionLeft": {
|
||||||
|
"@type": "InstVar",
|
||||||
|
"identifier": "testVar1",
|
||||||
|
"expression": {
|
||||||
|
"@type": "This",
|
||||||
|
"type": {
|
||||||
|
"@type": "Reference",
|
||||||
|
"identifier": "testClass1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": null
|
||||||
|
},
|
||||||
|
"expressionRight": {
|
||||||
|
"@type": "Literal",
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hasConstructor": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
133
src/test/resources/semantic/refTypeMismatch.json
Normal file
133
src/test/resources/semantic/refTypeMismatch.json
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
{
|
||||||
|
"classes": [
|
||||||
|
{
|
||||||
|
"identifier": "testClass1",
|
||||||
|
"accessType": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"@type": "Field",
|
||||||
|
"accessTypeNode": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testVar1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "Method",
|
||||||
|
"visibility": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testMethod",
|
||||||
|
"parameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"statements": [
|
||||||
|
{
|
||||||
|
"@type": "Assignment",
|
||||||
|
"expressionLeft": {
|
||||||
|
"@type": "InstVar",
|
||||||
|
"identifier": "testVar1",
|
||||||
|
"expression": {
|
||||||
|
"@type": "This",
|
||||||
|
"type": {
|
||||||
|
"@type": "Reference",
|
||||||
|
"identifier": "testClass1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": null
|
||||||
|
},
|
||||||
|
"expressionRight": {
|
||||||
|
"@type": "Literal",
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "BOOLEAN"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hasConstructor": false,
|
||||||
|
"methods": [
|
||||||
|
{
|
||||||
|
"@type": "Method",
|
||||||
|
"visibility": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testMethod",
|
||||||
|
"parameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"statements": [
|
||||||
|
{
|
||||||
|
"@type": "Assignment",
|
||||||
|
"expressionLeft": {
|
||||||
|
"@type": "InstVar",
|
||||||
|
"identifier": "testVar",
|
||||||
|
"expression": {
|
||||||
|
"@type": "InstVar",
|
||||||
|
"identifier": "testVar",
|
||||||
|
"expression": {
|
||||||
|
"@type": "This",
|
||||||
|
"type": {
|
||||||
|
"@type": "Reference",
|
||||||
|
"identifier": "testClass2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": null
|
||||||
|
},
|
||||||
|
"type": null
|
||||||
|
},
|
||||||
|
"expressionRight": {
|
||||||
|
"@type": "Literal",
|
||||||
|
"type": null
|
||||||
|
},
|
||||||
|
"type": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "VariableDeclaration",
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "CHAR"
|
||||||
|
},
|
||||||
|
"identifier": "objectVar",
|
||||||
|
"expression": {
|
||||||
|
"@type": "Literal",
|
||||||
|
"type": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
1
src/test/resources/semantic/test.json
Normal file
1
src/test/resources/semantic/test.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"classes":[{"identifier":"testClass","accessType":{"enumAccessTypeNode":"PUBLIC"},"members":[{"@type":"Field","accessTypeNode":{"enumAccessTypeNode":"PUBLIC"},"type":{"@type":"Base","enumType":"INT"},"identifier":"testVar1"},{"@type":"Field","accessTypeNode":{"enumAccessTypeNode":"PUBLIC"},"type":{"@type":"Base","enumType":"INT"},"identifier":"objectVar"},{"@type":"Method","visibility":{"enumAccessTypeNode":"PUBLIC"},"type":{"@type":"Base","enumType":"INT"},"identifier":"testVar2","parameters":{"parameters":[{"type":{"@type":"Base","enumType":"INT"},"identifier":"param1"}]},"statements":[{"@type":"Assignment","expressionLeft":{"@type":"InstVar","identifier":"objectVar","expression":{"@type":"This","type":{"@type":"Reference","identifier":"testClass"}},"type":null},"expressionRight":{"@type":"Literal","type":{"@type":"Base","enumType":"INT"}}}]}],"hasConstructor":false,"methods":[{"@type":"Method","visibility":{"enumAccessTypeNode":"PUBLIC"},"type":{"@type":"Base","enumType":"INT"},"identifier":"testVar2","parameters":{"parameters":[{"type":{"@type":"Base","enumType":"INT"},"identifier":"param1"}]},"statements":[{"@type":"Assignment","expressionLeft":{"@type":"InstVar","identifier":"objectVar","expression":{"@type":"This","type":{"@type":"Reference","identifier":"testClass"}},"type":null},"expressionRight":{"@type":"Literal","type":{"@type":"Base","enumType":"INT"}}}]}]}]}
|
Loading…
Reference in New Issue
Block a user