Prof. Dr. R. Laue
Dr. A. Kohnert                                                                                                                                             SS 2005
Compilerbau und formale Sprachen
                                Übungsblatt 5
                              

URL:         /axel/compiler_ss05_blatt5.html

 Dieses Blatt wird am 18.5.2005 besprochen.



Aufgabe 12

Es soll in mehreren Schritten ein Taschenrechnerprogramm gebaut werden. Es können Ausdrücke (z.B. (5-3)^10;)
eingegeben werden und das Programm gibt (später in der vollständigen Version) die  Ergebniszeilen aus. (z.B. 1024).
Im ersten Schritt werden nur  Integerzahlen verarbeitet. Daraus kann man mit den Operatoren
+ - * / % ^ ) (
Ausdrücke bauen. Ein Ausdruck soll
durch ; beendet werden. Schreiben Sie ein lex Programm welches die Token erkennt, d.h. das Programm soll die
relevanten Teile erkennen und mit printf einen  Tokennamen ausgeben, nicht relevante Eingaben sollen überlesen werden. Beim Einlesen einer Zahl soll ZAHL=<wert> ausgegeben werden.
Abgabe: der lex source code per email  bis 17.5. 24.00 Uhr an a12ss05 at btm2x3.mat.uni-bayreuth.de

Aufgabe 13

Entwerfen Sie eine Grammatik für die Aufgabe 12. Es sollen zulässige Ausdrücke die aus Zahlen und Sonderzeichen + - * / % ^ ) (  ;
gebaut werden als Wörter in der Sprache erkannt werden.


Aufgabe 14
Schreiben Sie ein lex Programm (abgabe von a14.l per email bis 17.5. 24.00 Uhr an a14ss05 at btm2x3.mat.uni-bayreuth.de)
welches ein C-Programm in einen Tokenstrom mit den Symbolen

NAME
ZAHL
SONDERZEICHEN

umwandelt. Als Zahl sollen auch Dezimalzahlen erkannt werden. So sollte das Programm
main() { float f=0.45; }
umgewandelt werden in
 
NAME SONDERZEICHEN SONDERZEICHEN
 SONDERZEICHEN NAME NAME SONDERZEICHEN
 ZAHL SONDERZEICHEN SONDERZEICHEN

Testen Sie das Programm auch an der von lex erzeugten Datei lex.yy.c. 

 

P .S.: Bei meiner Linux Version geht das Compilieren wie folgt:
lex a14.l
gcc lex.yy.c -lfl