20.11.2013 Aufrufe

Compilerbau Prof. Dr. Wolfgang Schramm Sommersemester 2006 ...

Compilerbau Prof. Dr. Wolfgang Schramm Sommersemester 2006 ...

Compilerbau Prof. Dr. Wolfgang Schramm Sommersemester 2006 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Compilerbau</strong><br />

<strong>Prof</strong>. <strong>Dr</strong>. <strong>Wolfgang</strong> <strong>Schramm</strong><br />

<strong>Sommersemester</strong> <strong>2006</strong><br />

Name: ..........................................................................................<br />

Vorname: ..........................................................................................<br />

Matrikel-Nr.: ..........................................................................................<br />

Unterschrift: ..........................................................................................<br />

Hinweise:<br />

1.) Schreiben Sie Ihren Namen und Ihre Matrikelnummer zu Beginn auf das Deckblatt der<br />

Klausur. Überprüfen Sie, ob die Klausur vollständig ist.<br />

2.) Bearbeiten Sie die Aufgaben möglichst auf den jeweiligen Blättern. Der Platz auf dem<br />

Aufgabenblatt ist so bemessen, daß er für die Lösung der Aufgabe ausreicht. Andernfalls<br />

verwenden Sie die Rückseite oder ein mit Ihrem Namen, Ihrer Matrikelnummer und der<br />

Aufgabennummer gekennzeichnetes separates Blatt.<br />

3.) Als Hilfsmittel ist, außer einem Schreibgerät, nur das Folienskript <strong>Compilerbau</strong> (mit ihren<br />

persönlichen Ergänzungen) zugelassen.<br />

4.) Schreiben Sie mit dokumentenechten Stiften. Mit Bleistiften, Tintenkiller o.ä. erstellte<br />

Lösungen sind ungültig! Rotschreibende Stifte sind ebenfalls verboten!<br />

Schreiben Sie bitte leserlich!<br />

Aufgabe 1 2 3 4 5 6 7 Σ<br />

Erreichbare Punkte 10 15 36 16 20 15 8 120<br />

Erreichte Punkte<br />

V i e l E r f o l g ! ! ! Note:


Name:<br />

Matrikelnr.:<br />

Aufgabe 1 Reguläre Ausdrücke, Zustandsdiagramme<br />

10 (5 + 5) Punkte<br />

a) Gegeben sei das Alphabet A = {a, b, c}. Geben Sie einen regulären Ausdruck für die Menge der<br />

Wörter über A an, die mit a beginnen, mit b enden und genau dreimal das Symbol c enthalten.<br />

Beispiel: korrekt falsch<br />

acccb<br />

accca<br />

abcabcabcb<br />

abcabcabcabcb<br />

aaacaacaacb<br />

cccb<br />

Lösung:<br />

b) Geben Sie für den regulären Ausdruck<br />

(a | b) c (a | b)+<br />

ein Zustandsdiagramm an.<br />

Lösung:<br />

2


Name:<br />

Matrikelnr.:<br />

Aufgabe 2 Produktionsregeln, Mehrdeutigkeit<br />

15 (5 + 10) Punkte<br />

Gegeben seien die folgenden Produktionen einer Grammatik:<br />

B → T | F | B ∧ B | B∨ B | (B) | ¬ B<br />

a) Zeigen Sie, dass die Grammatik mehrdeutig ist.<br />

b) Transformieren Sie die Grammatik so, dass die Operatoren linksassoziativ wirken und die<br />

Prioritäten durch ¬, ∧, ∨ (in absteigender Reihenfolge) festgelegt werden.<br />

3


Name:<br />

Matrikelnr.:<br />

Aufgabe 3 Top-Down-Analyse<br />

36 (20 + 16) Punkte<br />

a) Gegeben sind die folgenden Produktionen einer Grammatik mit Startsymbol S:<br />

S → aSB | Abc .<br />

A → Bc | Aa | a.<br />

B → Aa | Sb | b.<br />

Eliminieren sie in den Produktionen die Linksrekursion.<br />

