Kopa FOLLOW

Post on 22-Jan-2016

113 views 0 download

description

Kopa FOLLOW. Kopa FOLLOW(X) – to termināļu kopa, kas kādā sentenciālajā formā var parādīties aiz netermināļa X. Kopā FOLLOW nevar būt ε. Kopas FOLLOW veidošanas likumi. 1. Ja S - starta simbols un $ - ievada beigu pazīme, tad $ FOLLOW(S). Varam uzskatīt, ka ir jauns starta - PowerPoint PPT Presentation

Transcript of Kopa FOLLOW

1

Kopa FOLLOW

2

Kopa FOLLOW(X) – to termināļu kopa, kas kādā sentenciālajā formā var parādīties aiz netermināļa X.

Kopā FOLLOW nevar būt ε .

3

Kopas FOLLOW veidošanas likumi

1. Ja S - starta simbols un $ - ievada beigu pazīme, tad $FOLLOW(S)

Varam uzskatīt, ka ir jauns startasimbols S’ un produkcija S’S$

4

Kopas FOLLOW veidošanas likumi (turp.)

2. Ja ir produkcija AB , tad visi FIRST() elementi, izņemot ε pieder FOLLOW(B).

FOLLOW(B)=FOLLOW(B)(FIRST()-ε)

5

Kopas FOLLOW veidošanas likumi (turp.)

3. Ja ir produkcija AB vai AB, kur εFIRST(), tad visi FOLLOW(A)

elementi pieder kopai FOLLOW(B)

Ievērojiet, kas kam pieder!

FOLLOW(B)=FOLLOW(B)FOLLOW(A)

