8
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

Föreläsning 4: Syntaxdefinition

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

Page 1: Föreläsning 4: Syntaxdefinition

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

Page 2: Föreläsning 4: Syntaxdefinition

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

Page 3: Föreläsning 4: Syntaxdefinition

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

Page 4: Föreläsning 4: Syntaxdefinition

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, …)

Page 5: Föreläsning 4: Syntaxdefinition

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; }

Page 6: Föreläsning 4: Syntaxdefinition

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>

Page 7: Föreläsning 4: Syntaxdefinition

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

Page 8: Föreläsning 4: Syntaxdefinition

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