Lösung:<br />

4


Name:<br />

Matrikelnr.:<br />

Aufgabe 3 Top-Down-Analyse - Fortsetzung<br />

36 (20 + 16) Punkte<br />

b) Eine Grammatik sieht nach Beseitigung der Linksrekursion wie folgt aus (Großbuchstaben<br />

sind NTS, Kleinbuchstaben und die Klammern () sind TS):<br />

A → B | B D<br />

D → d B D | ε<br />

B → C | C E<br />

E → e C E | ε<br />

C → (A) | c C | a | b<br />

Berechnen Sie die FIRST- und die FOLLOW-Mengen.<br />

5


Name:<br />

Matrikelnr.:<br />

Aufgabe 4 LR-Parser 16 (10 + 6) Punkte<br />

Gegeben ist eine Grammatik mit folgenden Produktionen:<br />

(1) S → A<br />

(2) A → aBb<br />

(3) A → ade<br />

(4) A → bBc<br />

(5) A → bdd<br />

(6) B → d<br />

a) Analysieren sie mit unten stehender Parsetabelle das Wort adb.<br />

a b c d e $ S A B<br />

0 s2 s3 1<br />

1 acc<br />

2 s5 4<br />

3 s7 6<br />

4 s8<br />

5 r6 r6 s9<br />

6 s10<br />

7 r6 r6 s11<br />

8 r2<br />

9 r3<br />

10 r4<br />

11 r5<br />

Lösung:<br />

6


Name:<br />

Matrikelnr.:<br />

Aufgabe 4 LR-Parser - Fortsetzung 16 (10 + 6)Punkte<br />

b) Wie kommt es zu shift/reduce-Konflikten? Geben sie ein Beispiel an.<br />

7


Name:<br />

Matrikelnr.:<br />

Aufgabe 5 Lex / Flex 20 Punkte<br />

Schreiben sie ein (f)lex-Programm, welches die Datei mit dem Namen input.txt einliest und<br />

für jede Zeile die Zeilennummer (beginnend bei 1) und die Anzahl der geraden Binärzahlen, die<br />

größer sind als 3 sowie die Anzahl der Binärzahlen insgesamt in dieser Zeile ausgibt.<br />

Beispiel für die Datei input.txt:<br />

1001 1001110 000110110111 10000111 1100<br />

1 0011010 1100010101 001 00<br />

<br />

Ausgabe:<br />

Zeile 1: 2/5<br />

Zeile 2: 1/5<br />

Lösung:<br />

int main(int argc, char *argv[])<br />

{<br />

yyin = fopen("input.txt", "r");<br />

yylex();<br />

}<br />

return 0;<br />

8


Name:<br />

Matrikelnr.:<br />

Aufgabe 6 Yacc / Bison 15 Punkte<br />

Gegeben sind die folgenden Syntaxregeln, die stark an die Syntax von CopraL erinnern:<br />

program → decl_part.<br />

decl_part → { var_decl | func_decl }+.<br />

var_decl → type id_list “;”.<br />

type → ”int” | “char”.<br />

id_list → id { “,” id }.<br />

func_decl → type id “(” params “)” body.<br />

params → type id {“,” type id } | ε.<br />

Geben sie die entsprechenden Produktionen für yacc/bison an. Bedenken sie, dass sie die Syntaxregeln<br />

mit den EBNF-Symbolen { und } umschreiben müssen. Die Nonterminalsymbole body und<br />

id müssen sie nicht mehr beschreiben.<br />

Lösung:<br />

9


Name:<br />

Matrikelnr.:<br />

Aufgabe 7 Allgemeine Fragen 8 (4 + 4) Punkte<br />

a) Erläutern Sie Aufbau und Funktion (d.h. wozu wird sie gebraucht, welche Informationen<br />

muss sie verwalten) einer Symboltabelle.<br />

b) Erklären Sie anschaulich warum die Bottom-Up-Analyse die Rekonstruktion der<br />

Rechtsableitung eines Programm ist.<br />

10

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!