Aufgabe 1:
Schreiben Sie einen Parser für korrekt aufgebaute Klammerstrukturen. Legen Sie folgende Grammatik zugrunde (a entspricht einer öffnenden, b einer schließenden Klammer):
| S | ![]() | aSbS | ε |
Aufgabe 2:
(123*(30-5))-16+32
auf korrekten syntaktischen Aufbau überprüft, und benutzen Sie dabei die untenstehende Grammatik in erweiterter Backus-Naur-Form.
Die Grammatik hat folgende Produktionen:
| expr | ![]() | term (+ term | - term)* |
| term | ![]() | factor (* factor | / factor)* |
| term | ![]() | number | ( expr ) |
| number | ![]() | digit+ |
| digit | ![]() | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Aufgabe 3:
Schreiben Sie einen Übersetzer, der eine Zahl auswertet. Mögliche Zahlen sollen z.B. sein:
17, 0, 1024, 13.5, 0.005, 5.5e-2, 6e+2, 1.00E3, 0e0, 000.000e000
Eingabewort soll eine als String dargestellte Zahl sein, Ergebnis der Übersetzung soll eine double-Zahl sein.
Die Grammatik für Zahlen hat folgenden Produktionen:
| number | ![]() | integer fraction? exponent? |
| integer | ![]() | digit+ |
| fraction | ![]() | . integer |
| exponent | ![]() | (e | E) sign integer |
| sign | ![]() | (+ | -)? |
| digit | ![]() | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Schreiben Sie eine Klasse NumberCompiler und leiten Sie diese von der Basisklasse Compiler ab.
Aufgabe 4:
Eine mathematische Formel der Art
| x |
| 2 |
| x |
| 3 |
| 3x + 2x |
| 6 |
soll in einer XML-Sprache wie folgt beschrieben werden:
Entwerfen Sie eine kontextfreie Grammatik für diese XML-Sprache.
Schreiben Sie einen Recursive-Descent-Parser auf Grundlage dieser Grammatik.
Wandeln Sie den Parser in einen Compiler um, der Formeln dieser Art in HTML-Code übersetzt, sodass diese wie oben dargestellt werden.