![]() | Compilerbau I WS97/98 |
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:
( rx - rm ) / rs * 2.0 * rpi
1.14 - rs / (ra * rb ) + (1.0 - rs ) / 2
( 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.
s.exp
einen normaliserten Eingabeterm
bekommt und diesen ausgibt. Normalisieren Sie dann die Terme
(a) und (b) mit Hilfe der attributierten Grammatik.
r
beginnen, vom Typ REAL
sein sollen, solche mit
i
-Namen vom Typ INT
.