[CB-Logo]
Compilerbau I WS97/98
Übungen

Blatt 10

Abgabe: Montag, 19.1.1998

(ggf. Lösungen)

[Compilerbau-Homepage]

Gegeben seien im folgenden die kontextfreie Grammatik G = ({s,x,e,a,p},{REAL,INT,VAR,'+','-','*','/','(',')','='},P,s) mit

P = { s ::= x, x ::= x '=' e | e , e ::= e '+' p | e '-' p | p , p ::= p '*' a | p '/' a | a , a ::= REAL | INT | VAR | '(' e ')', }

und die folgenden Ausdrücke:

(a) ( rx - rm ) / rs * 2.0 * rpi
(b) 1.14 - rs / (ra * rb ) + (1.0 - rs ) / 2
(c) ( ia + ib ) * ( ia + ib ) = 2

Nehmen Sie weiter an, es stünde ein Parser zur Verfügung, der die Ausdrücke a-c in Tokenfolgen zerlegt, in denen die Zahlen durch REAL bzw. INT und die Identifikatoren mit VAR vorübersetzt werden, und die Token seien mit den Werten bzw. den Namen attributiert.

Aufgabe 1 (4 Pkt)

Attributieren die die Grammatik so, daß s als Attribut s.exp einen normaliserten Eingabeterm bekommt und diesen ausgibt. Normalisieren Sie dann die Terme (a) und (b) mit Hilfe der attributierten Grammatik.

Aufgabe 2 (4 Pkt)

Führen Sie eine Typbestimmung der Teilausdrücke für die Terme a-c aus, und zwar
  1. nach der Kellermethode aus der Vorlesung (Kap. 5.3 Script)
  2. mit Hilfe einer Attributierung der Grammatik G
Gehen Sie dabei davon aus, daß Sie über die Typinformation der Variablen verfügen, wobei Variablen, deren Namen mit r beginnen, vom Typ REAL sein sollen, solche mit i-Namen vom Typ INT.

Aufgabe 3 (12 Pkt)

Erzeugen Sie zur Berechung der Terme a-c mit Hilfe der Kellermethode und des Rutishauser-Verfahrens eine Folge von Einadreß-Befehlen des vonNeumann-Siumlators. (Benutzen Sie dabei die Resultate aus Auf.2)

[Compilerbau-Homepage]
IfI Mathe WWU

Dietmar Lammers
Last modified: Mon Jan 12 12:50:43 MET 1998