Presentation laddar. Vänta.

Presentation laddar. Vänta.

2002-11-15F. Drewes, Inst. f. datavetenskap1 Föreläsning 5: Syntaxanalys (parsning) Syntaxanalysens mål Tillvägagångssätt och komplexitet Syntaxanalys.

Liknande presentationer


En presentation över ämnet: "2002-11-15F. Drewes, Inst. f. datavetenskap1 Föreläsning 5: Syntaxanalys (parsning) Syntaxanalysens mål Tillvägagångssätt och komplexitet Syntaxanalys."— Presentationens avskrift:

1 2002-11-15F. Drewes, Inst. f. datavetenskap1 Föreläsning 5: Syntaxanalys (parsning) Syntaxanalysens mål Tillvägagångssätt och komplexitet Syntaxanalys i bilder Top-down-syntaxanalys Lookahead Bottom-up-syntaxanalys

2 2002-11-15F. Drewes, Inst. f. datavetenskap2 Syntaxanalysens mål kolla syntaktisk korrekthet  parserns mest grundläggande uppgift bygga ett deriveringsträd (explicit eller implicit)  trädet används senare för att översätta/interpretera programmet om möjligt, fortsätta med analysen efter att fel upptäckts  programmeraren behöver inte göra 387 kompileringsförsök om det finns 386 fel ge nyttiga felmeddelanden  vilket ställe tycks vara fel?  vad förväntades där?  vanliga åtgärder (om felet är ett ”standardfel”)

3 2002-11-15F. Drewes, Inst. f. datavetenskap3 Tillvägagångssätt och komplexitet Nivåer lexikalisk/kontextfri hittas igen i parserns struktur  lexikalisk analys=rutiner som läser inputsträngen och producerar token =en ändlig automat (i princip)  kontextfri analys= rutiner som läser token och bygger upp deriveringsträdet Kontextfri analys brukar göras top-down eller bottom-up  top-down börjar i deriveringsträdets rot (arbetar framåt)  bottom-up börjar i deriveringsträdets löv (arbetar bakåt) Komplexitet är viktig  i allmänhet O(n 3 ) för kontextfria språk (som ofta är för hög)  O(n) för LL- och LR-grammatiker

4 2002-11-15F. Drewes, Inst. f. datavetenskap4 EQ_SIGN syntaxanalys (operativsystem) lexikalisk analys void advance() (nextToken) kontextfri analys …; count = count + 1; … ? ? top-down ! regelns högersida IDENTIFIER syntaxanalys (operativsystem) lexikalisk analys void advance() (nextToken) kontextfri analys …; count = count + 1; … top-down INTEGER syntaxanalys (operativsystem) lexikalisk analys void advance() (nextToken) kontextfri analys bottom-up …; count = count + 1; … ? INTEGER syntaxanalys (operativsystem) lexikalisk analys void advance() (nextToken) kontextfri analys bottom-up …; count = count + 1; … ! SEMICOLON syntaxanalys (operativsystem) lexikalisk analys void advance() (nextToken) kontextfri analys …; count = count + 1; … bottom-up ? SEMICOLON syntaxanalys (operativsystem) lexikalisk analys void advance() (nextToken) kontextfri analys …; count = count + 1; … bottom-up Syntaxanalys i bilder

5 2002-11-15F. Drewes, Inst. f. datavetenskap5 Top-down-syntaxanalys (exempel) Varje icketerminal blir en rutin: void S() { P(); while (lex.nextToken  {PLUS, MINUS}) { lex.advance(); P(); } } void P() { F(); while (lex.nextToken  {TIMES, DIVIDE}) { lex.advance(); F(); } } void F() { S  P { (  |  ) P } P  F { (  |  ) F } F  | ( S ) EBNF (extended Backus-Naur form) {…}= får upprepas 0,1,2,… gånger …|…= val mellan alternativ if (lex.nextToken==NUMBER) lex.advance(); else if (lex.nextToken==RIGHT_PAR) { lex.advance(); S(); if (lex.nextToken==LEFT_PAR) lex.advance(); else error(”missing ‘)‘”); } else error(“number or ‘(‘ expected”); }

6 2002-11-15F. Drewes, Inst. f. datavetenskap6 Top-down: För- och nackdelar Fördelar  lätt att implementera (även för hand)  snabb (dvs linjär)  oftast är LL-grammatikklassen tillräckligt stor Nackdelar  grammatiken får inte vara vänsterrekursiv (egentligen behövs ”lookahead k”; oftast krävs k=1)  LR-grammatikklassen (som bottom-up-analys bygger på) är större än LL-grammatikklassen

7 2002-11-15F. Drewes, Inst. f. datavetenskap7 Lookahead STMT  ( CALL | ASSIGN ) { ; STMT } CALL  ( PARAM ) ASSIGN  = EXPR PARAM  … EXPR  …  i (???) måste vi kolla toknet efter nextToken (´(´ eller ´=´)  lookahead är 2, grammatiken är en LL(2)-grammatik En LL-grammatik är en LL(1)-grammatik void STMT() { if (???) CALL(); ELSE ASSIGN(); while (lex.advance==SEMICOLON) { lex.advance(); STMT(); } }

8 2002-11-15F. Drewes, Inst. f. datavetenskap8 Bottom-up-syntaxanalys Inputsträngen reduceras till startsymbolen genom att använda reglerna bakåt Det som ännu inte kan reduceras (plus ytterligare statusinformation) lagras på en stack Två typer av steg: ´shift´ och ´reduce´ Vad som görs i varje steg beror på de översta symbolerna på stacken och nextToken (  LR(1)) Informationen om vad som ska göras finns i tabellerna ´action´ och ´goto´ Nackdel: Allmän LR-parsning (Knuth, 1965) kräver för stora tabeller  ytterligare restriktioner behövs


Ladda ner ppt "2002-11-15F. Drewes, Inst. f. datavetenskap1 Föreläsning 5: Syntaxanalys (parsning) Syntaxanalysens mål Tillvägagångssätt och komplexitet Syntaxanalys."

Liknande presentationer


Google-annonser