Upload
acton-barlow
View
28
Download
1
Embed Size (px)
DESCRIPTION
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). - PowerPoint PPT Presentation
Citation preview
2002-11-12 F. Drewes, Inst. f. datavetenskap
1
Föreläsning 4: Syntaxdefinition
• Formell syntaxdefinition• Lexikalisk och kontextfri syntax• Flertydighet i kontextfri syntax• Syntaxgrafer
2002-11-12 F. 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
2002-11-12 F. 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
2002-11-12 F. 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, …)
2002-11-12 F. Drewes, Inst. f. datavetenskap
5
lexem (token IF_TOKEN)
lexem (token LEFT_PAR)
lexem (token IDENTIFIER)
lexem (token LESS_THAN)
lexem (token INTEGER)
Exempel
uttryckuttryck satssatssatssats
regu
ljära
spr
åk
lexem (token IF_TOKEN)
lexem (token LEFT_PAR)
lexem (token IDENTIFIER)
lexem (token LESS_THAN)
lexem (token INTEGER)
kontextfria språk
satsuttryckuttryck satssatssats
if ( count < 3 * x ) { count++; x = x / 2; }
2002-11-12 F. 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: <expr> <expr> * <expr>| <expr> + <expr>| <identifier> | <integer>
2002-11-12 F. 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 + associerartill vänster
• Parentesert.ex. (a + b) * (a + c) för att sätta bindningsreglerna ur kraft
2002-11-12 F. Drewes, Inst. f. datavetenskap
8
Syntaxgrafer (ett exempel)
Syntaxgrafer är ekvivalent med kontextfria grammatiker. Adas if-then-else:
if then
else
end if ;
cond stmts
else_if stmts
if_stmt
cond
stmts
else_if
terminalicketerminal