no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


programmieren:java:compilerbeispiel [2021/12/29 11:40] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Compilerbau (Einführung) ======
 +Ein Schüler (Lukas) bat um eine Erklärung, wie ein Compiler (z.B. [[programme:eos:start|EOS]] programmiert wird. Leider pflegen alle Artikel, die ich dazu im Internet finde, einen recht theoretischen Zugang zum Thema. Daher möchte ich die Sache im Folgenden so erklären, wie ich sie (damals als Schüler in der 12. Jahrgangsstufe) an einem einfachen, in Pascal geschriebenen Compiler gelernt habe. \\ 
  
 +Ein Compiler ist ein Computerprogramm, das einen in einer Programmiersprache verfassten Programmtext einliest und in eine andere Programmiersprache umwandelt oder direkt ausführt. Er arbeitet üblicherweise in drei Schritten, die nacheinander ausgeführt werden:
 +  - Lexer: Der Lexer zerlegt den Programmtext in die kleinsten syntaktisch sinnvollen Einheiten ("Tokens"). 
 +  - Parser: Der Parser analysiert die Liste der Tokens und erstellt daraus eine strukturelle Repräsentation des Programms, üblicherweise einen Baum ("Syntaxbaum" oder "abstract syntax tree" oder kurz: AST)
 +  - Interpreter/Codegenerator: Ein Interpreter kann das als Parsebaum übergebene Programm direkt ausführen. Ein Codegenerator kann es in eine andere Programmiersprache (z.B. Maschinensprache) umwandeln.
 +
 +Im Folgenden wird die Funktionsweise eines Compilers vorgestellt, der mathematische Terme (z.B. ''2 * (3 + a) - b'' ) mit gegebenen Variablenbelegungen zur Laufzeit auswerten kann. In einem zweiten Schritt wird dieser Compiler zu einer einfachen Programmiersprache [[..:erweiterung:start|erweitert]], die Wiederholungen, Zuweisungen und eine einfach Print-Anweisung enthält.
 +
 +Hier schon mal der Quelltext zum ersten Compiler: {{:programmieren:java:simpleparser.zip|Quelltext}}
 +
 +Hier geht's zu den einzelnen Kapiteln:
 +  - Die Schritte des Compilers
 +    - [[..:schritte:lexer:start|Lexer]]
 +    - [[..:schritte:parser:start|Parser]]
 +    - [[..:schritte:interpreter:start|Interpreter]]
 +  - [[..:verwendung:start|Aufruf/Verwendung von Lexer, Parser und Interpreter]]
 +  - [[..:ebnf:start|Beschreibung der Syntax durch EBNF]]
 +  - [[..:erweiterung:start|Erweiterung der Sprache]]
 +  - [[..:aufgaben1:start|Aufgaben]]
Drucken/exportieren
QR-Code
QR-Code programmieren:java:compilerbeispiel (erstellt für aktuelle Seite)