<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=Compilerbau_Ged%C3%A4chtnisprotokoll_WS201112</id>
	<title>Compilerbau Gedächtnisprotokoll WS201112 - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=Compilerbau_Ged%C3%A4chtnisprotokoll_WS201112"/>
	<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Compilerbau_Ged%C3%A4chtnisprotokoll_WS201112&amp;action=history"/>
	<updated>2026-05-30T16:16:38Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in FreitagsrundenWiki</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=Compilerbau_Ged%C3%A4chtnisprotokoll_WS201112&amp;diff=17716&amp;oldid=prev</id>
		<title>Theresa: Die Seite wurde neu angelegt: „== Aufgabe 1 (8 Punkte) ==  Folgende uneindeutige Grammatik war gegeben:   E -&gt; E E      -- Applikation     | E.id     -- Selektion     | (E)     | a  a) Jeweils …“</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Compilerbau_Ged%C3%A4chtnisprotokoll_WS201112&amp;diff=17716&amp;oldid=prev"/>
		<updated>2012-03-09T17:05:01Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „== Aufgabe 1 (8 Punkte) ==  Folgende uneindeutige Grammatik war gegeben:   E -&amp;gt; E E      -- Applikation     | E.id     -- Selektion     | (E)     | a  a) Jeweils …“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Aufgabe 1 (8 Punkte) ==&lt;br /&gt;
&lt;br /&gt;
Folgende uneindeutige Grammatik war gegeben:&lt;br /&gt;
&lt;br /&gt;
 E -&amp;gt; E E      -- Applikation&lt;br /&gt;
    | E.id     -- Selektion&lt;br /&gt;
    | (E)&lt;br /&gt;
    | a&lt;br /&gt;
&lt;br /&gt;
a) Jeweils zwei mögliche Ableitungsbäume für: aaa und aa.x&lt;br /&gt;
&lt;br /&gt;
b) Grammatik umformen, sodass sie eindeutig wird. Dabei soll Selektion stärker binden als Applikation und Applikation soll linksassoziativ sein.&lt;br /&gt;
Das heißt, es herrscht folgende &amp;quot;gedachte Klammerung&amp;quot;: (aa)a und a(a.x)&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 2 (7 Punkte) ==&lt;br /&gt;
&lt;br /&gt;
Eine kontextfreie Grammatik war gegeben.&lt;br /&gt;
&lt;br /&gt;
a) Warum eignet sich die Grammatik nicht für einen LL(1)-Parser? &lt;br /&gt;
&lt;br /&gt;
''Enthielt Linksrekursion und konkurrierende Produktionen mit gleichen Direktorsets (d.h. gleichen Anfängen).''&lt;br /&gt;
&lt;br /&gt;
b) Forme die Grammatik so um, dass sie durch einen LL(1)-Parser geparset werden kann und zeige, dass die Direktorsets jetzt disjunkt sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 3 (13 Punkte) ==&lt;br /&gt;
&lt;br /&gt;
Gegeben eine abstrakte Syntax, zB Let, Selektion. Außerdem waren Regeln für die Typprüfung gegeben (Kontexte Gamma, Typen tau...).&lt;br /&gt;
&lt;br /&gt;
Aufgabe: Schreibe in OPAL einen Typchecker, der die gegebenen Regeln für die abstrakte Syntax implementiert.&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 4 (12 Punkte) ==&lt;br /&gt;
&lt;br /&gt;
Polymorphe Typprüfung / Unifikation:&lt;br /&gt;
&lt;br /&gt;
Abstrakter Syntaxbaum eines Ausdrucks war gegeben, dazu ein Kontext. Es musste mithilfe des Unifikationsalgorithmus der Typ des Ausdrucks berechnet werden.&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 5 (8 Punkte) ==&lt;br /&gt;
&lt;br /&gt;
Lambda-Kalkül&lt;br /&gt;
&lt;br /&gt;
a) Berechne freie Variablen des Lambda-Ausdrücke&lt;br /&gt;
&lt;br /&gt;
b) Führe in einem Lambda-Ausdruck alpha-Substitutionen durch, sodass alle Variablen unterschiedlich heißen. (Im gegebenen Ausdrucken gab es verschiedene Variablen mit Namen a, die an verschiedenen Stellen gebunden waren.)&lt;br /&gt;
&lt;br /&gt;
c) Führe eine beta-Reduktion durch.&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 6 (12 Punkte) ==&lt;br /&gt;
&lt;br /&gt;
Gegeben waren die Maschinenbefehle für die virtuelle Mikro-Opal-Maschine (siehe [http://docs.freitagsrunde.org/LV-Material/compilerbau-mst4.pdf]).&lt;br /&gt;
&lt;br /&gt;
Aufgabe: Schreibe in Opal einen Codegenerator, der aus der folgenden abstrakten Syntax eine Sequenz von Maschinenbefehlen macht, d.h. implementiere die Funktion compile (siehe unten).&lt;br /&gt;
&lt;br /&gt;
Dabei sollte darauf geachtet werden, dass die Stackgröße minimal bleibt. (Optimierung war 4 Punkte wert!) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;true&amp;quot; und &amp;quot;false&amp;quot; sollten dabei jeweils durch eine auf dem Stack liegende &amp;quot;1&amp;quot; oder &amp;quot;0&amp;quot; repräsentiert werden.&lt;br /&gt;
&lt;br /&gt;
 TYPE absy =   true&lt;br /&gt;
            | false&lt;br /&gt;
            | not(a)&lt;br /&gt;
            | implies(b1,b2)&lt;br /&gt;
&lt;br /&gt;
 FUN compile: absy -&amp;gt; seq[opcode]&lt;br /&gt;
&lt;br /&gt;
Für implies(b1,b2) war folgende Wahrheitstabelle gegeben:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
 ! width=33% | b1&lt;br /&gt;
 ! width=33% | b2&lt;br /&gt;
 ! width=34% | Ergebnis&lt;br /&gt;
 |-&lt;br /&gt;
 | true&lt;br /&gt;
 | true&lt;br /&gt;
 | false&lt;br /&gt;
 |-&lt;br /&gt;
 | true&lt;br /&gt;
 | false&lt;br /&gt;
 | false&lt;br /&gt;
 |-&lt;br /&gt;
 | false&lt;br /&gt;
 | true&lt;br /&gt;
 | true&lt;br /&gt;
 |-&lt;br /&gt;
 | false&lt;br /&gt;
 | false&lt;br /&gt;
 | true&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Theresa</name></author>
		
	</entry>
</feed>