From b37e0658571782be70364c8915827dacaffbdf60 Mon Sep 17 00:00:00 2001 From: Lucas <89882946+notbad3500@users.noreply.github.com> Date: Tue, 25 Jun 2024 16:41:04 +0200 Subject: [PATCH] Small changes --- src/main/java/ast/ASTNode.java | 3 -- src/main/java/ast/member/MethodNode.java | 17 ++++---- src/main/java/main/Main.java | 5 ++- src/main/java/main/RaupenLogger.java | 30 ++++++------- src/test/Makefile | 10 +++-- src/test/java/main/EmptyClassExample.java | 6 --- src/test/java/main/TestCompilerOutput.java | 6 +-- src/test/java/parser/ParserTest.java | 50 ++++++++++++++++++++++ 8 files changed, 85 insertions(+), 42 deletions(-) delete mode 100644 src/test/java/main/EmptyClassExample.java diff --git a/src/main/java/ast/ASTNode.java b/src/main/java/ast/ASTNode.java index 3ef48fa..2c43451 100644 --- a/src/main/java/ast/ASTNode.java +++ b/src/main/java/ast/ASTNode.java @@ -3,9 +3,6 @@ package ast; //import java.util.List; public interface ASTNode { - /** - * Please implement this method to return a list of children of each node. - */ // public List getChildren(); } diff --git a/src/main/java/ast/member/MethodNode.java b/src/main/java/ast/member/MethodNode.java index bd67bc4..9cb52b8 100644 --- a/src/main/java/ast/member/MethodNode.java +++ b/src/main/java/ast/member/MethodNode.java @@ -22,8 +22,7 @@ public class MethodNode implements MemberNode, Visitable { public List statements = new ArrayList<>(); - public MethodNode(AccessTypeNode visibility, TypeNode type, String identifier, ParameterListNode parameters, - List statements){ + public MethodNode(AccessTypeNode visibility, TypeNode type, String identifier, ParameterListNode parameters, List statements) { this.visibility = visibility; this.type = type; this.identifier = identifier; @@ -31,18 +30,18 @@ public class MethodNode implements MemberNode, Visitable { this.statements = statements; } - public MethodNode(AccessTypeNode visibility, String identifier){ + public MethodNode(AccessTypeNode visibility, String identifier) { this.visibility = visibility; this.identifier = identifier; } - public boolean isSame(MethodNode methodNode){ + public boolean isSame(MethodNode methodNode) { boolean isSame = false; - if(methodNode.identifier.equals(identifier)){ - if(parameters != null && methodNode.parameters != null){ - if(parameters.parameters.size() == methodNode.parameters.parameters.size()){ - for(int i = 0; i < parameters.parameters.size(); i++){ - if(parameters.parameters.get(i).identifier.equals(methodNode.parameters.parameters.get(i).identifier)){ + if (methodNode.identifier.equals(identifier)) { + if (parameters != null && methodNode.parameters != null) { + if (parameters.parameters.size() == methodNode.parameters.parameters.size()) { + for (int i = 0; i < parameters.parameters.size(); i++) { + if (parameters.parameters.get(i).identifier.equals(methodNode.parameters.parameters.get(i).identifier)) { isSame = true; } } diff --git a/src/main/java/main/Main.java b/src/main/java/main/Main.java index 8b858b4..9a88764 100644 --- a/src/main/java/main/Main.java +++ b/src/main/java/main/Main.java @@ -1,7 +1,10 @@ package main; import ast.ASTNode; +import ast.ClassNode; import ast.ProgramNode; +import ast.type.AccessTypeNode; +import ast.type.EnumAccessTypeNode; import parser.ASTBuilder; import parser.generated.SimpleJavaLexer; import parser.generated.SimpleJavaParser; @@ -25,8 +28,6 @@ import java.nio.file.Paths; * java.exe -jar .\target\JavaCompiler-1.0-SNAPSHOT-jar-with-dependencies.jar 'src/main/resources/input/CompilerInput.java' 'src/main/resources/output' */ public class Main { - - public static void main(String[] args) throws Exception { if (args.length == 2) { // args[0] is the input file path diff --git a/src/main/java/main/RaupenLogger.java b/src/main/java/main/RaupenLogger.java index 4ea499f..90bc7e2 100644 --- a/src/main/java/main/RaupenLogger.java +++ b/src/main/java/main/RaupenLogger.java @@ -16,18 +16,18 @@ import java.util.List; import java.util.logging.*; /** - Beispiel für Logging-Arten: -

