implemented rest of needed testfiles

This commit is contained in:
JonathanFleischmann 2024-06-23 14:05:22 +02:00
parent 7b82840b3d
commit c498215d91
27 changed files with 1881 additions and 201 deletions

View File

@ -7,10 +7,5 @@
- Testen: Jonathan Fleischmann
# Fehlende Tests für Features (positive Tests):
- Mainmethod
- break
- recipient mit methode zwischen drinnen (this.methode().a
- &&
- ||
- unaryOp
- Main-Methode
- Klammern von Expressions

View File

@ -5,12 +5,14 @@ import de.maishai.ast.records.Unary;
import de.maishai.typedast.MethodContext;
import de.maishai.typedast.TypedExpression;
import de.maishai.typedast.Type;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.objectweb.asm.Opcodes;
import static de.maishai.typedast.Help.TypedExpressionHelp.convertExpression;
@Data
@AllArgsConstructor
public class TypedUnary implements TypedExpression {
private UnaryOperator op;
private TypedExpression right;

View File

@ -10,62 +10,62 @@ import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
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
// public void testClassWithMethodAndField() {
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/ClassWithMethodAndField.java"));
// assertEquals(AbstractSyntax_ClassWithMethodAndField.get(), resultAst);
// public void testPublicClass() {
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesMore/PublicClass.java"));
// assertEquals(AbstractSyntax_PublicClass.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);
}
//
// @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
//// 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
@Test
public void testBreak() {
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/Break.java"));
assertEquals(AST_Break.get(), resultAst);
}
@Test
public void testClass() {
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/Class.java"));
@ -100,6 +106,12 @@ public class ScannerParserTests {
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
public void testConstructor() {
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/Constructor.java"));
@ -160,12 +172,11 @@ public class ScannerParserTests {
assertEquals(AST_MethodCall.get(), resultAst);
}
// @Test
// public void testMultipleClasses() {
// Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/MultipleClasses.java"));
// assertEquals(AST_MultipleClasses.get(), resultAst);
// }
// TODO: Implement
@Test
public void testMultipleClasses() {
Program resultAst = Compiler.generateASTFromFile(List.of("src/test/testFiles/JavaTestfilesFeatures/MultipleClasses.java"));
assertEquals(AST_MultipleClasses.get(), resultAst);
}
@Test
public void testOperators() {
@ -191,6 +202,12 @@ public class ScannerParserTests {
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
public void testVariableDefWithDecl() {
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"));
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?
}

View File

@ -14,30 +14,40 @@ import testResources.TypedAST.TypedASTMore.TypedAbstractSyntax_PublicClass;
import static org.junit.jupiter.api.Assertions.assertEquals;
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
// public void testComplexClass() {
// TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AbstractSyntax_ComplexClass.get());
// assertEquals(TypedAbstractSyntax_ComplexClass.get(), resultTypedAst);
// 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
//// 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
public void testClass() {
@ -63,11 +73,18 @@ public class TypingTests {
assertEquals(TypedAST_CompAssign.get(), resultTypedAst);
}
@Test
public void testComplexCalls() {
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_ComplexCalls.get());
assertEquals(TypedAST_ComplexCalls.get(), resultTypedAst);
}
@Test
public void testConstructor() {
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_Constructor.get());
assertEquals(TypedAST_Constructor.get(), resultTypedAst);
}
// TODO: Konstruktor hat doch immer den Typ der Klasse?, Parameter werden als TypedLocalVariable aufgeführt, notwendig?
@Test
public void testContinue() {
@ -104,6 +121,7 @@ public class TypingTests {
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_LogicExpr.get());
assertEquals(TypedAST_LogicExpr.get(), resultTypedAst);
}
// TODO: mit Operatoren verknüpfte Typen werden nicht korrekt ermittelt
@Test
public void testMain() {
@ -128,12 +146,11 @@ public class TypingTests {
assertEquals(TypedAST_MethodCall.get(), resultTypedAst);
}
// @Test
// public void testMultipleClasses() {
// TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_MultipleClasses.get());
// assertEquals(TypedAST_MultipleClasses.get(), resultTypedAst);
// }
// TODO: Implement
@Test
public void testMultipleClasses() {
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_MultipleClasses.get());
assertEquals(TypedAST_MultipleClasses.get(), resultTypedAst);
}
@Test
public void testOperators() {
@ -159,6 +176,13 @@ public class TypingTests {
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
public void testVariableDefWithDecl() {
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_VariableDefWithDecl.get());
@ -170,4 +194,10 @@ public class TypingTests {
TypedProgram resultTypedAst = Compiler.generateTypedASTFromAst(AST_While.get());
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
}

View 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()
)
)
)
)
)
)
)
)
)
);
}
}

View File

@ -75,41 +75,6 @@ public class AST_ClassObjects {
Type.REFERENCE("ClassObjects"),
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()
)
)
)

