Testfragen

Die folgende Grammatik G über dem Alphabet Σ = {w, f, u, i} soll Ausdrücke mit den Konstanten w, f und den binären Operatoren u, i beschreiben:

G = (Σ,{E},{Ew | f | EiE | EuE}, E).

Begründen Sie, daß G mehrdeutig ist.






Gesucht ist eine zu G äquivalente eindeutige kontextfreie Grammatik G', für deren Ableitungsbäume gilt: der Operator u ist linksassoziativ, der Operator i ist rechtsassoziativ, der Operator u bindet stärker als der Operator i.

Wie sieht unter diesen Bedingungen der abstrakte Syntaxbaum für fiwufiw aus?






Untersuchen Sie, ob G1, G2, G3 die gewünschten Eigenschaften erfüllen. (Falls nein: begründen, falls ja: konkreten Syntaxbaum für fiwufiw angeben.)

 $&bull#bullet;$
Welches ist die Bedeutung der Aussageform {V}P{N} im Hoare-Kalkül?
Geben Sie eine wahre und eine falsche Aussage dieser Form an.
 $&bull#bullet;$
Wodurch wird eine kontextfreie Grammatik zu einer Attributgrammatik erweitert?
 $&bull#bullet;$
Geben Sie einen regulären Ausdruck für die Spursprache dieses Programms an.
while (P) { A; if (Q) { B; } C; }
Das Spur-Alphabet ist {A, B, C, P0, P1, Q0, Q1}, dabei bedeuten
A : die Anweisung A wird ausgeführt,
P0 (bzw. P1): der Ausdruck P wird ausgewertet und ergibt falsch (bzw. wahr).

Nach welcher Regel bestimmt man, ob ein Ausdruck f(x) korrekt getypt ist? (Ohne Berücksichtigung von Vererbung oder Generizität.)

Wie werden die folgenden Operationen für Typen in Programmiersprachen realisiert?

In Java gibt es keine direkte Realisierung der Vereinigung, was wird stattdessen empfohlen?





Für das Ada-Programm:

with Ada.Text_Io; use Ada.Text_Io;

procedure Main is
   X : Integer := 3; Y : Integer := 2;
   procedure P (X : Integer) is
      procedure Q (Y : Integer) is
         procedure R (X : Integer) is
         begin Put_Line (Integer'Image (X+Y)); end R;
      begin if Y > 0 then P(X-1); else R(X+Y); end if; end Q;
   begin if X > 0 then Q(X-1); else P(X-Y); end if; end P;
begin P (X-1); end Main;

Zeichnen Sie die Frames mit allen Einträgen und Verweisen zu dem Zeitpunkt direkt vor dem ersten Aufruf von Put_Line.




























Wie wird auf die Werte von X und Y zugegriffen, die in Integer'Image(X+Y) benötigt werden?

Für folgende Deklaration:

int a [] = { 1,2,0 }; void p (int x, int y) { a[y] = x; x = y; }
betrachten wir den Aufruf p(a[0], a[1]).

Geben Sie die Ausführungsschritte sowie die resultierende Speicherbelegung an, falls zur Parameterübergabe benutzt wird:


















Für die Deklarationen:
class C { }    class D extends C { }
static void p (Object x, C      y) { System.out.println ("1"); }
static void p (D      x, C      y) { System.out.println ("2"); }
static void p (C      x, Object y) { System.out.println ("3"); }
Beschreiben Sie, wie die Überladung für die folgenden Aufrufe aufgelöst wird:
 $&bull#bullet;$
p (new D(), new D());
 $&bull#bullet;$
p (new C(), new C());

Johannes Waldmann 2013-01-28