Kopa FOLLOW

38
1 Kopa FOLLOW

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

Page 1: Kopa FOLLOW

1

Kopa FOLLOW

Page 2: 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 ε .

Page 3: Kopa FOLLOW

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$

Page 4: Kopa FOLLOW

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()-ε)

Page 5: Kopa FOLLOW

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)

Page 6: Kopa FOLLOW

6

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

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

Page 7: Kopa FOLLOW

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

Page 8: Kopa FOLLOW

8

},,{)(

)(

dcaAFIRST

BFOLLOW

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

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

Page 9: Kopa FOLLOW

9

}{)( dCFOLLOW

},,{)( dcaBFOLLOW

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

cC

bB

EFB

aA

CDA

ABAS

F

fFF

E

eEE

dD

C

},{)( fFFIRST

},{)( eEFIRST

}{)( dDFIRST

},{)( cCFIRST

},,,{)( febBFIRST

},,{)( dcaAFIRST

},,{)( dcaSFIRST

Page 10: Kopa FOLLOW

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

Page 11: Kopa FOLLOW

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

Page 12: Kopa FOLLOW

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

Page 13: Kopa FOLLOW

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

Page 14: Kopa FOLLOW

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

Page 15: Kopa FOLLOW

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

Page 16: Kopa FOLLOW

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

Page 17: Kopa FOLLOW

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.)

Page 18: Kopa FOLLOW

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!

Page 19: Kopa FOLLOW

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

Page 20: Kopa FOLLOW

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

Page 21: Kopa FOLLOW

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(ε)={ε}

Page 22: Kopa FOLLOW

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}

Page 23: Kopa FOLLOW

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

Page 24: Kopa FOLLOW

24

b augša

eh

0Z

Steks

ehb$

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

Bija šāds pieraksts

Page 25: Kopa FOLLOW

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

Page 26: Kopa FOLLOW

26

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

Page 27: Kopa FOLLOW

27

id|)(

|*

|

EF

FFTT

TTEE

Piemērs

Novērst kreiso rekursiju!

Page 28: Kopa FOLLOW

28

id|)(

|*

|

EF

TFT

TFT

ETE

ETE

Piemērs

Atrast kopas FIRST un FOLLOW!

Page 29: Kopa FOLLOW

29

}id{(,)(

}{*,)(

}id{(,)(

},{)(

}id{(,)(

FFIRST

TFIRST

TFIRST

EFIRST

EFIRST

Page 30: Kopa FOLLOW

30

),$},*,{)(

),$},{)(

),$},{)(

{),$})(

{),$})(

FFOLLOW

TFOLLOW

TFOLLOW

EFOLLOW

EFOLLOW

Page 31: Kopa FOLLOW

31

}id{(,)(

}{*,)(

}id{(,)(

},{)(

}id{(,)(

FFIRST

TFIRST

TFIRST

EFIRST

EFIRST

),$},*,{)(

),$},{)(

),$},{)(

{),$})(

{),$})(

FFOLLOW

TFOLLOW

TFOLLOW

EFOLLOW

EFOLLOW

id|)(

|*

|

EF

TFT

TFT

ETE

ETE

Page 32: Kopa FOLLOW

32

id + * ( ) $

E ETE’ ETE’

E’ E’+TE’ E’ E’

T TFT’ TFT’

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

F Fid F(E)

Page 33: Kopa FOLLOW

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$

Page 34: Kopa FOLLOW

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’

Page 35: Kopa FOLLOW

35

|aA

cAtS

Piemērs

Page 36: Kopa FOLLOW

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

Page 37: Kopa FOLLOW

37

bE

eSS

aSiEtSS

|

|

Piemērs

Page 38: Kopa FOLLOW

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