mirror of
https://github.com/JonathanFleischmann/CompilerULTIMATE.git
synced 2024-12-27 07:38:03 +00:00
implemented rest of needed testfiles
This commit is contained in:
parent
7b82840b3d
commit
c498215d91
@ -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
|
@ -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;
|
||||
|
@ -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?
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
}
|
||||
|
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"),
|
||||
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(
|
||||
|
@ -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()
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
@ -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(
|
||||
|
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",
|
||||
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,
|
||||
|
@ -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,
|
||||
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,
|
||||
|
@ -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(
|
||||
|
@ -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
|
||||
);
|
||||
}
|
||||
}
|
@ -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(
|
||||
|
@ -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();
|
||||
ClassObjects c = new ClassObjects(2);
|
||||
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) {
|
||||
}
|
||||
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;
|
||||
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;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
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