6

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST {$})( SFOLLOW

7

},,,,,{$,

))((

))((

)(

)(

fedcba

AFIRST

BFIRST

SFOLLOW

AFOLLOW

{$})( SFOLLOW

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

8

},,{)(

)(

dcaAFIRST

BFOLLOW

{$})( SFOLLOW},,,,,{$,)( fedcbaAFOLLOW

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

9

}{)( dCFOLLOW

},,{)( dcaBFOLLOW

{$})( SFOLLOW},,,,,{$,)( fedcbaAFOLLOW

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

10

},,,,,{$,

)()(

fedcba

AFOLLOWDFOLLOW

}{)( dCFOLLOW

},,{)( dcaBFOLLOW

{$})( SFOLLOW},,,,,{$,)( fedcbaAFOLLOW

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

11

},,,,,{$,)( fedcbaDFOLLOW

}{)( dCFOLLOW

},,{)( dcaBFOLLOW

{$})( SFOLLOW},,,,,{$,)( fedcbaAFOLLOW

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

12

},,,,,{$,)( fedcbaDFOLLOW

}{)( dCFOLLOW

},,{)( dcaBFOLLOW

{$})( SFOLLOW},,,,,{$,)( fedcbaAFOLLOW

},,,{)(

))(()(

fdcaBFOLLOW

FFIRSTEFOLLOW

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

13

},,,,,{$,)( fedcbaDFOLLOW

}{)( dCFOLLOW

},,{)( dcaBFOLLOW

{$})( SFOLLOW},,,,,{$,)( fedcbaAFOLLOW

},,,{)( fdcaEFOLLOW

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

14

},,,,,{$,)( fedcbaDFOLLOW

}{)( dCFOLLOW

},,{)( dcaBFOLLOW

{$})( SFOLLOW

},,,,,{$,)( fedcbaAFOLLOW

},,,{)( fdcaEFOLLOW

},,{)( dcaFFOLLOW

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

15

Kādu produkciju kuro reizi lietot?

Veidojam paredzošās analīzes tabulu.

Divdimensiju masīvs M[A,a]

Nerekursīvā paredzošā analīze

neterminālis terminālis

16

Katrā brīdī tiek aplūkots simbols X steka virsotnē un tekošais ievada simbols a.

1. Ja X=a=$, analizators beidz darbu un paziņo par veiksmīgām darba beigām.

2. Ja X=a≠$, analizators izņem X no steka un pārvieto ievada nolasīšanas kursoru uz nākošo simbolu.

Paredzošās analīzes tabulas izmantošana

17

3. Ja X ir neterminālis, tiek aplūkots tabulas ieraksts M[X,a] . Ja ieraksts ir X produkcija, tad X steka virsotnē tiek aizvietots ar šīs produkcijas labo pusi. Ja ieraksts ir “error”, tad tiek izdots kļūdas paziņojums.

Paredzošās analīzes tabulas izmantošana(turp.)

18

1.Katrai gramatikas produkcijai A ((NT)*) tiek izpildīts 2. un 3. solis.

Paredzošās analīzes tabulas veidošana

2.Katram terminālim a, kur aFIRST(), tabulas rūtiņā M[A,a] tiek pievienots ieraksts A .

Ievērojiet, ka šeit FIRST tiek rēķināta produkcijas labajai pusei!

19

3. Ja FIRST(), tad katram terminālim b , kur bFOLLOW(A), tabulas rūtiņā M[A,b] tiek pievienots ieraksts A .

Ja FIRST(), bet $FOLLOW(A), tabulas rūtiņā M[A,$] tiek pievienots ieraksts A .

Paredzošās analīzes tabulas veidošana

20

4. Katru līdz šim nedefinētu tabulas rūtiņu aizpilda ar norādi uz kļūdu (“error”).

Paredzošās analīzes tabulas veidošana

21

(1) SABA(2) ACD(3) Aa(4) BEF(5) Bb(6) Cc(7) Cε(8) Dd(9) EeE(10) Eε(11) FfF(12) Fε

FIRST(ABA)={a,c,d}FIRST(CD)={c,d}FIRST(a)={a}FIRST(EF)={e,f,ε}FIRST(b)={b}FIRST(c)={c}

FIRST(ε)={ε}

FIRST(d)={d}FIRST(eE)={e}FIRST(ε)={ε}FIRST(fF)={f}FIRST(ε)={ε}

22

(1) SABA(2) ACD(3) Aa(4) BEF(5) Bb(6) Cc(7) Cε(8) Dd(9) EeE(10) Eε(11) FfF(12) Fε

FOLLOW(S)={$}FOLLOW(A)={$,a,b,c,d,e,f}

FOLLOW(B)={a,c,d}

FOLLOW(C)={d}

FOLLOW(D)={$,a,b,c,d,e,f}FOLLOW(E)={a,c,d,f}

FOLLOW(F)={a,c,d}

23

a b c d e f $

S ABA ABA ABA

A a CD CD

B EF b EF EF EF EF

C c ε

D d

E ε ε ε eE ε

F ε ε ε fF

24

b augša

eh

0Z

Steks

ehb$

Turpmāk ērtāks būs šāds pieraksts

Bija šāds pieraksts

25

Virknes defa$ analīzeSteks Ievads

$S defa$

$ABA defa$ SABA

$ABDC defa$ ACD

$ABD defa$ C

$ABd defa$ Dd

$AB efa$

$AFE efa$ BEF

$AFEe efa$ EeE

$AFE fa$

$AF fa$ E

$AFf fa$ FfF

$AF a$

$A a$ F

$ $ Aa

26

Neakceptēšanas piemērs - virknes aebd$ analīze

27

id|)(

|*

|

EF

FFTT

TTEE

Piemērs

Novērst kreiso rekursiju!

28

id|)(

|*

|

EF

TFT

TFT

ETE

ETE

Piemērs

Atrast kopas FIRST un FOLLOW!

29

}id{(,)(

}{*,)(

}id{(,)(

},{)(

}id{(,)(

FFIRST

TFIRST

TFIRST

EFIRST

EFIRST

30

),$},*,{)(

),$},{)(

),$},{)(

{),$})(

{),$})(

FFOLLOW

TFOLLOW

TFOLLOW

EFOLLOW

EFOLLOW

31

}id{(,)(

}{*,)(

}id{(,)(

},{)(

}id{(,)(

FFIRST

TFIRST

TFIRST

EFIRST

EFIRST

),$},*,{)(

),$},{)(

),$},{)(

{),$})(

{),$})(

FFOLLOW

TFOLLOW

TFOLLOW

EFOLLOW

EFOLLOW

id|)(

|*

|

EF

TFT

TFT

ETE

ETE

32

id + * ( ) $

E ETE’ ETE’

E’ E’+TE’ E’ E’

T TFT’ TFT’

T’ T’ T’*FT’ T’ T’

F Fid F(E)

33

Virknes id+id*id$ analīzeSteks Ievads

$E id+id*id$

$E’T id+id*id$ ETE’

$E’T’F id+id*id$ TFT’

$E’T’id id+id*id$ Fid

$E’T’ +id*id$

$E’ +id*id$ T’

$E’T+ +id*id$ E’+TE’

$E’T id*id$

$E’T’F id*id$ TFT’

$E’T’id id*id$ Fid

$E’T’ *id$

34

Virknes id+id*id$ analīze (turp.)

Steks Ievads

$E’T’F* *id$ T’*FT’

$E’T’F id$

$E’T’id id$ Fid

$E’T’ $

$E’ $ T’

$ $ E’

35

|aA

cAtS

Piemērs

36

a c t $

S ScAt

A Aa A

Virknes ct$ analīze Steks Ievads

$S ct$

$tAc ct$ ScAt

$tA t$

$t t$ A

$ $ accept

37

bE

eSS

aSiEtSS

|

|

Piemērs

38

a b e i t $

S Sa SiEtSS’

S’ S’S’eS

S’

E Eb

LL(1) gramatikām nevienā rūtiņā nevar būt vairāk par vienu ierakstu