automat med stack kontextfri grammatik …...automat med stack kontextfri grammatik härledning och...

106
Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Senast Ändliga automater Reguljära uttryck Regex, ej reguljära

Upload: others

Post on 15-Mar-2020

41 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Senast

• Ändliga automater• Reguljära uttryck• Regex, ej reguljära

Page 2: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Idag

• Grammatiker• Lexikal analys• Rekursiv medåkning

Page 3: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Ändliga automater med stack”Push-down Deterministic Finite Automaton”

Vid en tillståndsövergång:• Läs en literal x• Kan poppa ett element y från stacken• Kan pusha ett element z på stacken

Notation:• x , y/z: Läser x , poppar y , pushar z• x , ε/z: poppar inget, pushar z• x , y/ε: poppar y , pushar ej

Page 4: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Ändliga automater med stack”Push-down Deterministic Finite Automaton”

Vid en tillståndsövergång:• Läs en literal x• Kan poppa ett element y från stacken• Kan pusha ett element z på stacken

Notation:• x , y/z: Läser x , poppar y , pushar z• x , ε/z: poppar inget, pushar z• x , y/ε: poppar y , pushar ej

Page 5: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel på PDA

q0 q1

1, 0/ε

1, 0/ε

0, ε/0

• Q = {q0,q1},Qα = {q1}• Accepterar {0n1n}• ⇒ Strikt starkare än en DFA!

Page 6: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Kontextfria grammatiker

• Definieras över terminaler

• Variabler används för att kombinera ihopterminaler och andra variabler.

• Ihopkombinering m.h.a produktionerEx: a är X eller Y , b är a eller Za.

• Notation: Alternering med lodrätt streck

a→ X |Yb → a|Za

• En variabel är startsymbol

Page 7: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Kontextfria grammatiker

• Definieras över terminaler• Variabler används för att kombinera ihop

terminaler och andra variabler.

• Ihopkombinering m.h.a produktionerEx: a är X eller Y , b är a eller Za.

• Notation: Alternering med lodrätt streck

a→ X |Yb → a|Za

• En variabel är startsymbol

Page 8: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Kontextfria grammatiker

• Definieras över terminaler• Variabler används för att kombinera ihop

terminaler och andra variabler.• Ihopkombinering m.h.a produktioner

Ex: a är X eller Y , b är a eller Za.

• Notation: Alternering med lodrätt streck

a→ X |Yb → a|Za

• En variabel är startsymbol

Page 9: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Kontextfria grammatiker

• Definieras över terminaler• Variabler används för att kombinera ihop

terminaler och andra variabler.• Ihopkombinering m.h.a produktioner

Ex: a är X eller Y , b är a eller Za.• Notation: Alternering med lodrätt streck

a→ X |Yb → a|Za

• En variabel är startsymbol

Page 10: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Kontextfria grammatiker

• Definieras över terminaler• Variabler används för att kombinera ihop

terminaler och andra variabler.• Ihopkombinering m.h.a produktioner

Ex: a är X eller Y , b är a eller Za.• Notation: Alternering med lodrätt streck

a→ X |Yb → a|Za

• En variabel är startsymbol

Page 11: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: RGB-värden hexadecimaltSvart: 000000; rött: FF0000, mörkgrön: 009900,m.m.

Terminaler: {0,1, . . . ,9,A,B, . . . ,F}

Startsymbol: rgb

digit → 0|1|2|3|4|5|6|7|8|9|A|B|C|D|E |Fintensity → digit digit

rgb → intensity intensity intensity

Page 12: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: RGB-värden hexadecimaltSvart: 000000; rött: FF0000, mörkgrön: 009900,m.m.

Terminaler: {0,1, . . . ,9,A,B, . . . ,F}

Startsymbol: rgb

digit → 0|1|2|3|4|5|6|7|8|9|A|B|C|D|E |Fintensity → digit digit

rgb → intensity intensity intensity

Page 13: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: Icke-reguljärt språk

Binära strängar med “minne”: {0n1n : n ≥ 0}

Terminaler: {0,1}

Startsymbol: b

b → ε|0b1

Page 14: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: Binära palindrom

Startsymbol: p

Terminaler: 0 och 1

p → ε|0|1|0p0|1p1

Page 15: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Binära palindrom igen: BNFStartsymbol: p

Terminaler: 0 och 1

p → ε|0|1|0p0|1p1

Bättre notation med Backus-Naur form, BNF:

p ::= ε| 0| 1| 0 p 0| 1 p 1

Page 16: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

BNF för programspråksdefinition

Skiss:stmnt ::= BEGIN stmnt_list END

| IF conditional THEN stmnt ELSE stmnt| assignment| procedurecall

stmnt_list ::= stmnt_list ’;’ stmnt| stmnt

assignment ::= lhs ’:=’ rhs

procedurecall ::= proc_name ’(’ params ’)’

. . . med mycket mera.

Page 17: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: Newickträd

• T.ex. (mus, (apa, human));

• Enkel version av Newick• Det fuskas med semikolon: gör det valfritt• Terminaler: NAME, SEMI, COMMA, LP, RP

newick ::= tree semiColonsemiColon ::= SEMI

| εtree ::= NAME

| LP tree COMMA tree RP

Page 18: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: Newickträd

• T.ex. (mus, (apa, human));

• Enkel version av Newick• Det fuskas med semikolon: gör det valfritt• Terminaler: NAME, SEMI, COMMA, LP, RP

