Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avLovisa Gunnarsson
1
2003-11-11Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax Flertydighet i kontextfri syntax Syntaxgrafer
2
2003-11-11Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 2 Formell syntaxdefinition Syntaxen för ett språk definierar mängden av alla strängar som betraktas som program (där man bortser från betydelsen). Man skiljer alltså syntaxen (formen) från semantiken (betydelsen) Syntaktisk korrekthet är nödvändig men inte tillräcklig för semantisk korrekthet Att definiera syntax är betydligt enklare än att definiera semantik
3
2003-11-11Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 3 Formell syntaxdefinition Ett programspråk är ett formellt språk syntaxen kan definieras formellt (=otvetydigt), t.ex. med grammatiker Fördelar med en formell syntaxdefinition är exakt ”standard” för datavetare, alla vet hur den ska läsas kompatibla kompilatorer automatisk generering av kompilatorer inget tvivel om korrekthet/inkorrekthet av program algoritmer och resultat från teorin för formella språk kan användas gör det enklare att definiera semantiken
4
2003-11-11Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 4 Lexikalisk och kontextfri syntax Syntaxdefinitioner brukar delas upp i två nivåer: lexikalisk syntax kontextfri syntax Den lexikaliska nivån består av enkla syntaktiska kategorier för identifierare, tal, nyckelord, … Centrala begrepp: token= en av kategorierna(t.ex. integer) lexem= en sträng i en av kategorierna(t.ex. 5317) På den kontextfria nivån behandlas de syntaktiska kategorierna som har en högre komplexitet (satser, uttryck, …)
5
2003-11-11Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 5 lexem (token IF_TOKEN) lexem (token LEFT_PAR) lexem (token IDENTIFIER) lexem (token LESS_THAN) lexem (token INTEGER) Exempel uttryck sats reguljära språk lexem (token IF_TOKEN) lexem (token LEFT_PAR) lexem (token IDENTIFIER) lexem (token LESS_THAN) lexem (token INTEGER) kontextfria språk satsuttryck sats if ( count < 3 * x ) { count++; x = x / 2; }
6
2003-11-11Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 6 Flertydighet Den kontextfria syntaxen är flertydig om det finns ett program som har fler än ett deriveringsträd (= fler än en vänsterderivering) Vänsterderivering = derivering där man i varje steg ersätter den första icketerminalen i strängen En flertydig grammatik är inte felaktig i sig men ger upphov till problem när semantiken definieras Exempel: * | + | |
7
2003-11-11Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 7 Flertydighet (2) Några vanliga tekniker för att undvika flertydighet Bindningsregler t.ex. ^ binder starkare än * som binder starkare än + Höger- eller vänsterassocierande operatorer t.ex. a + b + c betyder (a + b) + c eftersom + associerar till vänster Parenteser t.ex. (a + b) * (a + c) för att sätta bindningsreglerna ur kraft
8
2003-11-11Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 8 Syntaxgrafer (ett exempel) Syntaxgrafer är ekvivalent med kontextfria grammatiker. Adas if-then-else: ifthen else end if; condstmts else_ifstmts if_stmt cond stmts else_if terminal icketerminal
9
2003-11-11Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 9 Extended BNF Några vanliga tekniker för kompaktare grammatik Valfrihet markeras med [ ] IF -> if E then S [else S] Upprepning (noll eller fler ggr) IDLIST -> ID {, ID} Val (en av) T -> T (* | / | %) F
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.