Kopa FOLLOW
description
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