newick ::= tree semiColon

semiColon ::= SEMI| ε

tree ::= NAME| LP tree COMMA tree RP

Page 19: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: Newickträd

• T.ex. (mus, (apa, human));

• Enkel version av Newick• Det fuskas med semikolon: gör det valfritt• Terminaler: NAME, SEMI, COMMA, LP, RP

newick ::= tree semiColonsemiColon ::= SEMI

| ε

tree ::= NAME| LP tree COMMA tree RP

Page 20: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: Newickträd

• T.ex. (mus, (apa, human));

• Enkel version av Newick• Det fuskas med semikolon: gör det valfritt• Terminaler: NAME, SEMI, COMMA, LP, RP

newick ::= tree semiColonsemiColon ::= SEMI

| εtree ::= NAME

| LP tree COMMA tree RP

Page 21: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Härledningar

Beskriver hur produktioner har använts för att”skapa” en sträng.

• Exempel: Passar (mus, (apa, human)); in igrammatiken?

• Terminaler:LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

• Härledning:newick⇒ tree SEMI

⇒ LP tree COMMA tree RP SEMI⇒ LP NAME COMMA tree RP SEMI⇒ LP NAME COMMA LP tree COMMA tree RP RP SEMI⇒ LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

Page 22: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Härledningar

Beskriver hur produktioner har använts för att”skapa” en sträng.

• Exempel: Passar (mus, (apa, human)); in igrammatiken?

• Terminaler:LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

• Härledning:newick⇒ tree SEMI

⇒ LP tree COMMA tree RP SEMI⇒ LP NAME COMMA tree RP SEMI⇒ LP NAME COMMA LP tree COMMA tree RP RP SEMI⇒ LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

Page 23: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Härledningar

Beskriver hur produktioner har använts för att”skapa” en sträng.

• Exempel: Passar (mus, (apa, human)); in igrammatiken?

• Terminaler:LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

• Härledning:newick⇒ tree SEMI

⇒ LP tree COMMA tree RP SEMI

⇒ LP NAME COMMA tree RP SEMI⇒ LP NAME COMMA LP tree COMMA tree RP RP SEMI⇒ LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

Page 24: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Härledningar

Beskriver hur produktioner har använts för att”skapa” en sträng.

• Exempel: Passar (mus, (apa, human)); in igrammatiken?

• Terminaler:LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

• Härledning:newick⇒ tree SEMI

⇒ LP tree COMMA tree RP SEMI⇒ LP NAME COMMA tree RP SEMI

⇒ LP NAME COMMA LP tree COMMA tree RP RP SEMI⇒ LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

Page 25: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Härledningar

Beskriver hur produktioner har använts för att”skapa” en sträng.

• Exempel: Passar (mus, (apa, human)); in igrammatiken?

• Terminaler:LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

• Härledning:newick⇒ tree SEMI

⇒ LP tree COMMA tree RP SEMI⇒ LP NAME COMMA tree RP SEMI⇒ LP NAME COMMA LP tree COMMA tree RP RP SEMI

⇒ LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

Page 26: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Härledningar

Beskriver hur produktioner har använts för att”skapa” en sträng.

• Exempel: Passar (mus, (apa, human)); in igrammatiken?

• Terminaler:LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

• Härledning:newick⇒ tree SEMI

⇒ LP tree COMMA tree RP SEMI⇒ LP NAME COMMA tree RP SEMI⇒ LP NAME COMMA LP tree COMMA tree RP RP SEMI⇒ LP NAME COMMA LP NAME COMMA NAME RP RP SEMI

Page 27: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: Enkel aritmetik

term ::= factor moreFactorsfactor ::= numbermoreFactors ::= ’*’ factor moreFactorsmoreFactors | ’+’ factor moreFactors

| εnumber ::= digit moreDigitsmoreDigits ::= digit moreDigits

| εdigit ::= 0|1|2|3| · · · |9

Page 28: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

HärledningarHur producera “1 * 17 + 7”?:term ⇒ factor moreFactors

⇒ number moreFactors⇒ digit moreDigits moreFactors⇒ 1 moreDigits moreFactors⇒ 1 moreFactors⇒ 1 ’*’ factor moreFactors

... ⇒ 1 ’*’ 17 moreFactors⇒ 1 ’*’ 17 ’+’ factor moreFactors

... ⇒ 1 ’*’ 17 ’+’ 7Produktion:term ::= factor moreFactors

Page 29: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

HärledningarHur producera “1 * 17 + 7”?:term ⇒ factor moreFactors

⇒ number moreFactors⇒ digit moreDigits moreFactors⇒ 1 moreDigits moreFactors⇒ 1 moreFactors⇒ 1 ’*’ factor moreFactors

... ⇒ 1 ’*’ 17 moreFactors⇒ 1 ’*’ 17 ’+’ factor moreFactors

... ⇒ 1 ’*’ 17 ’+’ 7Produktion:factor ::= number

Page 30: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

HärledningarHur producera “1 * 17 + 7”?:term ⇒ factor moreFactors

⇒ number moreFactors⇒ digit moreDigits moreFactors⇒ 1 moreDigits moreFactors⇒ 1 moreFactors⇒ 1 ’*’ factor moreFactors

... ⇒ 1 ’*’ 17 moreFactors⇒ 1 ’*’ 17 ’+’ factor moreFactors

