Aufgabe 1:  

Schreiben Sie einen Parser für korrekt aufgebaute Klammer­strukturen. Legen Sie folgende Grammatik zugrunde (a entspricht einer öffnenden, b einer schließenden Klammer):

Sgeht über nachaSbS  |  ε

Aufgabe 2:  

  1. Schreiben Sie einen Parser, der arithmetische Ausdrücke der Art

    (123*(30-5))-16+32

    auf korrekten syntaktischen Aufbau überprüft, und benutzen Sie dabei die unten­stehende Grammatik in erweiterter Backus-Naur-Form.

    Die Grammatik hat folgende Produktionen:

    expr geht über nachterm (+ term | - term)*
    term geht über nachfactor (* factor | / factor)*
    term geht über nachnumber  |  ( expr )
    number geht über nachdigit+
    digit geht über nach0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9

     

  2. Wandeln Sie den Parser in einen Compiler um, der den arithmetischen Ausdruck in seinen Zahlenwert übersetzt (ganzzahlige Division mit dem Zeichen /).

 

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 geht über nachinteger fraction? exponent?
integer geht über nachdigit+
fraction geht über nach. integer
exponent geht über nach(e | E) sign integer
sign geht über nach(+ | -)?
digit geht über nach0  |  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 mathe­matische Formel der Art

x
2
 + 
x
3
  =  
3x + 2x
6

soll in einer XML-Sprache wie folgt beschrieben werden:

<formel>
<bruch><oben>x</oben><unten>2</unten></bruch>
<normal>+</normal>
<bruch><oben>x</oben><unten>3</unten></bruch>
<gleich>auf den Hauptnenner bringen</gleich>
<bruch><oben>3x + 2x</oben><unten>6</unten></bruch>
</formel>

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.

 

 

 

up

 

homeH.W. Lang   Hochschule Flensburg   lang@hs-flensburg.de   Impressum   Datenschutz   ©   Created: 11.12.2009   Updated: 10.06.2018
Valid HTML 4.01 Transitional