mirror of
https://github.com/JonathanFleischmann/CompilerULTIMATE.git
synced 2024-12-28 15:58:03 +00:00
implemented rest of needed testfiles
This commit is contained in:
parent
7b82840b3d
commit
c498215d91
@ -7,10 +7,5 @@
|
|||||||
- Testen: Jonathan Fleischmann
|
- Testen: Jonathan Fleischmann
|
||||||
|
|
||||||
# Fehlende Tests für Features (positive Tests):
|
# Fehlende Tests für Features (positive Tests):
|
||||||
- Mainmethod
|
- Main-Methode
|
||||||
- break
|
|
||||||
- recipient mit methode zwischen drinnen (this.methode().a
|
|
||||||
- &&
|
|
||||||
- ||
|
|
||||||
- unaryOp
|
|
||||||
- Klammern von Expressions
|
- Klammern von Expressions
|
@ -5,12 +5,14 @@ import de.maishai.ast.records.Unary;
|
|||||||
import de.maishai.typedast.MethodContext;
|
import de.maishai.typedast.MethodContext;
|
||||||
import de.maishai.typedast.TypedExpression;
|
import de.maishai.typedast.TypedExpression;
|
||||||
import de.maishai.typedast.Type;
|
import de.maishai.typedast.Type;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.objectweb.asm.Opcodes;
|
import org.objectweb.asm.Opcodes;
|
||||||
|
|
||||||
import static de.maishai.typedast.Help.TypedExpressionHelp.convertExpression;
|
import static de.maishai.typedast.Help.TypedExpressionHelp.convertExpression;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
public class TypedUnary implements TypedExpression {
|
public class TypedUnary implements TypedExpression {
|
||||||
private UnaryOperator op;
|
private UnaryOperator op;
|
||||||
private TypedExpression right;
|
private TypedExpression right;
|
||||||
|
@ -10,62 +10,62 @@ import java.util.List;
|
|||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
public class ScannerParserTests {
|
public class ScannerParserTests {
|
||||||
|
//
|
||||||
@Test
|
|
||||||
public void testPublicClass() {
|
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/PublicClass.java"));
|
|
||||||
assertEquals(AbstractSyntax_PublicClass.get(), resultAst);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testClassWithField() {
|
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithField.java"));
|
|
||||||
assertEquals(AbstractSyntax_ClassWithField.get(), resultAst);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testClassWithConstructor() {
|
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithConstructor.java"));
|
|
||||||
assertEquals(AbstractSyntax_ClassWithConstructor.get(), resultAst);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testClassWithMethod() {
|
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithMethod.java"));
|
|
||||||
assertEquals(AbstractSyntax_ClassWithMethod.get(), resultAst);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testClassWithConstructorWithCodeInComments() {
|
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithConstructorWithCodeInComments.java"));
|
|
||||||
assertEquals(AbstractSyntax_ClassWithConstructorWithCodeInComments.get(), resultAst);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testClassWithConstructorWithParameters() {
|
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithConstructorWithParameters.java"));
|
|
||||||
assertEquals(AbstractSyntax_ClassWithConstructorWithParameters.get(), resultAst);
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Test
|
// @Test
|
||||||
// public void testClassWithMethodAndField() {
|
// public void testPublicClass() {
|
||||||
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithMethodAndField.java"));
|
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/PublicClass.java"));
|
||||||
// assertEquals(AbstractSyntax_ClassWithMethodAndField.get(), resultAst);
|
// assertEquals(AbstractSyntax_PublicClass.get(), resultAst);
|
||||||
// }
|
// }
|
||||||
//TODO: fix
|
//
|
||||||
|
// @Test
|
||||||
@Test
|
// public void testClassWithField() {
|
||||||
public void testClassWithConstructorAndMethodCall() {
|
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithField.java"));
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithConstructorAndMethodCall.java"));
|
// assertEquals(AbstractSyntax_ClassWithField.get(), resultAst);
|
||||||
assertEquals(AbstractSyntax_ClassWithConstructorAndMethodCall.get(), resultAst);
|
// }
|
||||||
}
|
//
|
||||||
|
// @Test
|
||||||
@Test
|
// public void testClassWithConstructor() {
|
||||||
public void testComplexClass() {
|
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithConstructor.java"));
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ComplexClass.java"));
|
// assertEquals(AbstractSyntax_ClassWithConstructor.get(), resultAst);
|
||||||
assertEquals(AbstractSyntax_ComplexClass.get(), resultAst);
|
// }
|
||||||
}
|
//
|
||||||
|
// @Test
|
||||||
|
// public void testClassWithMethod() {
|
||||||
|
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithMethod.java"));
|
||||||
|
// assertEquals(AbstractSyntax_ClassWithMethod.get(), resultAst);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Test
|
||||||
|
// public void testClassWithConstructorWithCodeInComments() {
|
||||||
|
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithConstructorWithCodeInComments.java"));
|
||||||
|
// assertEquals(AbstractSyntax_ClassWithConstructorWithCodeInComments.get(), resultAst);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Test
|
||||||
|
// public void testClassWithConstructorWithParameters() {
|
||||||
|
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithConstructorWithParameters.java"));
|
||||||
|
// assertEquals(AbstractSyntax_ClassWithConstructorWithParameters.get(), resultAst);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//// @Test
|
||||||
|
//// public void testClassWithMethodAndField() {
|
||||||
|
//// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithMethodAndField.java"));
|
||||||
|
//// assertEquals(AbstractSyntax_ClassWithMethodAndField.get(), resultAst);
|
||||||
|
//// }
|
||||||
|
// //TODO: fix
|
||||||
|
//
|
||||||
|
// @Test
|
||||||
|
// public void testClassWithConstructorAndMethodCall() {
|
||||||
|
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithConstructorAndMethodCall.java"));
|
||||||
|
// assertEquals(AbstractSyntax_ClassWithConstructorAndMethodCall.get(), resultAst);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Test
|
||||||
|
// public void testComplexClass() {
|
||||||
|
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ComplexClass.java"));
|
||||||
|
// assertEquals(AbstractSyntax_ComplexClass.get(), resultAst);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -75,6 +75,12 @@ public class ScannerParserTests {
|
|||||||
|
|
||||||
// Feature Tests
|
// Feature Tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBreak() {
|
||||||
|
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/Break.java"));
|
||||||
|
assertEquals(AST_Break.get(), resultAst);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testClass() {
|
public void testClass() {
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/Class.java"));
|
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/Class.java"));
|
||||||
@ -100,6 +106,12 @@ public class ScannerParserTests {
|
|||||||
assertEquals(AST_CompAssign.get(), resultAst);
|
assertEquals(AST_CompAssign.get(), resultAst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testComplexCalls() {
|
||||||
|
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/ComplexCalls.java"));
|
||||||
|
assertEquals(AST_ComplexCalls.get(), resultAst);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testConstructor() {
|
public void testConstructor() {
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/Constructor.java"));
|
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/Constructor.java"));
|
||||||
@ -160,12 +172,11 @@ public class ScannerParserTests {
|
|||||||
assertEquals(AST_MethodCall.get(), resultAst);
|
assertEquals(AST_MethodCall.get(), resultAst);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Test
|
@Test
|
||||||
// public void testMultipleClasses() {
|
public void testMultipleClasses() {
|
||||||
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/MultipleClasses.java"));
|
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/MultipleClasses.java"));
|
||||||
// assertEquals(AST_MultipleClasses.get(), resultAst);
|
assertEquals(AST_MultipleClasses.get(), resultAst);
|
||||||
// }
|
}
|
||||||
// TODO: Implement
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOperators() {
|
public void testOperators() {
|
||||||
@ -191,6 +202,12 @@ public class ScannerParserTests {
|
|||||||
assertEquals(AST_Return.get(), resultAst);
|
assertEquals(AST_Return.get(), resultAst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUnary() {
|
||||||
|
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/Unary.java"));
|
||||||
|
assertEquals(AST_Unary.get(), resultAst);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testVariableDefWithDecl() {
|
public void testVariableDefWithDecl() {
|
||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/VariableDefWithDecl.java"));
|
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/VariableDefWithDecl.java"));
|
||||||
@ -202,4 +219,7 @@ public class ScannerParserTests {
|
|||||||
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/While.java"));
|
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/While.java"));
|
||||||
assertEquals(AST_While.get(), resultAst);
|
assertEquals(AST_While.get(), resultAst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: Anschauen: Warum sind die FieldVarAccess von Methodenaufrufen manchmal fields und manchmal ned (z.B. bei ComplexCalls)
|
||||||
|
// Warum geht MultipleClasses nicht?
|
||||||
}
|
}
|
||||||
|
@ -14,30 +14,40 @@ import testResources.TypedAST.TypedASTMore.TypedAbstractSyntax_PublicClass;
|
|||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
public class TypingTests {
|
public class TypingTests {
|
||||||
|
//
|
||||||
@Test
|
|
||||||
public void testPublicClass() {
|
|
||||||
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AbstractSyntax_PublicClass.get());
|
|
||||||
assertEquals(TypedAbstractSyntax_PublicClass.get(), resultTypedAst);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testClassWithField() {
|
|
||||||
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AbstractSyntax_ClassWithField.get());
|
|
||||||
assertEquals(TypedAbstractSyntax_ClassWithField.get(), resultTypedAst);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testClassWithConstructor() {
|
|
||||||
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AbstractSyntax_ClassWithConstructor.get());
|
|
||||||
assertEquals(TypedAbstractSyntax_ClassWithConstructor.get(), resultTypedAst);
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Test
|
// @Test
|
||||||
// public void testComplexClass() {
|
// public void testPublicClass() {
|
||||||
// TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AbstractSyntax_ComplexClass.get());
|
// TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AbstractSyntax_PublicClass.get());
|
||||||
// assertEquals(TypedAbstractSyntax_ComplexClass.get(), resultTypedAst);
|
// assertEquals(TypedAbstractSyntax_PublicClass.get(), resultTypedAst);
|
||||||
// }
|
// }
|
||||||
|
//
|
||||||
|
// @Test
|
||||||
|
// public void testClassWithField() {
|
||||||
|
// TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AbstractSyntax_ClassWithField.get());
|
||||||
|
// assertEquals(TypedAbstractSyntax_ClassWithField.get(), resultTypedAst);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Test
|
||||||
|
// public void testClassWithConstructor() {
|
||||||
|
// TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AbstractSyntax_ClassWithConstructor.get());
|
||||||
|
// assertEquals(TypedAbstractSyntax_ClassWithConstructor.get(), resultTypedAst);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//// @Test
|
||||||
|
//// public void testComplexClass() {
|
||||||
|
//// TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AbstractSyntax_ComplexClass.get());
|
||||||
|
//// assertEquals(TypedAbstractSyntax_ComplexClass.get(), resultTypedAst);
|
||||||
|
//// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Feature Tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBreak() {
|
||||||
|
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_Break.get());
|
||||||
|
assertEquals(TypedAST_Break.get(), resultTypedAst);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testClass() {
|
public void testClass() {
|
||||||
@ -63,11 +73,18 @@ public class TypingTests {
|
|||||||
assertEquals(TypedAST_CompAssign.get(), resultTypedAst);
|
assertEquals(TypedAST_CompAssign.get(), resultTypedAst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testComplexCalls() {
|
||||||
|
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_ComplexCalls.get());
|
||||||
|
assertEquals(TypedAST_ComplexCalls.get(), resultTypedAst);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testConstructor() {
|
public void testConstructor() {
|
||||||
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_Constructor.get());
|
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_Constructor.get());
|
||||||
assertEquals(TypedAST_Constructor.get(), resultTypedAst);
|
assertEquals(TypedAST_Constructor.get(), resultTypedAst);
|
||||||
}
|
}
|
||||||
|
// TODO: Konstruktor hat doch immer den Typ der Klasse?, Parameter werden als TypedLocalVariable aufgeführt, notwendig?
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testContinue() {
|
public void testContinue() {
|
||||||
@ -104,6 +121,7 @@ public class TypingTests {
|
|||||||
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_LogicExpr.get());
|
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_LogicExpr.get());
|
||||||
assertEquals(TypedAST_LogicExpr.get(), resultTypedAst);
|
assertEquals(TypedAST_LogicExpr.get(), resultTypedAst);
|
||||||
}
|
}
|
||||||
|
// TODO: mit Operatoren verknüpfte Typen werden nicht korrekt ermittelt
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMain() {
|
public void testMain() {
|
||||||
@ -128,12 +146,11 @@ public class TypingTests {
|
|||||||
assertEquals(TypedAST_MethodCall.get(), resultTypedAst);
|
assertEquals(TypedAST_MethodCall.get(), resultTypedAst);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Test
|
@Test
|
||||||
// public void testMultipleClasses() {
|
public void testMultipleClasses() {
|
||||||
// TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_MultipleClasses.get());
|
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_MultipleClasses.get());
|
||||||
// assertEquals(TypedAST_MultipleClasses.get(), resultTypedAst);
|
assertEquals(TypedAST_MultipleClasses.get(), resultTypedAst);
|
||||||
// }
|
}
|
||||||
// TODO: Implement
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOperators() {
|
public void testOperators() {
|
||||||
@ -159,6 +176,13 @@ public class TypingTests {
|
|||||||
assertEquals(TypedAST_Return.get(), resultTypedAst);
|
assertEquals(TypedAST_Return.get(), resultTypedAst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUnary() {
|
||||||
|
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_Unary.get());
|
||||||
|
assertEquals(TypedAST_Unary.get(), resultTypedAst);
|
||||||
|
}
|
||||||
|
// TODO: Typ von TypedUnary wird nicht ermittelt
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testVariableDefWithDecl() {
|
public void testVariableDefWithDecl() {
|
||||||
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_VariableDefWithDecl.get());
|
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_VariableDefWithDecl.get());
|
||||||
@ -170,4 +194,10 @@ public class TypingTests {
|
|||||||
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_While.get());
|
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_While.get());
|
||||||
assertEquals(TypedAST_While.get(), resultTypedAst);
|
assertEquals(TypedAST_While.get(), resultTypedAst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: Anschauen: Konstruktor hat doch immer den Typ der Klasse?
|
||||||
|
// bei logischen Ausdrücken hat einer keinen boolschen Typ
|
||||||
|
// In Methoden und Konstruktoren werden Parameter zusätzlich als TypedLocalVariable aufgeführt, warum?
|
||||||
|
// bei TypedUnary wird nicht der Typ ermittelt
|
||||||
|
|
||||||
}
|
}
|
||||||
|
104
src/test/java/testResources/AST/ASTFeatures/AST_Break.java
Normal file
104
src/test/java/testResources/AST/ASTFeatures/AST_Break.java
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
package testResources.AST.ASTFeatures;
|
||||||
|
|
||||||
|
import de.maishai.ast.Operator;
|
||||||
|
import de.maishai.ast.records.Class;
|
||||||
|
import de.maishai.ast.records.*;
|
||||||
|
import de.maishai.typedast.Type;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AST_Break {
|
||||||
|
public static Program get() {
|
||||||
|
return new Program(
|
||||||
|
List.of(
|
||||||
|
new Class(
|
||||||
|
"Break",
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new Constructor(
|
||||||
|
"Break",
|
||||||
|
List.of(),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Declaration(
|
||||||
|
"i",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"i"
|
||||||
|
),
|
||||||
|
new IntLiteral(0)
|
||||||
|
),
|
||||||
|
new While(
|
||||||
|
new Binary(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"i"
|
||||||
|
),
|
||||||
|
Operator.LT,
|
||||||
|
new IntLiteral(10)
|
||||||
|
),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Break()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Declaration(
|
||||||
|
"j",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new For(
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"j"
|
||||||
|
),
|
||||||
|
new IntLiteral(0)
|
||||||
|
),
|
||||||
|
new Binary(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"j"
|
||||||
|
),
|
||||||
|
Operator.LT,
|
||||||
|
new IntLiteral(10)
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"j"
|
||||||
|
),
|
||||||
|
new Binary(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"j"
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new IntLiteral(1)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Break()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -75,41 +75,6 @@ public class AST_ClassObjects {
|
|||||||
Type.REFERENCE("ClassObjects"),
|
Type.REFERENCE("ClassObjects"),
|
||||||
List.of()
|
List.of()
|
||||||
)
|
)
|
||||||
),
|
|
||||||
new Assignment(
|
|
||||||
new FieldVarAccess(
|
|
||||||
false,
|
|
||||||
null,
|
|
||||||
"c"),
|
|
||||||
new FieldVarAccess(
|
|
||||||
false,
|
|
||||||
new FieldVarAccess(
|
|
||||||
true,
|
|
||||||
new FieldVarAccess(
|
|
||||||
true,
|
|
||||||
new FieldVarAccess(
|
|
||||||
true,
|
|
||||||
null,
|
|
||||||
"d"),
|
|
||||||
"b"),
|
|
||||||
"b"),
|
|
||||||
"b")
|
|
||||||
),
|
|
||||||
new MethodCall(
|
|
||||||
new FieldVarAccess(
|
|
||||||
false,
|
|
||||||
new FieldVarAccess(
|
|
||||||
true,
|
|
||||||
new FieldVarAccess(
|
|
||||||
true,
|
|
||||||
new FieldVarAccess(
|
|
||||||
true,
|
|
||||||
null,
|
|
||||||
"c"),
|
|
||||||
"b"),
|
|
||||||
"b"),
|
|
||||||
"objectsMethod"),
|
|
||||||
List.of()
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -0,0 +1,191 @@
|
|||||||
|
package testResources.AST.ASTFeatures;
|
||||||
|
|
||||||
|
import de.maishai.ast.records.*;
|
||||||
|
import de.maishai.ast.records.Class;
|
||||||
|
import de.maishai.typedast.Type;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AST_ComplexCalls {
|
||||||
|
public static Program get() {
|
||||||
|
return new Program(
|
||||||
|
List.of(
|
||||||
|
new Class(
|
||||||
|
"ComplexCalls",
|
||||||
|
List.of(
|
||||||
|
new Declaration(
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
new Declaration(
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new Method(
|
||||||
|
Type.INT,
|
||||||
|
"makeComplexCalls",
|
||||||
|
List.of(),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject"
|
||||||
|
),
|
||||||
|
new New(
|
||||||
|
Type.REFERENCE("ComplexCalls"),
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new IntLiteral(1)
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject"
|
||||||
|
),
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new IntLiteral(2)
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject"
|
||||||
|
),
|
||||||
|
"classObject"
|
||||||
|
),
|
||||||
|
new New(
|
||||||
|
Type.REFERENCE("ComplexCalls"),
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject"
|
||||||
|
),
|
||||||
|
"classObject"
|
||||||
|
),
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
new MethodCall(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"getClassObject"
|
||||||
|
),
|
||||||
|
List.of()
|
||||||
|
),
|
||||||
|
"a"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Return(
|
||||||
|
new MethodCall(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject"
|
||||||
|
),
|
||||||
|
"classObject"
|
||||||
|
),
|
||||||
|
"getA"
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new IntLiteral(3)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Method(
|
||||||
|
Type.REFERENCE("ComplexCalls"),
|
||||||
|
"getClassObject",
|
||||||
|
List.of(),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Return(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Method(
|
||||||
|
Type.INT,
|
||||||
|
"getA",
|
||||||
|
List.of(
|
||||||
|
new Parameter(
|
||||||
|
"x",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Return(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new Constructor(
|
||||||
|
"ComplexCalls",
|
||||||
|
List.of(),
|
||||||
|
new Block(
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -314,6 +314,106 @@ public class AST_LogicExpr {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
),
|
||||||
|
new Method(
|
||||||
|
Type.BOOL,
|
||||||
|
"test7",
|
||||||
|
List.of(),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Declaration(
|
||||||
|
"x",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x"
|
||||||
|
),
|
||||||
|
new BoolLiteral(true)
|
||||||
|
),
|
||||||
|
new Declaration(
|
||||||
|
"y",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"y"
|
||||||
|
),
|
||||||
|
new BoolLiteral(false)
|
||||||
|
),
|
||||||
|
new Return(
|
||||||
|
new Binary(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x"
|
||||||
|
),
|
||||||
|
Operator.AND,
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"y"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
),
|
||||||
|
new Method(
|
||||||
|
Type.BOOL,
|
||||||
|
"test8",
|
||||||
|
List.of(),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Declaration(
|
||||||
|
"x",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x"
|
||||||
|
),
|
||||||
|
new BoolLiteral(true)
|
||||||
|
),
|
||||||
|
new Declaration(
|
||||||
|
"y",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"y"
|
||||||
|
),
|
||||||
|
new BoolLiteral(false)
|
||||||
|
),
|
||||||
|
new Return(
|
||||||
|
new Binary(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x"
|
||||||
|
),
|
||||||
|
Operator.OR,
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"y"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
List.of(
|
List.of(
|
||||||
|
@ -1,5 +1,78 @@
|
|||||||
package testResources.AST.ASTFeatures;
|
package testResources.AST.ASTFeatures;
|
||||||
|
|
||||||
public class AST_MultipleClasses {
|
import de.maishai.ast.records.*;
|
||||||
|
import de.maishai.ast.records.Class;
|
||||||
|
import de.maishai.typedast.Type;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AST_MultipleClasses {
|
||||||
|
public static Program get() {
|
||||||
|
return new Program(
|
||||||
|
List.of(
|
||||||
|
new Class(
|
||||||
|
"MultipleClasses",
|
||||||
|
List.of(
|
||||||
|
new Declaration(
|
||||||
|
"anotherClass",
|
||||||
|
Type.REFERENCE("AnotherClass")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new Constructor(
|
||||||
|
"MultipleClasses",
|
||||||
|
List.of(),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"anotherClass"
|
||||||
|
),
|
||||||
|
new New(
|
||||||
|
Type.REFERENCE("AnotherClass"),
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Class(
|
||||||
|
"AnotherClass",
|
||||||
|
List.of(
|
||||||
|
new Declaration(
|
||||||
|
"multipleClasses",
|
||||||
|
Type.REFERENCE("MultipleClasses")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new Constructor(
|
||||||
|
"AnotherClass",
|
||||||
|
List.of(),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"multipleClasses"
|
||||||
|
),
|
||||||
|
new New(
|
||||||
|
Type.REFERENCE("MultipleClasses"),
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
@ -180,6 +180,174 @@ public class AST_Operators {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
),
|
||||||
|
new Method(
|
||||||
|
Type.INT,
|
||||||
|
"brackets",
|
||||||
|
List.of(
|
||||||
|
new Parameter(
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new Parameter(
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Return(
|
||||||
|
new Binary(
|
||||||
|
new Binary(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Operator.MUL,
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Method(
|
||||||
|
Type.INT,
|
||||||
|
"callOperatedMethods",
|
||||||
|
List.of(
|
||||||
|
new Parameter(
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new Parameter(
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Return(
|
||||||
|
new Binary(
|
||||||
|
new Binary(
|
||||||
|
new Binary(
|
||||||
|
new Binary(
|
||||||
|
new MethodCall(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"add"
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new MethodCall(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"sub"
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new MethodCall(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"mul"
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new MethodCall(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"div"
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new MethodCall(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"mod"
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
List.of(
|
List.of(
|
||||||
|
78
src/test/java/testResources/AST/ASTFeatures/AST_Unary.java
Normal file
78
src/test/java/testResources/AST/ASTFeatures/AST_Unary.java
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
package testResources.AST.ASTFeatures;
|
||||||
|
|
||||||
|
import de.maishai.ast.UnaryOperator;
|
||||||
|
import de.maishai.ast.records.*;
|
||||||
|
import de.maishai.ast.records.Class;
|
||||||
|
import de.maishai.typedast.Type;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AST_Unary {
|
||||||
|
public static Program get() {
|
||||||
|
return new Program(
|
||||||
|
List.of(
|
||||||
|
new Class(
|
||||||
|
"Unary",
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new Constructor(
|
||||||
|
"Unary",
|
||||||
|
List.of(),
|
||||||
|
new Block(
|
||||||
|
List.of(
|
||||||
|
new Declaration(
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
),
|
||||||
|
new IntLiteral(5)
|
||||||
|
),
|
||||||
|
new Declaration(
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b"
|
||||||
|
),
|
||||||
|
new Unary(
|
||||||
|
UnaryOperator.SUB,
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Declaration(
|
||||||
|
"c",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new Assignment(
|
||||||
|
new FieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"c"
|
||||||
|
),
|
||||||
|
new Unary(
|
||||||
|
UnaryOperator.NOT,
|
||||||
|
new BoolLiteral(true)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,144 @@
|
|||||||
|
package testResources.TypedAST.TypedASTFeatures;
|
||||||
|
|
||||||
|
import de.maishai.ast.Operator;
|
||||||
|
import de.maishai.typedast.Type;
|
||||||
|
import de.maishai.typedast.typedclass.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TypedAST_Break {
|
||||||
|
public static TypedProgram get() {
|
||||||
|
return new TypedProgram(
|
||||||
|
List.of(
|
||||||
|
new TypedClass(
|
||||||
|
"Break",
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedConstructor(
|
||||||
|
"Break",
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"i",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"j",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedIntLiteral(
|
||||||
|
0,
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"i",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedWhile(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"i",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Operator.LT,
|
||||||
|
new TypedIntLiteral(
|
||||||
|
10,
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedBreak()
|
||||||
|
),
|
||||||
|
Type.VOID
|
||||||
|
),
|
||||||
|
Type.VOID
|
||||||
|
),
|
||||||
|
new TypedFor(
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedIntLiteral(
|
||||||
|
0,
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"j",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"j",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Operator.LT,
|
||||||
|
new TypedIntLiteral(
|
||||||
|
10,
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"j",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new TypedIntLiteral(
|
||||||
|
1,
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"j",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedBreak()
|
||||||
|
),
|
||||||
|
Type.VOID
|
||||||
|
),
|
||||||
|
Type.VOID
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.VOID,
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
Type.REFERENCE("Break")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -22,17 +22,18 @@ public class TypedAST_ClassObjects {
|
|||||||
"objectsMethod",
|
"objectsMethod",
|
||||||
Type.VOID,
|
Type.VOID,
|
||||||
List.of(),
|
List.of(),
|
||||||
List.of(new TypedLocalVariable(
|
List.of(),
|
||||||
"c",
|
|
||||||
Type.REFERENCE("ClassObjects")
|
|
||||||
),
|
|
||||||
new TypedLocalVariable(
|
|
||||||
"d",
|
|
||||||
Type.REFERENCE("ClassObjects")
|
|
||||||
)
|
|
||||||
),
|
|
||||||
new TypedBlock(
|
new TypedBlock(
|
||||||
List.of(),
|
List.of(
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"c",
|
||||||
|
Type.REFERENCE("ClassObjects")
|
||||||
|
),
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"d",
|
||||||
|
Type.REFERENCE("ClassObjects")
|
||||||
|
)
|
||||||
|
),
|
||||||
List.of(
|
List.of(
|
||||||
new TypedAssignment(
|
new TypedAssignment(
|
||||||
new TypedNew(
|
new TypedNew(
|
||||||
@ -44,13 +45,16 @@ public class TypedAST_ClassObjects {
|
|||||||
null,
|
null,
|
||||||
"b",
|
"b",
|
||||||
Type.REFERENCE("ClassObjects")),
|
Type.REFERENCE("ClassObjects")),
|
||||||
Type.VOID
|
Type.REFERENCE("ClassObjects")
|
||||||
),
|
),
|
||||||
new TypedAssignment(
|
new TypedAssignment(
|
||||||
new TypedNew(
|
new TypedNew(
|
||||||
Type.REFERENCE("ClassObjects"),
|
Type.REFERENCE("ClassObjects"),
|
||||||
List.of(
|
List.of(
|
||||||
new TypedIntLiteral(2)
|
new TypedIntLiteral(
|
||||||
|
2,
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
new TypedFieldVarAccess(
|
new TypedFieldVarAccess(
|
||||||
@ -58,7 +62,7 @@ public class TypedAST_ClassObjects {
|
|||||||
null,
|
null,
|
||||||
"c",
|
"c",
|
||||||
Type.REFERENCE("ClassObjects")),
|
Type.REFERENCE("ClassObjects")),
|
||||||
Type.VOID
|
Type.REFERENCE("ClassObjects")
|
||||||
),
|
),
|
||||||
new TypedAssignment(
|
new TypedAssignment(
|
||||||
new TypedNew(
|
new TypedNew(
|
||||||
@ -70,53 +74,7 @@ public class TypedAST_ClassObjects {
|
|||||||
null,
|
null,
|
||||||
"d",
|
"d",
|
||||||
Type.REFERENCE("ClassObjects")),
|
Type.REFERENCE("ClassObjects")),
|
||||||
Type.VOID
|
Type.REFERENCE("ClassObjects")
|
||||||
),
|
|
||||||
new TypedAssignment(
|
|
||||||
new TypedFieldVarAccess(
|
|
||||||
false,
|
|
||||||
new TypedFieldVarAccess(
|
|
||||||
true,
|
|
||||||
new TypedFieldVarAccess(
|
|
||||||
true,
|
|
||||||
new TypedFieldVarAccess(
|
|
||||||
true,
|
|
||||||
null,
|
|
||||||
"d",
|
|
||||||
Type.REFERENCE("ClassObjects")),
|
|
||||||
"b",
|
|
||||||
Type.REFERENCE("ClassObjects")),
|
|
||||||
"b",
|
|
||||||
Type.REFERENCE("ClassObjects")),
|
|
||||||
"b",
|
|
||||||
Type.REFERENCE("ClassObjects")),
|
|
||||||
new TypedFieldVarAccess(
|
|
||||||
false,
|
|
||||||
null,
|
|
||||||
"c",
|
|
||||||
Type.REFERENCE("ClassObjects")),
|
|
||||||
Type.VOID
|
|
||||||
),
|
|
||||||
new TypedMethodCall(
|
|
||||||
new TypedFieldVarAccess(
|
|
||||||
false,
|
|
||||||
new TypedFieldVarAccess(
|
|
||||||
true,
|
|
||||||
new TypedFieldVarAccess(
|
|
||||||
true,
|
|
||||||
new TypedFieldVarAccess(
|
|
||||||
true,
|
|
||||||
null,
|
|
||||||
"c",
|
|
||||||
Type.REFERENCE("ClassObjects")),
|
|
||||||
"b",
|
|
||||||
Type.REFERENCE("ClassObjects")),
|
|
||||||
"b",
|
|
||||||
Type.REFERENCE("ClassObjects")),
|
|
||||||
"objectsMethod",
|
|
||||||
Type.VOID),
|
|
||||||
List.of(),
|
|
||||||
Type.VOID
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
Type.VOID
|
Type.VOID
|
||||||
@ -132,7 +90,7 @@ public class TypedAST_ClassObjects {
|
|||||||
List.of(),
|
List.of(),
|
||||||
Type.VOID
|
Type.VOID
|
||||||
),
|
),
|
||||||
Type.REFERENCE("ClassObjects"),
|
Type.VOID,
|
||||||
List.of()
|
List.of()
|
||||||
),
|
),
|
||||||
new TypedConstructor(
|
new TypedConstructor(
|
||||||
@ -148,8 +106,13 @@ public class TypedAST_ClassObjects {
|
|||||||
List.of(),
|
List.of(),
|
||||||
Type.VOID
|
Type.VOID
|
||||||
),
|
),
|
||||||
Type.REFERENCE("ClassObjects"),
|
Type.VOID,
|
||||||
List.of()
|
List.of(
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
null,
|
null,
|
||||||
|
@ -0,0 +1,238 @@
|
|||||||
|
package testResources.TypedAST.TypedASTFeatures;
|
||||||
|
|
||||||
|
import de.maishai.ast.records.Class;
|
||||||
|
import de.maishai.ast.records.*;
|
||||||
|
import de.maishai.typedast.Type;
|
||||||
|
import de.maishai.typedast.typedclass.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TypedAST_ComplexCalls {
|
||||||
|
public static TypedProgram get() {
|
||||||
|
return new TypedProgram(
|
||||||
|
List.of(
|
||||||
|
new TypedClass(
|
||||||
|
"ComplexCalls",
|
||||||
|
List.of(
|
||||||
|
new TypedDeclaration(
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
new TypedDeclaration(
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedMethod(
|
||||||
|
"makeComplexCalls",
|
||||||
|
Type.INT,
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedNew(
|
||||||
|
Type.REFERENCE("ComplexCalls"),
|
||||||
|
List.of()
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedIntLiteral(1),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedIntLiteral(2),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedNew(
|
||||||
|
Type.REFERENCE("ComplexCalls"),
|
||||||
|
List.of()
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
new TypedMethodCall(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"getClassObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
List.of(),
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedReturn(
|
||||||
|
new TypedMethodCall(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
"getA",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedIntLiteral(3)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new TypedMethod(
|
||||||
|
"getClassObject",
|
||||||
|
Type.REFERENCE("ComplexCalls"),
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedReturn(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"classObject",
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
),
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new TypedMethod(
|
||||||
|
"getA",
|
||||||
|
Type.INT,
|
||||||
|
List.of(
|
||||||
|
new TypedParameter(
|
||||||
|
"x",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedReturn(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedConstructor(
|
||||||
|
"ComplexCalls",
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
Type.VOID
|
||||||
|
),
|
||||||
|
Type.VOID,
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
Type.REFERENCE("ComplexCalls")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -79,7 +79,12 @@ public class TypedAST_Constructor {
|
|||||||
Type.VOID
|
Type.VOID
|
||||||
),
|
),
|
||||||
Type.VOID,
|
Type.VOID,
|
||||||
List.of()
|
List.of(
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"x",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
)
|
||||||
),
|
),
|
||||||
new TypedConstructor(
|
new TypedConstructor(
|
||||||
"Constructor",
|
"Constructor",
|
||||||
@ -130,7 +135,16 @@ public class TypedAST_Constructor {
|
|||||||
Type.VOID
|
Type.VOID
|
||||||
),
|
),
|
||||||
Type.VOID,
|
Type.VOID,
|
||||||
List.of()
|
List.of(
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"x",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"y",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
null,
|
null,
|
||||||
|
@ -409,6 +409,138 @@ public class TypedAST_LogicExpr {
|
|||||||
),
|
),
|
||||||
Type.BOOL
|
Type.BOOL
|
||||||
)
|
)
|
||||||
|
),
|
||||||
|
new TypedMethod(
|
||||||
|
"test7",
|
||||||
|
Type.BOOL,
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"x",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"y",
|
||||||
|
Type.BOOL
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedBoolLiteral(
|
||||||
|
true,
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedBoolLiteral(
|
||||||
|
false,
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"y",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedReturn(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Operator.AND,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"y",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new TypedMethod(
|
||||||
|
"test8",
|
||||||
|
Type.BOOL,
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"x",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"y",
|
||||||
|
Type.BOOL
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedBoolLiteral(
|
||||||
|
true,
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedBoolLiteral(
|
||||||
|
false,
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"y",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedReturn(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"x",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Operator.OR,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"y",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
List.of(
|
List.of(
|
||||||
|
@ -1,5 +1,96 @@
|
|||||||
package testResources.TypedAST.TypedASTFeatures;
|
package testResources.TypedAST.TypedASTFeatures;
|
||||||
|
|
||||||
public class TypedAST_MultipleClasses {
|
import de.maishai.typedast.Type;
|
||||||
|
import de.maishai.typedast.typedclass.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TypedAST_MultipleClasses {
|
||||||
|
public static TypedProgram get() {
|
||||||
|
return new TypedProgram(
|
||||||
|
List.of(
|
||||||
|
new TypedClass(
|
||||||
|
"MultipleClasses",
|
||||||
|
List.of(
|
||||||
|
new TypedDeclaration(
|
||||||
|
"anotherClass",
|
||||||
|
Type.REFERENCE("AnotherClass")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedConstructor(
|
||||||
|
"MultipleClasses",
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedNew(
|
||||||
|
Type.REFERENCE("AnotherClass"),
|
||||||
|
List.of()
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"anotherClass",
|
||||||
|
Type.REFERENCE("AnotherClass")
|
||||||
|
),
|
||||||
|
Type.REFERENCE("AnotherClass")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.VOID
|
||||||
|
),
|
||||||
|
Type.VOID,
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
Type.REFERENCE("MultipleClasses")
|
||||||
|
),
|
||||||
|
new TypedClass(
|
||||||
|
"AnotherClass",
|
||||||
|
List.of(
|
||||||
|
new TypedDeclaration(
|
||||||
|
"multipleClasses",
|
||||||
|
Type.REFERENCE("MultipleClasses")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedConstructor(
|
||||||
|
"AnotherClass",
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedNew(
|
||||||
|
Type.REFERENCE("MultipleClasses"),
|
||||||
|
List.of()
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
true,
|
||||||
|
null,
|
||||||
|
"multipleClasses",
|
||||||
|
Type.REFERENCE("MultipleClasses")
|
||||||
|
),
|
||||||
|
Type.REFERENCE("MultipleClasses")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.VOID
|
||||||
|
),
|
||||||
|
Type.VOID,
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
Type.REFERENCE("AnotherClass")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package testResources.TypedAST.TypedASTFeatures;
|
package testResources.TypedAST.TypedASTFeatures;
|
||||||
|
|
||||||
import de.maishai.ast.Operator;
|
import de.maishai.ast.Operator;
|
||||||
|
import de.maishai.ast.records.FieldVarAccess;
|
||||||
import de.maishai.typedast.Type;
|
import de.maishai.typedast.Type;
|
||||||
import de.maishai.typedast.typedclass.*;
|
import de.maishai.typedast.typedclass.*;
|
||||||
|
|
||||||
@ -214,6 +215,211 @@ public class TypedAST_Operators {
|
|||||||
),
|
),
|
||||||
Type.INT
|
Type.INT
|
||||||
)
|
)
|
||||||
|
),
|
||||||
|
new TypedMethod(
|
||||||
|
"brackets",
|
||||||
|
Type.INT,
|
||||||
|
List.of(
|
||||||
|
new TypedParameter(
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedParameter(
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedReturn(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Operator.MUL,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new TypedMethod(
|
||||||
|
"callOperatedMethods",
|
||||||
|
Type.INT,
|
||||||
|
List.of(
|
||||||
|
new TypedParameter(
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedParameter(
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedReturn(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedBinary(
|
||||||
|
new TypedMethodCall(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"add",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new TypedMethodCall(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"sub",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new TypedMethodCall(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"mul",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new TypedMethodCall(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"div",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Operator.ADD,
|
||||||
|
new TypedMethodCall(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"mod",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
List.of(
|
List.of(
|
||||||
|
@ -0,0 +1,104 @@
|
|||||||
|
package testResources.TypedAST.TypedASTFeatures;
|
||||||
|
|
||||||
|
import de.maishai.ast.UnaryOperator;
|
||||||
|
import de.maishai.ast.records.Class;
|
||||||
|
import de.maishai.ast.records.*;
|
||||||
|
import de.maishai.typedast.Type;
|
||||||
|
import de.maishai.typedast.typedclass.TypedClass;
|
||||||
|
import de.maishai.typedast.typedclass.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TypedAST_Unary {
|
||||||
|
public static TypedProgram get() {
|
||||||
|
return new TypedProgram(
|
||||||
|
List.of(
|
||||||
|
new TypedClass(
|
||||||
|
"Unary",
|
||||||
|
List.of(),
|
||||||
|
List.of(),
|
||||||
|
List.of(
|
||||||
|
new TypedConstructor(
|
||||||
|
"Unary",
|
||||||
|
List.of(),
|
||||||
|
new TypedBlock(
|
||||||
|
List.of(
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedLocalVariable(
|
||||||
|
"c",
|
||||||
|
Type.BOOL
|
||||||
|
)
|
||||||
|
),
|
||||||
|
List.of(
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedIntLiteral(
|
||||||
|
5,
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedUnary(
|
||||||
|
UnaryOperator.SUB,
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"a",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"b",
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
Type.INT
|
||||||
|
),
|
||||||
|
new TypedAssignment(
|
||||||
|
new TypedUnary(
|
||||||
|
UnaryOperator.NOT,
|
||||||
|
new TypedBoolLiteral(
|
||||||
|
true,
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
new TypedFieldVarAccess(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
"c",
|
||||||
|
Type.BOOL
|
||||||
|
),
|
||||||
|
Type.BOOL
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Type.VOID
|
||||||
|
),
|
||||||
|
Type.VOID,
|
||||||
|
List.of()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
Type.REFERENCE("Unary")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
11
src/test/testFiles/JavaTestfilesFeatures/Break.java
Normal file
11
src/test/testFiles/JavaTestfilesFeatures/Break.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
public class Break {
|
||||||
|
public Break() {
|
||||||
|
int i = 0;
|
||||||
|
while (i < 10) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (int j = 0; j < 10; j += 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -12,7 +12,5 @@ public class ClassObjects {
|
|||||||
this.b = new ClassObjects();
|
this.b = new ClassObjects();
|
||||||
ClassObjects c = new ClassObjects(2);
|
ClassObjects c = new ClassObjects(2);
|
||||||
ClassObjects d = new ClassObjects();
|
ClassObjects d = new ClassObjects();
|
||||||
c = d.b.b.b;
|
|
||||||
c.b.b.objectsMethod();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
22
src/test/testFiles/JavaTestfilesFeatures/ComplexCalls.java
Normal file
22
src/test/testFiles/JavaTestfilesFeatures/ComplexCalls.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
public class ComplexCalls {
|
||||||
|
ComplexCalls classObject;
|
||||||
|
int a;
|
||||||
|
|
||||||
|
public int makeComplexCalls() {
|
||||||
|
this.classObject = new ComplexCalls();
|
||||||
|
this.a = 1;
|
||||||
|
this.classObject.a = 2;
|
||||||
|
this.classObject.classObject = new ComplexCalls();
|
||||||
|
this.classObject.classObject.a = this.getClassObject().a;
|
||||||
|
return this.classObject.classObject.getA(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ComplexCalls getClassObject() {
|
||||||
|
return this.classObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getA(int x) {
|
||||||
|
this.a = x;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,7 @@ public class For {
|
|||||||
for (int i = 0; i < 10; i = i+1) {
|
for (int i = 0; i < 10; i = i+1) {
|
||||||
}
|
}
|
||||||
int j;
|
int j;
|
||||||
for (j = 0; j < 10; j = j+1) {
|
for (j = 0; j < 10; j += 1) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -46,4 +46,20 @@ public class LogicExpr {
|
|||||||
y = 20;
|
y = 20;
|
||||||
return x >= y;
|
return x >= y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean test7() {
|
||||||
|
boolean x;
|
||||||
|
x = true;
|
||||||
|
boolean y;
|
||||||
|
y = false;
|
||||||
|
return x && y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean test8() {
|
||||||
|
boolean x;
|
||||||
|
x = true;
|
||||||
|
boolean y;
|
||||||
|
y = false;
|
||||||
|
return x || y;
|
||||||
|
}
|
||||||
}
|
}
|
@ -2,7 +2,7 @@ public class MultipleClasses {
|
|||||||
AnotherClass anotherClass;
|
AnotherClass anotherClass;
|
||||||
|
|
||||||
public MultipleClasses() {
|
public MultipleClasses() {
|
||||||
anotherClass = new AnotherClass();
|
this.anotherClass = new AnotherClass();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10,6 +10,6 @@ public class AnotherClass {
|
|||||||
MultipleClasses multipleClasses;
|
MultipleClasses multipleClasses;
|
||||||
|
|
||||||
public AnotherClass() {
|
public AnotherClass() {
|
||||||
multipleClasses = new MultipleClasses();
|
this.multipleClasses = new MultipleClasses();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,4 +18,12 @@ public class Operators {
|
|||||||
public int mod(int a, int b) {
|
public int mod(int a, int b) {
|
||||||
return a % b;
|
return a % b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int brackets(int a, int b) {
|
||||||
|
return (a + b) * a;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int callOperatedMethods(int a, int b) {
|
||||||
|
return add(a, b) + sub(a, b) + mul(a, b) + div(a, b) + mod(a, b);
|
||||||
|
}
|
||||||
}
|
}
|
7
src/test/testFiles/JavaTestfilesFeatures/Unary.java
Normal file
7
src/test/testFiles/JavaTestfilesFeatures/Unary.java
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
public class Unary {
|
||||||
|
public Unary() {
|
||||||
|
int a = 5;
|
||||||
|
int b = -a;
|
||||||
|
boolean c = !true;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user