compilerbau:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
compilerbau:start [2021/12/29 11:29] – Externe Bearbeitung 127.0.0.1 | compilerbau:start [2022/05/19 08:10] (aktuell) – [Fertiges Programm zum Ausprobieren] Martin Pabst | ||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
</ | </ | ||
- | Ein Schüler (Lukas) | + | Ein Schüler |
+ | |||
+ | <WRAP center round info 80%> | ||
+ | Ein **Compiler** ist ein Computerprogramm, | ||
+ | - **Lexer**: Der Lexer zerlegt den Programmtext in die kleinsten syntaktisch sinnvollen Einheiten (" | ||
+ | - **Parser**: Der Parser analysiert die Liste der Tokens und erstellt daraus eine strukturelle Repräsentation des Programms, üblicherweise einen Baum (" | ||
+ | - **Interpreter/ | ||
+ | </ | ||
- | Ein Compiler ist ein Computerprogramm, | ||
- | - Lexer: Der Lexer zerlegt den Programmtext in die kleinsten syntaktisch sinnvollen Einheiten (" | ||
- | - Parser: Der Parser analysiert die Liste der Tokens und erstellt daraus eine strukturelle Repräsentation des Programms, üblicherweise einen Baum (" | ||
- | - Interpreter/ | ||
Im Folgenden wird die Funktionsweise eines Compilers vorgestellt, | Im Folgenden wird die Funktionsweise eines Compilers vorgestellt, | ||
+ | ====== Inhalt dieses Tutorials ====== | ||
* [[.lexer: | * [[.lexer: | ||
* [[.parser: | * [[.parser: | ||
Zeile 22: | Zeile 26: | ||
====== Fertiges Programm zum Ausprobieren ====== | ====== Fertiges Programm zum Ausprobieren ====== | ||
- | Der Compiler unten bekommt ein kleines Testprogramm übergeben. Er verarbeitet es in drei Schritten: | + | Ihr wollt sicher sehen, was der Compiler kann, der im Rahmen dieses Tutorials erstellt wird, daher hier gleich ein Blick auf das fertige Programm. \\ \\ |
+ | Unser Compiler unten bekommt ein kleines Testprogramm übergeben. Er verarbeitet es in drei Schritten: | ||
- Der Lexer zerlegt das Programm in einzelne Tokens. | - Der Lexer zerlegt das Programm in einzelne Tokens. | ||
- Der Parser bekommt die Tokenliste und baut daraus den AST (abstract syntax tree) auf. | - Der Parser bekommt die Tokenliste und baut daraus den AST (abstract syntax tree) auf. | ||
- Der Interpreter führ das Testprogramm aus, indem er den AST geeignet traversiert. | - Der Interpreter führ das Testprogramm aus, indem er den AST geeignet traversiert. | ||
- | Hier das Testprogramm: | + | Hier das Testprogramm, das unser Compiler übersetzen wird.: |
<code java> | <code java> | ||
a = 1; | a = 1; | ||
Zeile 37: | Zeile 42: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Schreibe weitere Testprogramme mit der oben angegebenen Syntax, füge sie unten ein und lasse sie vom Compiler übersetzen und ausführen! | ||
+ | </ | ||
Zeile 46: | Zeile 56: | ||
* Der Text wird hier Stringkonstante definiert. Er könnte ebenso | * Der Text wird hier Stringkonstante definiert. Er könnte ebenso | ||
* gut gerade vom Benutzer eingegeben worden sein. Wichtig ist: Der | * gut gerade vom Benutzer eingegeben worden sein. Wichtig ist: Der | ||
- | * Java-Compiler compiliert hier nichts. Es wird alles durch Lexer, | + | * Java-Compiler compiliert hier nichts. Es wird alles durch unseren |
- | * Parser und Interpreter | + | |
+ | * übersetzt und ausgeführt. | ||
*/ | */ | ||
- | String text = | + | String text = """ |
- | "a = 1;\n" + | + | a = 1; |
- | "b = 2; \n" + | + | b = 2; |
- | "while(a < 10) { \n" + | + | while(a < 10) { |
- | " | + | a = a + 1; |
- | " | + | b = b * 2; |
- | " | + | print(b); |
- | | + | } |
+ | """; | ||
println(" | println(" |
compilerbau/start.txt · Zuletzt geändert: 2022/05/19 08:10 von Martin Pabst