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.

Semantik

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.

X

Fehler melden

X

Suche