PSS Gedächtnisprotokoll Klausur WS 0506
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..