... ⇒ 1 ’*’ 17 ’+’ 7Produktion:number ::= digit moreDigits

Page 31: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

HärledningarHur producera “1 * 17 + 7”?:term ⇒ factor moreFactors

⇒ number moreFactors⇒ digit moreDigits moreFactors⇒ 1 moreDigits moreFactors⇒ 1 moreFactors⇒ 1 ’*’ factor moreFactors

... ⇒ 1 ’*’ 17 moreFactors⇒ 1 ’*’ 17 ’+’ factor moreFactors

... ⇒ 1 ’*’ 17 ’+’ 7Produktion:digit ::= 1

Page 32: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

HärledningarHur producera “1 * 17 + 7”?:term ⇒ factor moreFactors

⇒ number moreFactors⇒ digit moreDigits moreFactors⇒ 1 moreDigits moreFactors⇒ 1 moreFactors⇒ 1 ’*’ factor moreFactors

... ⇒ 1 ’*’ 17 moreFactors⇒ 1 ’*’ 17 ’+’ factor moreFactors

... ⇒ 1 ’*’ 17 ’+’ 7Produktion:moreDigits ::= ε

Page 33: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

HärledningarHur producera “1 * 17 + 7”?:term ⇒ factor moreFactors

⇒ number moreFactors⇒ digit moreDigits moreFactors⇒ 1 moreDigits moreFactors⇒ 1 moreFactors⇒ 1 ’*’ factor moreFactors

... ⇒ 1 ’*’ 17 moreFactors⇒ 1 ’*’ 17 ’+’ factor moreFactors

... ⇒ 1 ’*’ 17 ’+’ 7Produktion:moreFactors ::= ’*’ factor moreFactors

Page 34: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

HärledningarHur producera “1 * 17 + 7”?:term ⇒ factor moreFactors

⇒ number moreFactors⇒ digit moreDigits moreFactors⇒ 1 moreDigits moreFactors⇒ 1 moreFactors⇒ 1 ’*’ factor moreFactors

... ⇒ 1 ’*’ 17 moreFactors⇒ 1 ’*’ 17 ’+’ factor moreFactors

... ⇒ 1 ’*’ 17 ’+’ 7Produktion:factor ::= number och number ::= digit moreDigits och moreDigits ::= ε

Page 35: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

HärledningarHur producera “1 * 17 + 7”?:term ⇒ factor moreFactors

⇒ number moreFactors⇒ digit moreDigits moreFactors⇒ 1 moreDigits moreFactors⇒ 1 moreFactors⇒ 1 ’*’ factor moreFactors

... ⇒ 1 ’*’ 17 moreFactors⇒ 1 ’*’ 17 ’+’ factor moreFactors

... ⇒ 1 ’*’ 17 ’+’ 7Produktion:moreFactors ::= ’+’ factor moreFactors

Page 36: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

HärledningarHur producera “1 * 17 + 7”?:term ⇒ factor moreFactors

⇒ number moreFactors⇒ digit moreDigits moreFactors⇒ 1 moreDigits moreFactors⇒ 1 moreFactors⇒ 1 ’*’ factor moreFactors

... ⇒ 1 ’*’ 17 moreFactors⇒ 1 ’*’ 17 ’+’ factor moreFactors

... ⇒ 1 ’*’ 17 ’+’ 7Produktion:...flera

Page 37: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Vänster eller högerhärledning?Prova expandera högraste variabeln:term ⇒ factor moreFactors

⇒ factor ’*’ factor moreFactors⇒ factor ’*’ factor ’+’ factor moreFactors⇒ factor ’*’ factor ’+’ factor⇒ factor ’*’ factor ’+’ number⇒ factor ’*’ factor ’+’ digit moreDigits⇒ factor ’*’ factor ’+’ digit⇒ factor ’*’ factor ’+’ 7

... ⇒ factor ’*’ 17 ’+’ 7

... ⇒ 1 ’*’ 17 ’+’ 7

Ekvivalenta men skilda härledningar.

Page 38: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Vänster eller högerhärledning?Prova expandera högraste variabeln:term ⇒ factor moreFactors

⇒ factor ’*’ factor moreFactors⇒ factor ’*’ factor ’+’ factor moreFactors⇒ factor ’*’ factor ’+’ factor⇒ factor ’*’ factor ’+’ number⇒ factor ’*’ factor ’+’ digit moreDigits⇒ factor ’*’ factor ’+’ digit⇒ factor ’*’ factor ’+’ 7

... ⇒ factor ’*’ 17 ’+’ 7

... ⇒ 1 ’*’ 17 ’+’ 7

Ekvivalenta men skilda härledningar.

Page 39: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Vänster eller högerhärledning?Prova expandera högraste variabeln:term ⇒ factor moreFactors

⇒ factor ’*’ factor moreFactors⇒ factor ’*’ factor ’+’ factor moreFactors⇒ factor ’*’ factor ’+’ factor⇒ factor ’*’ factor ’+’ number⇒ factor ’*’ factor ’+’ digit moreDigits⇒ factor ’*’ factor ’+’ digit⇒ factor ’*’ factor ’+’ 7

... ⇒ factor ’*’ 17 ’+’ 7

... ⇒ 1 ’*’ 17 ’+’ 7

Ekvivalenta men skilda härledningar.

Page 40: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Vänster eller högerhärledning?Prova expandera högraste variabeln:term ⇒ factor moreFactors

