Prof. Dr. Mihel Jäger FB MNI Lösungsvorshlg zur Klusur ompileru vom 29. eptemer 2014 ufge 1 (3+3+3+3) Punkte von 12 ) Ws versteht mn im ompileru unter einem Prser? Eine ompilerkomponente, die für die yntxnlyse zuständig ist. Welhe Funktion ht er? yntxfehler melden, eine leitung zum Quelltext gemäß einer zugrunde liegenden Grmmtik erehnen. Ggf. weitere syntxorientierte ktionen usführen, z.b. ufu eines strkten ystxums. Wie reitet er mit nderen ompilerkomponenten zusmmen? Der nner wird vom Prser ei Bedrf ufgerufen, um ds nähste Token zu liefern. Die vom Prser ufgeute Zwishendrstellung ist usgngspunkt für die ode-erzeugung. Die semntishe nlyse knn syntxorientiert eim Prsen oder nh dem Prsen uf der Bsis der vom Prser erzeugten Zwishendrstellung erfolgen. ) Ws edeutet im Hinlik uf typisierte Progrmmiersprhen der Begriff Üerldung? Es git mehrere n der selen telle im Quelltext verwendre Definitionen eines Bezeihners oder Opertors Geen ie ein Beispiel n. Der Opertor + knn eine Gleitpunkt- oder Gnzzhlddition repräsentieren. Mehrere Konstruktoren für die Klsse tring in Jv, z.b. tring() und tring(hr[] vlue). Wie geht ein ompiler dmit um? Er muss nhnd der n der Verwendungsstelle des üerldenen Bezeihners oder Opertors enutzten rgumenttypen die rihtige Definition eindeutig zuordnen. ) Ws versteht mn unter einer regulären prhe? Eine formle prhe, die vom einem endlihen utomten (DE oder NE) kzeptiert wird. lterntiv: Eine formle prhe, die durh einen regulären usdruk spezifiziert ist. Welhe Bedeutung hen reguläre prhen im ompileru? Die pezifiktion der Token-yntx (hlüsselwörter, Bezeihner, Literle, Opertoren usw.) erfolgt durh reguläre usdrüke. Ein nnergenertor knn drus eine uf endlihen utomten sierte Erkennung der Tokens generieren. d) Ein usdruk ist ein syntktishes Element, ds im Quelltext einen Wert repräsentiert. Wie verreitet ein ompiler typisherweise einen usdruk (Frontend und Bkend)? Ds Frontend muss die yntx prüfen und dei den Opertoren im usdruk die Opernden korrekt zuordnen. Der Typ muss estimmt werden. Flls der Wert niht direkt vom ompiler estimmt werden knn, muss Mshinenode erzeugt werden, der zur Lufzeit den Wert erehnet. 1
ufge 2 (3+3 Punkte) Punkte von 6 ) Geen ie ds Zustndsdigrmm eines endlihen utomten für die prhe n, die durh den regulären usdruk ( ɛ) repräsentiert wird. Der kzeptor knn nihtdeterministish sein. 1 2 3 ) Geen ie zu dem nhfolgenden nihtdeterministishen endlihen utomten einen äquivlenten deterministishen endlihen utomten (Zustndsdigrmm) n. {2, 4} {3} {1} {4} {2, 3, 4} {3, 4} ufge 3 (3+3+3 Punkte) Punkte von 9 Gegeen sei folgende kontextfreie Grmmtik G B B B B ) Geen ie eine Linksleitung und den leitungsum zu n. B BB B 2
B B ) Geen ie lle Wörter n, die sih zusätzlih leiten lssen, wenn mn die Regel ɛ hinzufügt. ε,, ) Beweisen ie, dss die Grmmtik durh die zusätzlihe Regel ɛ mehrdeutig wird. Eine Grmmtik G ist mehrdeutig, wenn es für ein Wort w L(G) vershiedene leitungsäume git. Für ds Wort ist dies der Fll. ε ε ufge 4 (2+2+2 Punkte) Punkte von 6 Betrhten ie folgende Grmmtik ) Bestimmen ie F IRT (): {, d,, ε} ) Bestimmen ie F OLLOW (B): {d, $} B ɛ B Bd ɛ d ɛ ) Ws steht in der LL(1)-Prsertelle in dem Eintrg zu B und d? B ε. ufge 5 (4+3+3 Punkte) Punkte von 10 ) Bestimmen ie zur nhfolgenden Grmmtik die LR(0)-Elemente und die Üergänge im zugehörigen DE. ) Geen ie die LR(1)-Prsertelle dzu n. ) Geen ie die Berehnung des LR(1)-Prsers für die Einge n. (1) (2) ɛ (3) (4) 3
Erweiterte Grmmtik: DE Q 0 (0) $ (1) (2) ɛ (3) (4) strt $ Q 1 $ $ ept Q 2 Q 3 Q 4 Q 5 nmerkung: Für die Bestimmung der Reduktionen in der Telle wird enötigt F OLLOW () = F OLLOW () = {,, $} LR(1)-Prsertelle tte tion GOTO $ Q 0 r2 r2 r2 Q 1 Q 1 s3 s4 ept Q 2 Q 2 r1 r1 r1 Q 3 s5 Q 4 r4 r4 r4 Q 5 r3 r3 r3 4
ufge 6 (3 + 7 Punkte) Punkte von 10 ) Bestimmen ie zur PL-Prozedur p ds Frme-Lyout für den ktivierungsrhmen: Bestndteile in der rihtigen Reihenfolge mit Offsets zum Frmepointer und Größen in Bytes ) Bestimmen ie den EO32-ssemlerode zu p. Die Prozedur printi erwrtet einen Wertprmeter vom Typ int. (P=$29, FP=$25, RET=$31, verfügre Register: $8-$15). type prtyp = rry [2] of int; pro p (ref i:int, j:int) { vr pr: prtyp; pr[j] := i; printi(i); } () Frme-Lyout für p: dresse Größe Inhlt FP-8 8 Byte pr FP-12 4 Byte lter FP FP-16 4 Byte lte RETURN-dresse FP-20 4 Byte Outgoing-rgs: Pltz für printi-rgument () ssemler-ode für p p:.export p su $29,$29,20 ; llote frme stw $25,$29,8 ; sve old frme pointer dd $25,$29,20 ; setup new frme pointer stw $31,$25,-16 ; sve return register dd $8,$25,-8 dd $9,$25,4 dd $10,$0,2 geu $9,$10,_indexError mul $9,$9,4 dd $8,$8,$9 dd $9,$25,0 stw $9,$8,0 dd $8,$25,0 ldw $8,$8,0 ldw $8,$8,0 stw $8,$29,0 ; store rg #0 jl printi ldw $31,$25,-16 ; restore return register ldw $25,$29,8 ; restore old frme pointer dd $29,$29,20 ; relese frme jr $31 ; return 5