logger.severe("Schwerwiegender Fehler"); -

logger.warning("Warnung"); -

logger.info("Information"); -

logger.config("Konfigurationshinweis"); -

logger.fine("Fein"); -

logger.finer("Feiner"); -

logger.finest("Am feinsten"); -

You may toggle the logging level of the console and file handlers by - changing the level ALL/OFF/etc. in the constructor. - consoleHandler.setLevel(Level.OFF); - fileHandler.setLevel(Level.ALL); + * Beispiel für Logging-Arten: + *

logger.severe("Schwerwiegender Fehler"); + *

logger.warning("Warnung"); + *

logger.info("Information"); + *

logger.config("Konfigurationshinweis"); + *

logger.fine("Fein"); + *

logger.finer("Feiner"); + *

logger.finest("Am feinsten"); + *

You may toggle the logging level of the console and file handlers by + * changing the level ALL/OFF/etc. in the constructor. + * consoleHandler.setLevel(Level.OFF); + * fileHandler.setLevel(Level.ALL); */ public class RaupenLogger { @@ -172,9 +172,9 @@ public class RaupenLogger { } String indentString = " ".repeat(indent * 2); logger.info(indentString + abstractSyntaxTree.getClass()); + //for (ASTNode child : abstractSyntaxTree.getChildren()) { + // logAST(child, indent + 1); + // } - // for (ASTNode child : node.) { - // printAST(child, indent + 1); - // } } } diff --git a/src/test/Makefile b/src/test/Makefile index e3e7d75..66c7df6 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -10,15 +10,17 @@ compile-javac: compile-raupenpiler: cd ../.. ; mvn -DskipTests install cd ../.. ; mvn exec:java -Dexec.mainClass="main.Main" -Dexec.args="'src/main/resources/input/CompilerInput.java' 'src/main/resources/output' " + cp ../main/resources/output/CompilerInput.class .java/resources/output/raupenpiler -test: test-javac test-raupenpiler +test: compile-javac compile-raupenpiler test-javac test-raupenpiler test-javac: - #compile-javac - #java -cp .\resources\output\javac CompilerInput test-raupenpiler: - #java -cp .\resources\output\raupenpiler CompilerInput + mv ../main/resources/output/CompilerInput.class .java/main/ + cd .java/main/ + + clean: rm -f ./resources/output/javac/*.class diff --git a/src/test/java/main/EmptyClassExample.java b/src/test/java/main/EmptyClassExample.java deleted file mode 100644 index e7715be..0000000 --- a/src/test/java/main/EmptyClassExample.java +++ /dev/null @@ -1,6 +0,0 @@ -package main; - -public class EmptyClassExample { - private class Inner { - } -} // -o für outout \ No newline at end of file diff --git a/src/test/java/main/TestCompilerOutput.java b/src/test/java/main/TestCompilerOutput.java index 6a30e14..202770e 100644 --- a/src/test/java/main/TestCompilerOutput.java +++ b/src/test/java/main/TestCompilerOutput.java @@ -3,11 +3,11 @@ package main; /** * This class is used to test the output of the compiler. * - *

Im gleichen Ordner wie diese Datei (main.TestCompilerOutput.java) muss die selbst kompilierte CompilerInput.class Datei sein. - *
Hinweis: Diese muss man also vom Ordner main/resources/output in diesen Ordner hier (test/java) rein kopieren. (bis es eine bessere Lösung gibt)

+ *

Im gleichen Ordner wie diese Datei (TestCompilerOutput.java) muss die selbst kompilierte CompilerInput.class Datei sein. + *
Hinweis: Diese muss man also vom Ordner main/resources/output in diesen Ordner hier (test/java/main) rein kopieren. (bis es eine bessere Lösung gibt)

* *

Die selbst kompilierte .class Datei wird dann hier drin geladen und eine Instanz von ihr erstellt, es können auch Methoden aufgerufen werden. - *

Diese main.TestCompilerOutput.java Datei wird dann in \src\test\java> mit javac .\main.TestCompilerOutput.java kompiliert und mit java main.TestCompilerOutput ausgeführt. + *

Diese TestCompilerOutput.java Datei wird dann in \src\test\java> mit javac .\main.TestCompilerOutput.java kompiliert und mit java main.TestCompilerOutput ausgeführt. * Wenn unser Compiler funktioniert, sollten keine Errors kommen (sondern nur die Ausgaben, die wir in der CompilerInput.java Datei gemacht haben, * oder Methoden, die wir hier aufrufen).

* diff --git a/src/test/java/parser/ParserTest.java b/src/test/java/parser/ParserTest.java index d599632..a265b30 100644 --- a/src/test/java/parser/ParserTest.java +++ b/src/test/java/parser/ParserTest.java @@ -1,5 +1,18 @@ package parser; +import ast.BlockNode; +import ast.ClassNode; +import ast.LiteralNode; +import ast.ProgramNode; +import ast.expression.ExpressionNode; +import ast.member.FieldNode; +import ast.member.MemberNode; +import ast.member.MethodNode; +import ast.parameter.ParameterListNode; +import ast.parameter.ParameterNode; +import ast.statement.ReturnStatementNode; +import ast.statement.StatementNode; +import ast.type.*; import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.tree.ParseTree; import org.junit.jupiter.api.BeforeEach; @@ -81,6 +94,43 @@ public class ParserTest { public void astBuilderTest() { // TODO: Implement this test method + // ---------------- Aktuellen CompilerInput nachbauen ---------------- + ProgramNode startNode = new ProgramNode(); + // public class CompilerInput {} + ClassNode compilerInputClass = new ClassNode(new AccessTypeNode(EnumAccessTypeNode.PUBLIC), "CompilerInput"); + // public int a; + compilerInputClass.addMember(new FieldNode(new AccessTypeNode(EnumAccessTypeNode.PUBLIC), new BaseTypeNode(EnumTypeNode.INT), "a")); + // public static int testMethod(char x) { return 0; } + compilerInputClass.addMember( + new MethodNode( + new AccessTypeNode(EnumAccessTypeNode.PUBLIC), + new BaseTypeNode(EnumTypeNode.INT), + "testMethod", + new ParameterListNode(List.of(new ParameterNode(new BaseTypeNode(EnumTypeNode.CHAR), "x"))), + List.of(new ReturnStatementNode(new LiteralNode(0))) + )); + + ClassNode testClass = new ClassNode(new AccessTypeNode(EnumAccessTypeNode.PUBLIC), "Test"); + testClass.addMember( + new MethodNode( + new AccessTypeNode(EnumAccessTypeNode.PUBLIC), + new BaseTypeNode(EnumTypeNode.INT), + "testMethod", + new ParameterListNode(List.of(new ParameterNode(new BaseTypeNode(EnumTypeNode.CHAR), "x"), new ParameterNode(new BaseTypeNode(EnumTypeNode.INT), "a"))), + List.of(new ReturnStatementNode(new LiteralNode(0))) + ) + ); + + //compilerInputClass.addClass(testClass); + + startNode.addClass(compilerInputClass); + startNode.addClass(testClass); + + // ---------------- Aktuellen CompilerInput nachbauen ---------------- + + + +