⇒ factor ’*’ factor moreFactors⇒ factor ’*’ factor ’+’ factor moreFactors⇒ factor ’*’ factor ’+’ factor⇒ factor ’*’ factor ’+’ number⇒ factor ’*’ factor ’+’ digit moreDigits⇒ factor ’*’ factor ’+’ digit⇒ factor ’*’ factor ’+’ 7

... ⇒ factor ’*’ 17 ’+’ 7

... ⇒ 1 ’*’ 17 ’+’ 7

Ekvivalenta men skilda härledningar.

Page 41: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Vänster eller högerhärledning?Prova expandera högraste variabeln:term ⇒ factor moreFactors

⇒ factor ’*’ factor moreFactors⇒ factor ’*’ factor ’+’ factor moreFactors⇒ factor ’*’ factor ’+’ factor⇒ factor ’*’ factor ’+’ number⇒ factor ’*’ factor ’+’ digit moreDigits⇒ factor ’*’ factor ’+’ digit⇒ factor ’*’ factor ’+’ 7

... ⇒ factor ’*’ 17 ’+’ 7

... ⇒ 1 ’*’ 17 ’+’ 7

Ekvivalenta men skilda härledningar.

Page 42: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Vänster eller högerhärledning?Prova expandera högraste variabeln:term ⇒ factor moreFactors

⇒ factor ’*’ factor moreFactors⇒ factor ’*’ factor ’+’ factor moreFactors⇒ factor ’*’ factor ’+’ factor⇒ factor ’*’ factor ’+’ number⇒ factor ’*’ factor ’+’ digit moreDigits⇒ factor ’*’ factor ’+’ digit⇒ factor ’*’ factor ’+’ 7

... ⇒ factor ’*’ 17 ’+’ 7

... ⇒ 1 ’*’ 17 ’+’ 7

Ekvivalenta men skilda härledningar.

Page 43: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Vänster eller högerhärledning?Prova expandera högraste variabeln:term ⇒ factor moreFactors

⇒ factor ’*’ factor moreFactors⇒ factor ’*’ factor ’+’ factor moreFactors⇒ factor ’*’ factor ’+’ factor⇒ factor ’*’ factor ’+’ number⇒ factor ’*’ factor ’+’ digit moreDigits⇒ factor ’*’ factor ’+’ digit⇒ factor ’*’ factor ’+’ 7

... ⇒ factor ’*’ 17 ’+’ 7

... ⇒ 1 ’*’ 17 ’+’ 7

Ekvivalenta men skilda härledningar.

Page 44: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Vänster eller högerhärledning?Prova expandera högraste variabeln:term ⇒ factor moreFactors

⇒ factor ’*’ factor moreFactors⇒ factor ’*’ factor ’+’ factor moreFactors⇒ factor ’*’ factor ’+’ factor⇒ factor ’*’ factor ’+’ number⇒ factor ’*’ factor ’+’ digit moreDigits⇒ factor ’*’ factor ’+’ digit⇒ factor ’*’ factor ’+’ 7

... ⇒ factor ’*’ 17 ’+’ 7

... ⇒ 1 ’*’ 17 ’+’ 7

Ekvivalenta men skilda härledningar.

Page 45: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Vänster eller högerhärledning?Prova expandera högraste variabeln:term ⇒ factor moreFactors

⇒ factor ’*’ factor moreFactors⇒ factor ’*’ factor ’+’ factor moreFactors⇒ factor ’*’ factor ’+’ factor⇒ factor ’*’ factor ’+’ number⇒ factor ’*’ factor ’+’ digit moreDigits⇒ factor ’*’ factor ’+’ digit⇒ factor ’*’ factor ’+’ 7

... ⇒ factor ’*’ 17 ’+’ 7

... ⇒ 1 ’*’ 17 ’+’ 7Ekvivalenta men skilda härledningar.

Page 46: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxträd

• Beskriver härledningen hierarkiskt• Kan påverka tolkningen

Expr ::= Num| Expr * Expr| Expr + Expr

Page 47: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxträd

• Beskriver härledningen hierarkiskt• Kan påverka tolkningen

Expr ::= Num| Expr * Expr| Expr + Expr

Page 48: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

SyntaxträdTvå härledningar för 1 + 2 ∗ 3:

Vänsterhärledning

1

Num

Expr +

2

Num

Expr *

3

Num

Expr

"""bbb

Expr

�������"""bbb

Expr

Högerhärledning

1

Num

Expr +

2

Num

Expr

"""bbb

Expr *

3

Num

Expr

"""HHHHXXXXXXX

Expr

Skilda betydelser!

Page 49: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

SyntaxträdTvå härledningar för 1 + 2 ∗ 3:

Vänsterhärledning

1

Num

Expr +

2

Num

Expr *

3

Num

Expr

"""bbb

Expr

�������"""bbb

ExprHögerhärledning

1

Num

Expr +

2

Num

Expr

"""bbb

Expr *

3

Num

Expr

"""HHHH

XXXXXXX

Expr

Skilda betydelser!

Page 50: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxträd

• En grammatik med två olika syntaxträd ärtvetydig (eng: ambigous).

• Vill ha entydiga grammatiker• Man kan ofta göra en grammatik entydig• Inget automatiskt sätt att göra det.

Page 51: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Lexikal analys

• Försteg till syntaxanalys• Opraktiskt att ha literaler som terminaler.• Lexikal analys: Extrahera terminaler

