620 likes | 926 Views
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. Gramatika. Gramatika G={N,T,S,P}
E N D
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.
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
G={N,T,S,P} N – galīga neterminālo simbolu kopa T – galīga terminālo simbolu kopa S – 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= Gramatika Alfabēts = visi termināļi, kas parādās produkcijās = ?
Produkcijas (BNF pieraksts) 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 “definē kā”vai “producē”
Korekti produkciju pieraksti 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 kreisā puse ::= definīcija1 | definīcija2
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> }
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
Cita tradicionāla vienošanās • Lielie burti – netermināļi • Mazie burti – termināļi S ::= 0|1|SS
Piemērs • Gramatika :
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
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 .
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}
Piemērs Gramatika G: teikums(sentence) sentenciālāsformas
Tā vietā lai rakstītu: • Var rakstīt:
Gramatika Vai taisnība, ka:
Gramatika Vai taisnība, ka:
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)*
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ā.
Lineāras gramatikas • Gramatikas ar tieši vienu netermināli kreisajā un ne vairāk kā vienu netermināli produkcijas labajā pusē. • Piemēri:
Nelineāra gramatika GramatikaG: Kādu valodu saturīgi apraksta šī gramatika? skaits virknē
Cita lineāra gramatika • Gramatika G : Kādu valodu saturīgi apraksta šī gramatika?
Uzrakstīt gramatiku, kas apraksta sekojošu valodu: Vai pareizi?
Labēji-lineāras gramatikas vai • Visas produkcijas ir formā: • Piemērs: termināļuvirkne
Kreisi-lineāras gramatikas vai • Visas produkcijas ir formā: • Piemērs: termināļuvirkne
Regulāras gramatikas • Regulāra gramatikair katra • labēji- vai kreisi-lineāra gramatika • Piemēri:
Teorēma: • Regulāras gramatikas ģenerēregulāras valodas. Secinājums: Dotai regulārai gramatikai jāvar uzrakstīt atbilstošo regulāro izteiksmi.
Atbilstošā regulārā izteiksme? aab(ab)*
Regulāras gramatikas ģenerēregulāras valodas • Jāpierāda: • Valoda, ko ģenerē regulāra gramatika,ir regulāra • Katrai regulārai valodai var konstruēt regulāru gramatiku
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)
Konstruē GNA Mtā, ka katrstā stāvoklis atbilst gramatikasneterminālim: speciāls beigu stāvoklis
GramatikaG GNAM
Vispārīgā veidā • Labēji-lineārai gramatikai G • ir netermināļi N0, N1, …, Nk • un produkcijasNi::=a1a2…amNj vai Ni::=a1a2…am
Konstruēsimtādu GNAM , ka katrsneterminālisNiatbilststāvoklim: speciāls beigustāvoklis
Katrai produkcijai Ni::=a1a2…amNj • pievieno pārejas un papildus stāvokļus ……
Katrai produkcijai Ni::=a1a2…am • pievieno pārejas un papildus stāvokļus ………
Iegūtais GNAM : Tātad:
Otrā virzienā: Katrai regulārai valodai L var konstruēt regulāru gramatiku G Pierādījuma ideja: • 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).