2.0 KiB
2.0 KiB
Scanner
Scanner Input
Beispiel 1: Empty Class
String empty class = "public class Name {}";
Beispiel 2: Filled Class
String filled class =
"class javaFileInput.Example {" +
"if (x < 5) {" +
"for (int i = 0; i < 10; i++) {" +
"while (true) {" +
"x = 5;" +
"}"
Scanner Output
Beispiel 1: Empty Class
Token Type; Token Text Type gibts nur bei Terminalen, Text bei allen
[null "public", null "class", IDENTIFIER "Name", null "{", null "}", EOF "<EOF>"]
Bsp von Ihm mal:
[TokPublic,TokClass,TokIdentifier "Name",TokLeftBrace,TokRightBrace]
Beispiel 2: Filled Class
[TokClass,TokIdentifier "javaFileInput.Example",TokLeftBrace]
[TokIf,TokLeftParen,TokIdentifier "x",TokLessThan,TokNumber 5,TokRightParen,TokLeftBrace]
[TokFor,TokLeftParen,TokIdentifier "int",TokIdentifier "i",TokAssign,TokNumber 0,TokSemicolon,TokIdentifier "i",TokLessThan,TokNumber 10,TokSemicolon,TokIdentifier "i",TokPlus,TokPlus,TokRightParen,TokLeftBrace]
[TokWhile,TokLeftParen,TokIdentifier "true",TokRightParen,TokLeftBrace]
[TokIdentifier "x",TokAssign,TokNumber 5,TokSemicolon]
[TokRightBrace]
Parser
Parser Input
(Scanner Output)
Parser Output (AST)
Beispiel 1: Empty Class
Beispiel 2: Filled Class
Semantische Analyse / Typcheck
Typcheck Input
(Parser Output = AST)
Typcheck Output
Beispiel 1: Empty Class
Beispiel 2: Filled Class
Bytecodegenerierung
Bytecodegenerierung Input
(Typcheck Output = vom Typcheck eventuell manipulierter AST)
Bytecodegenerierung Output
Beispiel 1: Empty Class
Compiled Classfile
public class javaFileInput.Example {
}
Beispiel 2: Filled Class
für E2E Tests: Testdatei mit Main ausführen/kompilieren Testdatei mit "javac CompilerInput.java" kompilieren
wenn beides erfolgreich Ergebnis vom eigenen Compiler mit "java myOutput" ausführen Ergebnis von javac mit "java CompilerInput" ausführen