UE zu ÜbersetzerbauFehlerbehandlung & LL(1)-Bedingung1
Bsp: Deklarationen
DeclPart= {ForwardDecl}"{" Body"}" . ForwardDecl = "void"ident"(" ")" ";" . Body = .... voidp1(); voidp2(); voidp3();... {
... }
Damit lassen sich folgende Deklarationen erzeugen:
UE zu ÜbersetzerbauFehlerbehandlung & LL(1)-Bedingung2
Bsp: Fehler in ForwardDecl ErkenneDeclPart next() ÆvoidKWErkenneForwardDecl voidKWerkannt next() Æidentidenterkannt next()ÆlbrackERROR: "(expected" ERROR: ")expected" ERROR: ";expected" ERROR: "{expected"
... ERROR: "}
expected"
void p [); { …}
UE zu ÜbersetzerbauFehlerbehandlung & LL(1)-Bedingung3
Bsp: First/Follow-BitSets
static BitSet firstFwdDecl= new BitSet(); static BitSet followFwdDecl= new BitSet(); firstFwdDecl.set(voidKW);followFwdDecl.or(firstFwdDecl); followFwdDecl.set(lbrace); followFwdDecl.set(
eof);// Wichtig!!!
DeclPart= {ForwardDecl}"{" Body"}" . ForwardDecl = "void"ident"(" ")" ";" . Body = ....
First(ForwardDecl) = {voidKW} Follow(ForwardDecl) = First(ForwardDec
l) + {lbrace} = {voidKW, lbrace}
UE zu ÜbersetzerbauFehlerbehandlung & LL(1)-Bedingung4
Bsp: Fehler in ForwardDecl (2)
ErkenneDeclPart next() ÆvoidKWErkenneForwardDecl voidKWerkannt next() Æidentidenterkannt next()ÆlbrackERROR: "(expected" ERROR: ")expected" ERROR: ";expected" ERROR: "invalid forward declaration" next()Ærpar next()Æsemicolon next()Ælbracelbrace erkannt next()Æ...ErkenneBody ... next()Ærbracerbrace erkanntvoid p [); { …}
UE zu ÜbersetzerbauFehlerbehandlung & LL(1)-Bedingung5
LL(1)-Bedingung • k eine Alternativen mit gl eichen terminalen Anfängen • k eine Linksrekursionen Bei Top-Down-Analyse: mit einem Vorgriffssymbol entscheiden, welche Alternative ausgewählt werden muss. • A bhilfen: • g leiche Anfänge Ö Faktorisieren • L inksrekursionen Ö Umwandlung in Iteration
UE zu ÜbersetzerbauFehlerbehandlung & LL(1)-Bedingung6
Regel Statement Statement
= Assignment | ProcedureCall | Increment
| Decrement | ….