Inhaltsverzeichnis

Beisitzer (Kamp)

Prüfer (Philippsen)

Prüfungsdauer 30min

Lexer

Stück Code gegeben. Was tut ein Compiler damit?

Lexer geht zeichenweise über Code. Kommentare weg. Vorteil: Ist schnell, weil deterministischer endlicher Automat. Konkret an einem Beispiel durchführen: statt `int a =` `TKINT ID TKASSNG` etc.pp. Namenstablle erwähnen, weil da das `a` reinkommt.

Parser

Parser baut anhand von Grammatik Strukturbaum auf.

Langsamer als Lexer, weil Kellerautomat. Lexer trotzdem sinnvoll, weil Parser dadurch einfacher & schneller.

Grammatik erweitern

Codestück enthielt so was wie

  while(foo() && (r = r+1) > 3) {}

Das Besondere ist `(r = r+1)`. Nach Beschreibung der Prüfer liefert das (wie in C) immer den neuen Wert zurück. Das konnte „unsere“ Übungssprache nicht. Frage → Was muss man ändern, um das in den Compiler einzubauen?

Grammatik erweitern, entsprechend auch AST-Knoten mit Aktionen erweitern. Alternativ auch Umformen in vorhandenen Konstrukte möglich & erneut in den Compiler werfen möglich.

Graham & Glanville

Syntaxbaum für `(r = r+1) > 3`

Nachfrage, ob wirklich Graham & Glanville anwendbar, da Seiteneffekt durch Variablenzuweisung. (wusste ich nicht; wurde im Nachhinein aber auch als schwierige und daher nicht so wichtige Frage deklariert)

Registerzuteilung mit Graph färben

Graph gegeben

mit zugehörigem Code (darf man sich jetzt selber einen ausdenken). 2 reale Register zur Verfügung.

Erstmal Begriffe wissen & erklären wie

Verfahren selber durchführen

Fazit