PSS Gedächtnisprotokoll Klausur WS 0506: Unterschied zwischen den Versionen
(aufgabe 1) |
|||
Zeile 3: | Zeile 3: | ||
---- | ---- | ||
<pre> | <pre> | ||
− | 1. | + | 1. |
− | + | gegebene grammatik: | |
− | S -> E# | + | S -> E # |
− | E -> ide | + | E -> ide |
− | + | | ide ( A ) | |
− | A -> P | + | A -> P |
− | + | | | |
− | P -> P , E | + | P -> P , E |
− | + | | E | |
+ | |||
+ | |||
+ | 1.1 | ||
+ | forme die grammatik so um, dass sie für einen | ||
+ | top-down-parser geignet ist (--> LL(1)). | ||
+ | |||
+ | 1.2 | ||
+ | direktormengen aufstellen. | ||
+ | für die alte und die neue grammatik. | ||
+ | |||
+ | |||
+ | 2. | ||
+ | schreibe einen recursive-decent-parser (combinator/hand) | ||
+ | ohne fehlerbehandlung für die grammatik: | ||
+ | |||
+ | S -> T # | ||
+ | T -> < T T' > | ||
+ | T' -> ide | ||
+ | | | ||
+ | |||
+ | ??? | ||
− | |||
− | |||
− | |||
− | |||
− | |||
in der sprache war: <<1 2 4> <1 4 5> 3> | in der sprache war: <<1 2 4> <1 4 5> 3> | ||
das ganze repräsentierte einen n-ären baum | das ganze repräsentierte einen n-ären baum | ||
Zeile 28: | Zeile 44: | ||
Close | Close | ||
space | space | ||
− | id(val: | + | id(val:int) |
3. SECD | 3. SECD |
Version vom 13. Februar 2006, 20:27 Uhr
Hier fehlen noch ein paar Informationen, mein Gedächtnis ist da etwas lückenhaft! Außerdem scheint mir einiges falsch..? naja vorallem die 2. Grammatik ist nicht identisch
1. gegebene grammatik: S -> E # E -> ide | ide ( A ) A -> P | P -> P , E | E 1.1 forme die grammatik so um, dass sie für einen top-down-parser geignet ist (--> LL(1)). 1.2 direktormengen aufstellen. für die alte und die neue grammatik. 2. schreibe einen recursive-decent-parser (combinator/hand) ohne fehlerbehandlung für die grammatik: S -> T # T -> < T T' > T' -> ide | ??? in der sprache war: <<1 2 4> <1 4 5> 3> das ganze repräsentierte einen n-ären baum DATA absy == node(val:seq[absy]) leaf(val:token) DATA token == Open Close space id(val:int) 3. SECD (\x. x(2))(\y. dup(y)) ergebnis 4 dup ist triviale operation 4. codeerzeugung int f(x:int, y:int){ if(x==0) return y else return f(x-1, x*y) } erzeuge pseudocode für eine stackartige maschine erläutere den stackframe (überlappung und sowas) 5. unifikation length: string -> nat even?: nat -> bool h: string -> ??? h(s) == ??? eval eval s eval length ??? even? ergebnis war korrekt, aber das sah vllt. auch etwas anders aus..