80 likes | 175 Views
Föreläsning 4: Syntaxdefinition. Formell syntaxdefinition Lexikalisk och kontextfri syntax Flertydighet i kontextfri syntax Syntaxgrafer. 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).
E N D
Föreläsning 4: Syntaxdefinition • Formell syntaxdefinition • Lexikalisk och kontextfri syntax • Flertydighet i kontextfri syntax • Syntaxgrafer F. Drewes, Inst. f. datavetenskap
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 F. Drewes, Inst. f. datavetenskap
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 F. Drewes, Inst. f. datavetenskap
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, …) F. Drewes, Inst. f. datavetenskap
uttryck uttryck uttryck uttryck sats sats sats sats sats sats sats sats kontextfria språk lexem (token INTEGER) lexem (token INTEGER) lexem (token LESS_THAN) lexem (token LESS_THAN) reguljära språk lexem (token IDENTIFIER) lexem (token IDENTIFIER) lexem (token LEFT_PAR) lexem (token LEFT_PAR) lexem (token IF_TOKEN) lexem (token IF_TOKEN) Exempel if ( count < 3 * x ) { count++; x = x / 2; } F. Drewes, Inst. f. datavetenskap
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: <expr> <expr> * <expr> | <expr> + <expr> | <identifier> | <integer> F. Drewes, Inst. f. datavetenskap
Flertydighet(2) Några vanliga tekniker för att undvika flertydighet • Bindningsreglert.ex. ^ binder starkare än * som binder starkare än + • Höger- eller vänsterassocierande operatorert.ex. a + b + cbetyder (a+ b) + ceftersom +associerartill vänster • Parentesert.ex. (a + b) * (a + c) för att sätta bindningsreglerna ur kraft F. Drewes, Inst. f. datavetenskap
if_stmt if ; end if then stmts else cond stmts terminal cond icketerminal stmts else_if else_if Syntaxgrafer (ett exempel) Syntaxgrafer är ekvivalent med kontextfria grammatiker. Adas if-then-else: F. Drewes, Inst. f. datavetenskap