Gramatikas un produkcijas
description
Transcript of Gramatikas un produkcijas
![Page 1: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/1.jpg)
Gramatikas un produkcijas
Praktiskās valodas ir komplicētākas nekā iespējams definēt ar regulāro izteiksmju palīdzību.
Gramatika – likumu kopa, kas ļauj aprakstīt valodas teikumus – noteikt tās A* apakškopas, kurās mēs esam ieinteresēti.
![Page 2: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/2.jpg)
Gramatika
Gramatika G={N,T,S,P}
N – galīga neterminālo simbolu kopa. Netermināļi.T – galīga terminālo simbolu kopa. Termināļi.S – starta simbols (SN). Citur mērķis vai mērķa simbols.P – galīga produkcijas likumu (produkciju) kopa
![Page 3: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/3.jpg)
GramatikaG={N,T,S,P}N – galīga neterminālo simbolu kopaT – galīga terminālo simbolu kopaS – starta simbols (SN)P – galīga produkcijas likumu (produkciju) kopa
Teikums pilnībā sastāv no T simboliem.
N apraksta sintakses klases, t.i. komponentes vai koncepcijas, kas tiek lietotas teikumu konstrukciju veidošanā.
N un T apvienojums ir valodas vārdnīca V. V=NT
N un T šķēlumam jābūt tukšai kopai. NT=
Alfabēts = visi termināļi, kas parādās produkcijās= ?
![Page 4: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/4.jpg)
Likumi, kas nosaka, kā veidot dotās valodas teikumus. Likumi, kas nosaka, kā viens teikums var tikt pārveidota par citu. Sauc arī par sintakses vienādojumiem.
kreisā puse ::= definīcija
Mēdz rakstīt arī
kreisā puse definīcija
Produkcijas (BNF pieraksts)
“definē kā”vai
“producē”
![Page 5: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/5.jpg)
kreisā_puse (NT)+
definīcija (NT)*
Kreisajā pusē jābūt vismaz vienam neterminālajam simbolam:
kreisā_puse N
Ja vairākas produkcijas, lietosim saīsināto pierakstu
kreisā puse ::= definīcija1
kreisā puse ::= definīcija2
Korekti produkciju pieraksti
kreisā puse ::= definīcija1 | definīcija2
![Page 6: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/6.jpg)
Piemērs
Neterminālos simbolus mēdz likt <> iekavās.
Piemēram: <teikums>, <naturāls skaitlis>
Gramatika, kas apraksta naturālus skaitļus trijnieku skaitīšanas sistēmā.
N = {<cipars>,<skaitlis>}
T = {0, 1, 2}
S = <skaitlis>
P = { <cipars> ::= 0|1|2
<skaitlis> ::= <cipars>
<skaitlis> ::= <skaitlis><cipars> }
![Page 7: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/7.jpg)
Gramatiku saīsināts pieraksts
Uzskaita tikai produkcijas, pie kam pirmā ir tā produkcija, kas atbilst starta simbolam.
Gramatika, kas apraksta naturālus skaitļus trijnieku skaitīšanas sistēmā.N = {<cipars>,<skaitlis>}T = {0, 1, 2}S = <skaitlis>P = { <cipars> ::= 0|1|2 <skaitlis> ::= <cipars> <skaitlis> ::= <skaitlis><cipars> }
<skaitlis> ::= <cipars> | <skaitlis><cipars><cipars> ::= 0|1|2
![Page 8: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/8.jpg)
Cita tradicionāla vienošanās
Lielie burti – netermināļiMazie burti – termināļi
S ::= 0|1|SS
![Page 9: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/9.jpg)
Gramatika :
Piemērs
S
aSbSG
PSTNG ,,,
}{SN },{ baT
},{ SaSbSP
![Page 10: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/10.jpg)
Piemērs
Vienkārši nepaplašināti teikumi latviski (apakškopa).
N = {<teikums>, <lietvārds>, <darbības vārds>}
T = {Suns, Kaķis, Govs, rej, ņaud, mauj, . }
S = <teikums>
P = {<teikums> ::= <lietvārds><darbības vārds>.
<lietvārds> ::= Suns|Kaķis|Govs
<darbības vārds> ::= rej|ņaud|mauj }
Govs rej. Zirgs mauj. Suns rej
![Page 11: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/11.jpg)
Sentenciālās formas
Apraksta ceļu kā no sākuma simbola tikt līdz teikumam, kurā ir tikai terminālie simboli.
un ir divi teikumi, kas sastāv no 0 vai vairāk netermināļiem un/vai termināļiem.
,V = (NT)*
Ja var iegūt no pielietojot vienu gramatikas G produkciju, tad saka, ka tieši producē (vai ir tieši atvasināms no )
Piemēram: =aBc, =acCc, ir produkcija B ::= cC, tad .
![Page 12: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/12.jpg)
Sentenciālās formas (turp.)Ja var iegūt no pielietojot n (n≥1) gramatikas G produkcijas, tad saka, ka producē netriviālā veidā (vai ir atvasināms no netriviālā veidā)
+ Tātad, ja eksistē virkne 0, 1, 2, …, k (k≥1), kur
= 0, j-1 j (1≤j≤k), k =, tad + .
Ja var iegūt no pielietojot n (n≥0) gramatikas G produkcijas (iepriekšējais+triviālais =), tad saka,
ka producē (vai ir atvasināms no ) *
Sentenciālā forma ir starta simbols un jebkura virkne, kas no tā atvasināta: : S*
Formāli valodu L(G), ko producē gramatika G, definē: L(G)={w|wT*; S*w}
![Page 13: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/13.jpg)
Gramatika G:
Piemērs
aaabbbaaaSbbbaaSbbaSbS
sentenciālās formasteikums(sentence)
S
aSbS
![Page 14: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/14.jpg)
Tā vietā lai rakstītu:
Var rakstīt:
aaabbbS *
aaabbbaaaSbbbaaSbbaSbS
![Page 15: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/15.jpg)
S
aSbS
*S
Gramatika
Vai taisnība, ka:
abS *
aabbbS *
ababS *
aaaSbbbS *
![Page 16: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/16.jpg)
A
aAbA
AbS
bS *
Gramatika
Vai taisnība, ka:
abS *
aabbbS *
aabS *
aS *
![Page 17: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/17.jpg)
Gramatiku veidi
Gramatiku sauc par rekursīvu, ja tā pieļauj atvasināšanas formā A+1A2 , kur AN, 1,2V*
Kreisi rekursīva, ja A+A un labēji rekursīva, ja A+A
Gramatiku sauc par pašiekļaujošu (self-embedding), ja tā pieļauj atvasināšanas formā A+1A2 , kur AN,
1,2V* un (1T)(2T)
Gramatiku sauc par bezkonteksta (context free), ja visas tās produkcijas ir bezkonteksta. Visas produkcijas ir formā A::=ξ , kur AN, ξ(NT)*
![Page 18: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/18.jpg)
Gramatiku veidi (turp.)
Ja kāda no gramatikas produkcijām ir formā A ::= ξ, tad gramatika nav bezkonteksta, jo A drīkst aizvietot ar ξ tikai un kontekstā.
![Page 19: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/19.jpg)
Lineāras gramatikas
Gramatikas ar tieši vienu netermināli kreisajā un ne vairāk kā vienu netermināli produkcijas labajā pusē.
Piemēri:
A
aAbA
AbS
S
aSbS
![Page 20: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/20.jpg)
Nelineāra gramatika
bSaS
aSbS
S
SSS
Gramatika G:
)}()(:{)( wnwnwGL ba
skaits virknēa w
Kādu valodu saturīgi apraksta šī gramatika?
![Page 21: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/21.jpg)
Cita lineāra gramatika
Gramatika G :
AbB
aBA
AS
|
}0:{)( nbaGL nnKādu valodu saturīgi apraksta šī gramatika?
![Page 22: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/22.jpg)
|| bSbaSaS
}},{:{)( *bawwwGL R
Uzrakstīt gramatiku, kas apraksta sekojošu valodu:
![Page 23: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/23.jpg)
Uzrakstīt gramatiku, kas apraksta sekojošu valodu:
1|0
|
V
VVVSS
},3||,}1,0{:{)( * NnnwwwGL
SSV
VVD
DDS
1|0
1|0
|1|0
![Page 24: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/24.jpg)
Uzrakstīt gramatiku, kas apraksta sekojošu valodu:
|| baX
XabXS
},},{:{)( * wabbawwGL
|| bPaPP
bPY
PaX
XYS
Vai pareizi?
![Page 25: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/25.jpg)
Uzrakstīt gramatiku, kas apraksta sekojošu valodu (turp.):
},},{:{)( * wabbawwGL
||
||
bAaAA
abAbSaSS
![Page 26: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/26.jpg)
Labēji-lineāras gramatikasVisas produkcijas ir formā:
Piemērs:
xBA
xAvai
aS
abSS
termināļu
virkne
![Page 27: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/27.jpg)
Kreisi-lineāras gramatikas
Visas produkcijas ir formā:
Piemērs:
BxA
aB
BAabA
AabS
|
xAvai
termināļuvirkne
![Page 28: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/28.jpg)
Regulāras gramatikas
![Page 29: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/29.jpg)
Regulāras gramatikas
Regulāra gramatika ir katra labēji- vai kreisi-lineāra gramatika
Piemēri:
aS
abSS
aB
BAabA
AabS
|
1G 2G
![Page 30: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/30.jpg)
Teorēma:
Regulāras gramatikas ģenerē regulāras valodas.
Secinājums:
Dotai regulārai gramatikai jāvar uzrakstīt atbilstošoregulāro izteiksmi.
![Page 31: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/31.jpg)
aS
abSS
Atbilstošā regulārā izteiksme?
(ab)*a
![Page 32: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/32.jpg)
Atbilstošā regulārā izteiksme?
aB
BAabA
AabS
|
aab(ab)*
![Page 33: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/33.jpg)
Regulāras gramatikas ģenerē regulāras valodas
Jāpierāda:
1. Valoda, ko ģenerē regulāra gramatika,ir regulāra
2. Katrai regulārai valodai var konstruēt regulāru gramatiku
![Page 34: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/34.jpg)
Valoda, ko ģenerē regulāra gramatika, ir regulāra
Ņem labēji lineāru gramatiku G un konstruēatbilstošu GNA M tā, lai L(G)=L(M)
![Page 35: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/35.jpg)
Gramatika G ir labēji-lineāra:
abBB
BaaA
BaAS
|
|
![Page 36: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/36.jpg)
Konstruē GNA M tā, ka katrs tā stāvoklis atbilst gramatikas neterminālim:
abBB
BaaA
BaAS
|
|
SFN
A
B
speciālsbeigu stāvoklis
![Page 37: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/37.jpg)
Pievieno šķautnes atbilstoši katrai produkcijai:
SFN
A
B
a
aAS
![Page 38: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/38.jpg)
SFN
A
B
a
BaAS |
![Page 39: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/39.jpg)
SFN
A
B
a
BaaA
BaAS
|
a
a
![Page 40: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/40.jpg)
SFN
A
B
a
bBB
BaaA
BaAS
|
a
a
b
![Page 41: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/41.jpg)
SFN
A
B
a
abBB
BaaA
BaAS
|
|
a
a
b
a
![Page 42: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/42.jpg)
aaabaaaabBaaaBaAS
SFN
A
B
a
a
a
b
a
![Page 43: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/43.jpg)
SFN
A
B
a
a
a
b
a
abBB
BaaA
BaAS
|
|
Gramatika GGNA M
abaaaab
GLML
*|*
)()(
![Page 44: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/44.jpg)
Vispārīgā veidā
Labēji-lineārai gramatikai Gir netermināļi N0, N1, …, Nk
un produkcijas Ni::=a1a2…amNj vai Ni::=a1a2…am
![Page 45: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/45.jpg)
Konstruēsim tādu GNA M , ka katrs neterminālis Ni atbilst stāvoklim:
0N
FN
1N
2N
3N
4Nspeciālsbeigustāvoklis
![Page 46: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/46.jpg)
Katrai produkcijai Ni::=a1a2…amNj
pievieno pārejas un papildus stāvokļus
iN jN……1a 2a ma
![Page 47: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/47.jpg)
Katrai produkcijai Ni::=a1a2…am
pievieno pārejas un papildus stāvokļus
iN FN………
1a 2a ma
![Page 48: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/48.jpg)
Iegūtais GNA M :
0N
FN
1N
2N
3N
4N
1a
3a
3a
4a
8a
2a 4a
5a
9a5a
9a
)()( MLGL Tātad:
![Page 49: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/49.jpg)
Pierādījuma ideja:
Otrā virzienā:Katrai regulārai valodai L var konstruēt regulāru gramatiku G
Tā kā valoda L ir regulāra, eksistē tāds GNA M, ka L=L(M).No M konstruē tādu regulāru gramatiku G, ka L(M)=L(G).
![Page 50: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/50.jpg)
Piemērs:
a
b
a
b*)*(* abbababL
)(MLL
M
1q 2q
3q
0q
![Page 51: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/51.jpg)
Pārveido M uz labēji-lineāru gramatiku
10 aqq
a
b
a
b
M0q 1q 2q
3q
![Page 52: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/52.jpg)
21
11
10
aqq
bqq
aqq
a
b
a
b
M0q 1q 2q
3q
![Page 53: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/53.jpg)
32
21
11
10
bqq
aqq
bqq
aqq
a
b
a
b
M0q 1q 2q
3q
![Page 54: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/54.jpg)
a
b
a
b
M0q 1q 2q
3q
3
13
32
21
11
10
q
bqq
aqq
bqq
aqq
G
LMLGL )()(
![Page 55: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/55.jpg)
Vispārīgi:
Katrai pārejai:aq p
pievieno produkciju:
apq
neterminālis terminālis neterminālis
![Page 56: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/56.jpg)
fqKatram beigu stāvoklim
pievieno produkciju: fq
![Page 57: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/57.jpg)
Tā kā G ir labēji-lineāra gramatika, G ir arī regulāra gramatika, kurai
LMLGL )()(
![Page 58: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/58.jpg)
Kā rīkoties kreisi-lineāras gramatikas gadījumā?
Pieņemsim, ka G ir kreisi-lineāra gramatika.
Pierādīsim, ka L(G) ir regulāra.
Pierādījuma ideja: Konstruēsim labēji-lineāru gramatiku G’
kurai L(G)=L(G’)R
![Page 59: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/59.jpg)
Tā kā G ir kreisi-lineāra gramatika, tās produkcijas ir sekojoša veida:
kaaBaA 21
kaaaA 21
![Page 60: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/60.jpg)
konstruējam labēji-lineāru gramatiku G’
kreisilineāraG
kaaBaA 21
BaaaA k 12
BvA
BvA R
labējilineāraG’
![Page 61: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/61.jpg)
konstruējam labēji-lineāru gramatiku G’
kreisilineāraG
kaaaA 21
12aaaA k
vA
RvA
labējilineāraG’
![Page 62: Gramatikas un produkcijas](https://reader035.fdocument.pub/reader035/viewer/2022062217/56815853550346895dc5ac61/html5/thumbnails/62.jpg)
Ir viegli parādīt, ka L(G)=L(G’)R
Tā kā G’ ir labēji-lineāra, iegūstam:
)(GL RGL )( )(GL
regulāravaloda
regulāravaloda
regulāravaloda