Fachkonzept - Compiler
Compiler als Übersetzer
Ein Compiler (im engeren Sinn) ist ein universelles Programm (Algorithmus), das jedes Programm einer Quell-Programmiersprache in ein äquivalentes Programm einer Ziel-Programmiersprache übersetzt.
Als Beispiel kann ein Compiler dienen, der jedes MyKaList-Programm in ein äquivalentes MyKaGoto-Programm übersetzt.
Compiler für Programmiersprachen
Ein Compiler (im weiteren Sinn) ist ein System, das aus Scanner, Parser, Codererzeuger und Codeoptimierer besteht.
Die einzelnen Bausteine eines Compilers sollen anhand des folgenden Beispiel erläutert werden.
links while nichtVorWand: ziegelHinlegen schritt #while
Scanner: führt eine lexikalische Analyse des Quelltextes durch und erzeugt die Tokenfolge
(ELANW,'links') (WH,'while') (BED,'nichtVorWand') (DP,':') (ELANW,'ziegelHinlegen') (ELANW,'schritt') (WH_ENDE,'#while')
Parser: führt eine syntaktische Analyse auf der Tokenfolge aus und erzeugt eine strukturierte Darstellung des Programms
[ ['links'], ['while', ['nichtVorWand'], [ ['ziegelHinlegen'], ['schritt'] ] ] ]
Codeerzeuger: übersetzt die strukturierte Darstellung des Programms in einen Programmcode
[ (None, ['links']), ('.L0', ['noop']), (None, ['if', ['nichtVorWand'], ['goto', '.L1'], ['goto', '.L2']]), ('.L1', ['noop']), (None, ['ziegelHinlegen']), (None, ['schritt']), (None, ['goto', '.L0']), ('.L2', ['noop']) ]
Codeoptimierer: optimiert den Programmcode. Im vorliegenden Fall werden überflüssige noop
-Anweisungen entfernt.
[ (None, ['links']), ('.L0', ['if', ['nichtVorWand'], ['goto', '.L1'], ['goto', '.L2']]), ('.L1', ['ziegelHinlegen']), (None, ['schritt']), (None, ['goto', '.L0']), ('.L2', ['noop']) ]
Zur Ausführung des Programmcodes benötigt man jetzt einen Code-Interpreter.