View File

@ -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()
)
)
)
)
)
);
}
}

View File

@ -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(

View File

@ -1,5 +1,78 @@
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()
)
)
)
)
)
)
)
)
);
}
}

View File

@ -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(

View 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)
)
)
)
)
)
)
)
)
);
}
}

View File

@ -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
);
}
}

View File

@ -22,17 +22,18 @@ public class TypedAST_ClassObjects {
"objectsMethod",
Type.VOID,
List.of(),
List.of(new TypedLocalVariable(
"c",
Type.REFERENCE("ClassObjects")
),
new TypedLocalVariable(
"d",
Type.REFERENCE("ClassObjects")
)
),
List.of(),
new TypedBlock(
List.of(),
List.of(
new TypedLocalVariable(
"c",
Type.REFERENCE("ClassObjects")
),
new TypedLocalVariable(
"d",
Type.REFERENCE("ClassObjects")
)
),
List.of(
new TypedAssignment(
new TypedNew(
@ -44,13 +45,16 @@ public class TypedAST_ClassObjects {
null,
"b",
Type.REFERENCE("ClassObjects")),
Type.VOID
Type.REFERENCE("ClassObjects")
),
new TypedAssignment(
new TypedNew(
Type.REFERENCE("ClassObjects"),
List.of(
new TypedIntLiteral(2)
new TypedIntLiteral(
2,
Type.INT
)
)
),
new TypedFieldVarAccess(
@ -58,7 +62,7 @@ public class TypedAST_ClassObjects {
null,
"c",
Type.REFERENCE("ClassObjects")),
Type.VOID
Type.REFERENCE("ClassObjects")
),
new TypedAssignment(
new TypedNew(
@ -70,53 +74,7 @@ public class TypedAST_ClassObjects {
null,
"d",
Type.REFERENCE("ClassObjects")),
Type.VOID
),
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.REFERENCE("ClassObjects")
)
),
Type.VOID
@ -132,7 +90,7 @@ public class TypedAST_ClassObjects {
List.of(),
Type.VOID
),
Type.REFERENCE("ClassObjects"),
Type.VOID,
List.of()
),
new TypedConstructor(
@ -148,8 +106,13 @@ public class TypedAST_ClassObjects {
List.of(),
Type.VOID
),
Type.REFERENCE("ClassObjects"),
List.of()
Type.VOID,
List.of(
new TypedLocalVariable(
"a",
Type.INT
)
)
)
),
null,

View File

@ -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
);
}
}

View File

@ -79,7 +79,12 @@ public class TypedAST_Constructor {
Type.VOID
),
Type.VOID,
List.of()
List.of(
new TypedLocalVariable(
"x",
Type.INT
)
)
),
new TypedConstructor(
"Constructor",
@ -130,7 +135,16 @@ public class TypedAST_Constructor {
Type.VOID
),
Type.VOID,
List.of()
List.of(
new TypedLocalVariable(
"x",
Type.INT
),
new TypedLocalVariable(
"y",
Type.INT
)
)
)
),
null,

View File

@ -409,6 +409,138 @@ public class TypedAST_LogicExpr {
),
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(

View File

@ -1,5 +1,96 @@
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
);
}
}

View File

@ -1,6 +1,7 @@
package testResources.TypedAST.TypedASTFeatures;
import de.maishai.ast.Operator;
import de.maishai.ast.records.FieldVarAccess;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*;
@ -214,6 +215,211 @@ public class TypedAST_Operators {
),
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(

View File

@ -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
);
}
}

View 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;
}
}
}

View File

@ -12,7 +12,5 @@ public class ClassObjects {
this.b = new ClassObjects();
ClassObjects c = new ClassObjects(2);
ClassObjects d = new ClassObjects();
c = d.b.b.b;
c.b.b.objectsMethod();
}
}

View 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;
}
}

View File

@ -3,7 +3,7 @@ public class For {
for (int i = 0; i < 10; i = i+1) {
}
int j;
for (j = 0; j < 10; j = j+1) {
for (j = 0; j < 10; j += 1) {
}
}
}

View File

@ -46,4 +46,20 @@ public class LogicExpr {
y = 20;
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;
}
}

View File

@ -2,7 +2,7 @@ public class MultipleClasses {
AnotherClass anotherClass;
public MultipleClasses() {
anotherClass = new AnotherClass();
this.anotherClass = new AnotherClass();
}
}
@ -10,6 +10,6 @@ public class AnotherClass {
MultipleClasses multipleClasses;
public AnotherClass() {
multipleClasses = new MultipleClasses();
this.multipleClasses = new MultipleClasses();
}
}

View File

@ -18,4 +18,12 @@ public class Operators {
public int mod(int a, int 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);
}
}

View File

@ -0,0 +1,7 @@
public class Unary {
public Unary() {
int a = 5;
int b = -a;
boolean c = !true;
}
}