(symboler) från strängen av literaler.• Vanligt med reguljära uttryck för lexikal

analys

Page 52: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Lexikal analys: praktiska fördelar

• Filtrera bort kommentarer• Känn igen reserverade ord i programspråk• Enklare behandla likvärdiga element

Ex: Alla siffror/tal under en terminal

Page 53: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

En “lexer” för Newick-träd i Haskell

• Vill läsa in Newick-träd i Haskell m.h.a. BNF.• Hantera kommentarer inom [], t.ex.(mus [men råtta då?], (apa, jag))

• Jobba med terminaler, ej literaler

Symboler som ska hittas:data TreeSyms = LeftParen

| RightParen| Comma| SemiColon| Name Stringderiving (Show, Eq)

Page 54: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

En “lexer” för Newick-träd i Haskell

• Vill läsa in Newick-träd i Haskell m.h.a. BNF.• Hantera kommentarer inom [], t.ex.(mus [men råtta då?], (apa, jag))

• Jobba med terminaler, ej literaler

Symboler som ska hittas:data TreeSyms = LeftParen

| RightParen| Comma| SemiColon| Name Stringderiving (Show, Eq)

Page 55: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

lexer: Vad vi vill ha

Hugs> lexer "(mus, (apa, jag))"

[LeftParen,Name "mus",Comma,LeftParen,Name "apa",Comma,Name "jag",RightParen,RightParen]Hugs> lexer "(mus [men råtta då?], (apa, jag))"[LeftParen,Name "mus",Comma,LeftParen,Name "apa",Comma,Name "jag",RightParen,RightParen]

Page 56: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

lexer: Vad vi vill ha

Hugs> lexer "(mus, (apa, jag))"[LeftParen,Name "mus",Comma,LeftParen,Name "apa",Comma,Name "jag",RightParen,RightParen]Hugs>

lexer "(mus [men råtta då?], (apa, jag))"[LeftParen,Name "mus",Comma,LeftParen,Name "apa",Comma,Name "jag",RightParen,RightParen]

Page 57: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

lexer: Vad vi vill ha

Hugs> lexer "(mus, (apa, jag))"[LeftParen,Name "mus",Comma,LeftParen,Name "apa",Comma,Name "jag",RightParen,RightParen]Hugs> lexer "(mus [men råtta då?], (apa, jag))"[LeftParen,Name "mus",Comma,LeftParen,Name "apa",Comma,Name "jag",RightParen,RightParen]

Page 58: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Lexikal analysator

Huvudfunktionen:lexer :: String -> [TreeSyms]lexer "" = []lexer (c : str)

