Flex

Für die lexikalische Analyse verwenden wir den Scanner-Generator Flex. Die Dokumentation ist auch im Linux-Pool mit info flex einsehbar. Flex ist eine weitgehend abwärtskompatible Erweiterung des klassischen Generators Lex.

Einige Beispiele von Flex-Programmen sind verfügbar. Eine Vorlage für ein Flex-Programm erkennt Identifier. Ein weiteres Programm simuliert die Funktionalität von wc, das Zeilen, Wörter und Zeichen der Eingabe zählt. Das Verzeichnis enthält auch Vorschläge für die Aufgaben vom entsprechenden Übungsblatt.

Das Erzeugen eines Scanners aus einer Spezifikation scanner.l erfolgt in zwei Schritten. Mit flex scanner.l wird ein C-Programm lex.yy.c erzeugt, das den Scanner implementiert. Mit gcc lex.yy.c wird eine ausführbare Datei a.out erzeugt. Sie enthält den Scanner, der von der Standard-Eingabe liest.

Recursive-Descent Parser

Ein detailliert ausgeführtes Beispiel eines Recursive-Descent RLL(1)-Parsers mit Fehlerbehandlung ist verfügbar.

Das Verzeichnis enthält Vorschläge für die Aufgaben vom entsprechenden Übungsblatt. Unter anderem ist ein Recursive-Descent Parser in der Programmiersprache C++ zu der in Aufgabe 21 gegebenen RLL(1)-Grammatik einsehbar. Das Programm erwartet das zu erkennende Wort ohne terminierendes # oder Zeilenende-Zeichen an der Standard-Eingabe. Solche Eingaben können beispielsweise mit echo -n erzeugt werden.