| (c == ’[’) = lexComment str| (c == ’(’) = (LeftParen : lexer str)| (c == ’)’) = (RightParen : lexer str)| (c == ’;’) = (SemiColon : lexer str)| (c == ’,’) = (Comma : lexer str)| (c == ’ ’)|| (c == ’\n’)|| (c == ’\t’) = lexer str

| otherwise = lexString [c] str

Page 59: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Lexikal analysator

Huvudfunktionen:lexer :: String -> [TreeSyms]lexer "" = []lexer (c : str)

| (c == ’[’) = lexComment str| (c == ’(’) = (LeftParen : lexer str)| (c == ’)’) = (RightParen : lexer str)| (c == ’;’) = (SemiColon : lexer str)| (c == ’,’) = (Comma : lexer str)| (c == ’ ’)|| (c == ’\n’)|| (c == ’\t’) = lexer str

| otherwise = lexString [c] str

Page 60: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Lexikal analysator

Huvudfunktionen:lexer :: String -> [TreeSyms]lexer "" = []lexer (c : str)

| (c == ’[’) = lexComment str| (c == ’(’) = (LeftParen : lexer str)| (c == ’)’) = (RightParen : lexer str)| (c == ’;’) = (SemiColon : lexer str)| (c == ’,’) = (Comma : lexer str)| (c == ’ ’)|| (c == ’\n’)|| (c == ’\t’) = lexer str

| otherwise = lexString [c] str

Page 61: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Lexikal analysator

Huvudfunktionen:lexer :: String -> [TreeSyms]lexer "" = []lexer (c : str)

| (c == ’[’) = lexComment str| (c == ’(’) = (LeftParen : lexer str)| (c == ’)’) = (RightParen : lexer str)| (c == ’;’) = (SemiColon : lexer str)| (c == ’,’) = (Comma : lexer str)| (c == ’ ’)|| (c == ’\n’)|| (c == ’\t’) = lexer str

| otherwise = lexString [c] str

Page 62: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Lexikal analysator

Huvudfunktionen:lexer :: String -> [TreeSyms]lexer "" = []lexer (c : str)

| (c == ’[’) = lexComment str| (c == ’(’) = (LeftParen : lexer str)| (c == ’)’) = (RightParen : lexer str)| (c == ’;’) = (SemiColon : lexer str)| (c == ’,’) = (Comma : lexer str)| (c == ’ ’)|| (c == ’\n’)|| (c == ’\t’) = lexer str

| otherwise = lexString [c] str

Page 63: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Hjälpfunktioner till lexerlexComment :: String -> [TreeSyms]-- Skip everything until next ’]’lexComment "" = error "File ended in comment"lexComment (’]’ : str) = lexer strlexComment (c : str) = lexComment str

lexString :: String -> String -> [TreeSyms]-- Accumulate strings in input-- Usage: lexString accumulated inputstringlexString buf "" = (Name buf : [])lexString buf (c:str) =

if (isAlpha c) thenlexString (c:buf) str

else(Name (reverse buf) : lexer (c:str))

Page 64: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Hjälpfunktioner till lexerlexComment :: String -> [TreeSyms]-- Skip everything until next ’]’lexComment "" = error "File ended in comment"lexComment (’]’ : str) = lexer strlexComment (c : str) = lexComment str

lexString :: String -> String -> [TreeSyms]-- Accumulate strings in input-- Usage: lexString accumulated inputstringlexString buf "" = (Name buf : [])lexString buf (c:str) =

if (isAlpha c) thenlexString (c:buf) str

else(Name (reverse buf) : lexer (c:str))

Page 65: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Koppling till DFA

• Tre funktioner• Motsvarar tre tillstånd:

• Läs symboler och blanka• Filtrera kommentarer• Läs namn

Page 66: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Rekursiv medåkning

Eng: recursive descent• Strukturerat och etablerat sätt att skriva en

syntaxanalysator: en parser

• Medåkning: Vi läser av symbol efter symboli indata

• Rekursivt: Resultat samlas ihop m.h.a.rekursiva anrop

• Kodstruktur: Följer din kontext-friagrammatik

• Princip: En produktion⇒ en funktion

Page 67: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Rekursiv medåkning

Eng: recursive descent• Strukturerat och etablerat sätt att skriva en

syntaxanalysator: en parser• Medåkning: Vi läser av symbol efter symbol

i indata

• Rekursivt: Resultat samlas ihop m.h.a.rekursiva anrop

• Kodstruktur: Följer din kontext-friagrammatik

• Princip: En produktion⇒ en funktion

Page 68: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Rekursiv medåkning

Eng: recursive descent• Strukturerat och etablerat sätt att skriva en

syntaxanalysator: en parser• Medåkning: Vi läser av symbol efter symbol

i indata• Rekursivt: Resultat samlas ihop m.h.a.

rekursiva anrop

• Kodstruktur: Följer din kontext-friagrammatik

• Princip: En produktion⇒ en funktion

Page 69: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Rekursiv medåkning

Eng: recursive descent• Strukturerat och etablerat sätt att skriva en

syntaxanalysator: en parser• Medåkning: Vi läser av symbol efter symbol

i indata• Rekursivt: Resultat samlas ihop m.h.a.

rekursiva anrop• Kodstruktur: Följer din kontext-fria

grammatik

• Princip: En produktion⇒ en funktion

Page 70: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Rekursiv medåkning

Eng: recursive descent• Strukturerat och etablerat sätt att skriva en

syntaxanalysator: en parser• Medåkning: Vi läser av symbol efter symbol

i indata• Rekursivt: Resultat samlas ihop m.h.a.

rekursiva anrop• Kodstruktur: Följer din kontext-fria

grammatik• Princip: En produktion⇒ en funktion

Page 71: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Egenskaper för rekursiv medåkning

• Läser terminaler vänster-till-höger

L• Gör vänster-härledning

L

• Nästföljande k terminaler avgör vilkenproduktion som används

(k )

• Vill ha en prediktiv grammatik:k begränsad (gärna k = 1)

• Terminologi: LL(k ) parser• Linjär tidskomplexitet

Page 72: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Egenskaper för rekursiv medåkning

• Läser terminaler vänster-till-höger

L

• Gör vänster-härledning

L• Nästföljande k terminaler avgör vilken

produktion som används

(k )

• Vill ha en prediktiv grammatik:k begränsad (gärna k = 1)

• Terminologi: LL(k ) parser• Linjär tidskomplexitet

Page 73: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Egenskaper för rekursiv medåkning

• Läser terminaler vänster-till-höger

L

• Gör vänster-härledning

L

• Nästföljande k terminaler avgör vilkenproduktion som används

(k )• Vill ha en prediktiv grammatik:

k begränsad (gärna k = 1)• Terminologi: LL(k ) parser• Linjär tidskomplexitet

Page 74: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Egenskaper för rekursiv medåkning

• Läser terminaler vänster-till-höger

L

• Gör vänster-härledning

L

• Nästföljande k terminaler avgör vilkenproduktion som används

(k )

• Vill ha en prediktiv grammatik:k begränsad (gärna k = 1)

• Terminologi: LL(k ) parser• Linjär tidskomplexitet

Page 75: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Egenskaper för rekursiv medåkning

• Läser terminaler vänster-till-höger L• Gör vänster-härledning L• Nästföljande k terminaler avgör vilken

produktion som används (k )• Vill ha en prediktiv grammatik:

k begränsad (gärna k = 1)• Terminologi: LL(k ) parser

• Linjär tidskomplexitet

Page 76: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Egenskaper för rekursiv medåkning

• Läser terminaler vänster-till-höger L• Gör vänster-härledning L• Nästföljande k terminaler avgör vilken

produktion som används (k )• Vill ha en prediktiv grammatik:

k begränsad (gärna k = 1)• Terminologi: LL(k ) parser• Linjär tidskomplexitet

Page 77: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Klasser av grammatiker• En grammatik tillhör klassen LL(k )

om och endast omdet finns en LL(k )-parser för grammatiken.

• Vänster-rekursiva grammatiker tillhör ejLL(k ).Ex:

expr ::= term ’+’ term| factor ’*’ factor

term ::= number| expr

factor ::= number| expr

Page 78: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Klasser av grammatiker• En grammatik tillhör klassen LL(k )

om och endast omdet finns en LL(k )-parser för grammatiken.

• Vänster-rekursiva grammatiker tillhör ejLL(k ).Ex:

expr ::= term ’+’ term| factor ’*’ factor

term ::= number| expr

factor ::= number| expr

Page 79: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

KodstrukturmoreFactors ::= ’*’ factor moreFactors

| ’+’ factor moreFactors| ε

function parseMoreFactors(accVal)nextSymbol := lookAhead()if (nextSymbol = ’*’) then

val := parseFactor()return parseMoreFactors(accVal * val)

else if (nextSymbol = ’+’) thenval := parseFactor()return parseMoreFactors(accVal + val)

elsereturn accVal

Page 80: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

KodstrukturmoreFactors ::= ’*’ factor moreFactors

| ’+’ factor moreFactors| ε

function parseMoreFactors(accVal)nextSymbol := lookAhead()if (nextSymbol = ’*’) then

val := parseFactor()return parseMoreFactors(accVal * val)

else if (nextSymbol = ’+’) thenval := parseFactor()return parseMoreFactors(accVal + val)

elsereturn accVal

Page 81: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

KodstrukturmoreFactors ::= ’*’ factor moreFactors

| ’+’ factor moreFactors| ε

function parseMoreFactors(accVal)nextSymbol := lookAhead()if (nextSymbol = ’*’) then

val := parseFactor()return parseMoreFactors(accVal * val)

else if (nextSymbol = ’+’) thenval := parseFactor()return parseMoreFactors(accVal + val)

elsereturn accVal

Page 82: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

KodstrukturmoreFactors ::= ’*’ factor moreFactors

| ’+’ factor moreFactors| ε

function parseMoreFactors(accVal)nextSymbol := lookAhead()if (nextSymbol = ’*’) then

val := parseFactor()return parseMoreFactors(accVal * val)

else if (nextSymbol = ’+’) thenval := parseFactor()return parseMoreFactors(accVal + val)

elsereturn accVal

Page 83: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

KodstrukturmoreFactors ::= ’*’ factor moreFactors

| ’+’ factor moreFactors| ε

function parseMoreFactors(accVal)nextSymbol := lookAhead()if (nextSymbol = ’*’) then

val := parseFactor()return parseMoreFactors(accVal * val)

else if (nextSymbol = ’+’) thenval := parseFactor()return parseMoreFactors(accVal + val)

elsereturn accVal

Page 84: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Exempel: Läs Newick-träd

• Resultat: Ett träd, dvs semantisk tolkning• Datastruktur:data Tree = Branch Tree Tree

| Leaf Stringderiving (Show, Eq)

• Återanvänd lexikal analysator för Newick!

Page 85: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Huvudprogram

module Newick whereimport Charimport IOimport Tree

main = dostr <- readFile "evolution.tree"putStrLn (tree2newick

(newick2tree (lexer str)))

• Minns: lat I/O!

Newick> main(mus, (jag, apa));

Page 86: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Huvudprogram

module Newick whereimport Charimport IOimport Tree

main = dostr <- readFile "evolution.tree"putStrLn (tree2newick

(newick2tree (lexer str)))

• Minns: lat I/O!

Newick> main(mus, (jag, apa));

Page 87: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Princip

• Läser lista med terminaler

• Ungefär en funktion per produktion• Varje funktion returnerar de terminaler som

ej konsumerats• Ibland returneras ett resultat: löv eller träd

Page 88: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Princip

• Läser lista med terminaler• Ungefär en funktion per produktion

• Varje funktion returnerar de terminaler somej konsumerats

• Ibland returneras ett resultat: löv eller träd

Page 89: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Princip

• Läser lista med terminaler• Ungefär en funktion per produktion• Varje funktion returnerar de terminaler som

ej konsumerats

• Ibland returneras ett resultat: löv eller träd

Page 90: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Princip

• Läser lista med terminaler• Ungefär en funktion per produktion• Varje funktion returnerar de terminaler som

ej konsumerats• Ibland returneras ett resultat: löv eller träd

Page 91: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Läs in trädetnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Interface functionnewick2tree :: [TreeSyms] -> Treenewick2tree symbols = rNewick symbols

-- Read tree and possible semicolonrNewick :: [TreeSyms] -> TreerNewick [] = error "Tree empty"rNewick symbols = t

where (t, rest1) = rTree symbolsrest2 = rSemiColon rest1

Page 92: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Läs in trädetnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Interface functionnewick2tree :: [TreeSyms] -> Treenewick2tree symbols = rNewick symbols

-- Read tree and possible semicolonrNewick :: [TreeSyms] -> TreerNewick [] = error "Tree empty"rNewick symbols = t

where (t, rest1) = rTree symbolsrest2 = rSemiColon rest1

Page 93: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Delträdnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Read (sub-) tree: Either a leaf or two subtreesrTree :: [TreeSyms] -> (Tree, [TreeSyms])rTree [] = error "Unexpected end of file."rTree (Name str : l) = (Leaf str, l)rTree (LeftParen : l) =

-- Read two subtrees and return a Branch combining themlet (t1, rest1) = rTree l

rest2 = rSymbol Comma rest1(t2, rest3) = rTree rest2rest4 = rSymbol RightParen rest3

in (Branch t1 t2, rest4)

Page 94: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Delträdnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Read (sub-) tree: Either a leaf or two subtreesrTree :: [TreeSyms] -> (Tree, [TreeSyms])rTree [] = error "Unexpected end of file."rTree (Name str : l) = (Leaf str, l)rTree (LeftParen : l) =

-- Read two subtrees and return a Branch combining themlet (t1, rest1) = rTree l

rest2 = rSymbol Comma rest1(t2, rest3) = rTree rest2rest4 = rSymbol RightParen rest3

in (Branch t1 t2, rest4)

Page 95: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Delträdnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Read (sub-) tree: Either a leaf or two subtreesrTree :: [TreeSyms] -> (Tree, [TreeSyms])rTree [] = error "Unexpected end of file."rTree (Name str : l) = (Leaf str, l)rTree (LeftParen : l) =

-- Read two subtrees and return a Branch combining themlet (t1, rest1) = rTree l

rest2 = rSymbol Comma rest1(t2, rest3) = rTree rest2rest4 = rSymbol RightParen rest3

in (Branch t1 t2, rest4)

Page 96: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Delträdnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Read (sub-) tree: Either a leaf or two subtreesrTree :: [TreeSyms] -> (Tree, [TreeSyms])rTree [] = error "Unexpected end of file."rTree (Name str : l) = (Leaf str, l)rTree (LeftParen : l) =

-- Read two subtrees and return a Branch combining themlet (t1, rest1) = rTree l

rest2 = rSymbol Comma rest1(t2, rest3) = rTree rest2rest4 = rSymbol RightParen rest3

in (Branch t1 t2, rest4)

Page 97: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Delträdnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Read (sub-) tree: Either a leaf or two subtreesrTree :: [TreeSyms] -> (Tree, [TreeSyms])rTree [] = error "Unexpected end of file."rTree (Name str : l) = (Leaf str, l)rTree (LeftParen : l) =

-- Read two subtrees and return a Branch combining themlet (t1, rest1) = rTree l

rest2 = rSymbol Comma rest1(t2, rest3) = rTree rest2rest4 = rSymbol RightParen rest3

in (Branch t1 t2, rest4)

Page 98: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Delträdnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Read (sub-) tree: Either a leaf or two subtreesrTree :: [TreeSyms] -> (Tree, [TreeSyms])rTree [] = error "Unexpected end of file."rTree (Name str : l) = (Leaf str, l)rTree (LeftParen : l) =

-- Read two subtrees and return a Branch combining themlet (t1, rest1) = rTree l

rest2 = rSymbol Comma rest1(t2, rest3) = rTree rest2rest4 = rSymbol RightParen rest3

in (Branch t1 t2, rest4)

Page 99: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Delträdnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Read (sub-) tree: Either a leaf or two subtreesrTree :: [TreeSyms] -> (Tree, [TreeSyms])rTree [] = error "Unexpected end of file."rTree (Name str : l) = (Leaf str, l)rTree (LeftParen : l) =

-- Read two subtrees and return a Branch combining themlet (t1, rest1) = rTree l

rest2 = rSymbol Comma rest1(t2, rest3) = rTree rest2rest4 = rSymbol RightParen rest3

in (Branch t1 t2, rest4)

Page 100: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Delträdnewick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Read (sub-) tree: Either a leaf or two subtreesrTree :: [TreeSyms] -> (Tree, [TreeSyms])rTree [] = error "Unexpected end of file."rTree (Name str : l) = (Leaf str, l)rTree (LeftParen : l) =

-- Read two subtrees and return a Branch combining themlet (t1, rest1) = rTree l

rest2 = rSymbol Comma rest1(t2, rest3) = rTree rest2rest4 = rSymbol RightParen rest3

in (Branch t1 t2, rest4)

Page 101: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Terminaler

newick ::= tree semiColonsemiColon ::= Semi

| εtree ::= Name

| LeftParen tree Comma tree RightParen

-- Possible semicolonrSemiColon (SemiColon : rest) = restrSemiColon symbols = symbols

Page 102: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Syntaxanalysator: Terminaler

-- Consume an expected symbol,-- complain if it is not thererSymbol :: TreeSyms -> [TreeSyms] -> [TreeSyms]rSymbol symbol (h : rest) =

if (symbol == h) thenrest

elseerror ("Unexpected symbol: " ++ show h)

Page 103: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Testkörning

Felaktigt data: (mus (,(apa, jag));Newick> main

Program error: Unexpected symbol: LeftParen

Page 104: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Koppling till PDFA?

Var är vår ändliga automat med stack?

• Varje funktion motsvarar ett tillstånd• Rekursiva anrop använder stacken

(om ej svansrekursiv)

Page 105: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Koppling till PDFA?

Var är vår ändliga automat med stack?• Varje funktion motsvarar ett tillstånd• Rekursiva anrop använder stacken

(om ej svansrekursiv)

Page 106: Automat med stack Kontextfri grammatik …...Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut Ändliga automater med stack

Automat med stack Kontextfri grammatik Härledning och syntaxträd Lexikal analys Rekursiv medåkning Avslut

Sammanfattning

• Grammatiker är enkla!• Grammatik styr upp ditt

format/språk/hackande• Lexikal analys:

[Char] -> [Terminaler]

• Rekursiv medåkning är ett systematiskt sättatt skriva en parser

Härnäst: Verktyg för syntaxanalys