logo

Kontekstiton kielioppi (CFG)

CFG tarkoittaa yhteydetöntä kielioppia. Se on muodollinen kielioppi, jota käytetään luomaan kaikki mahdolliset merkkijonomallit tietyllä muodollisella kielellä. Kontekstiton kielioppi G voidaan määritellä neljällä monitolla seuraavasti:

 G = (V, T, P, S) 

Missä,

G on kielioppi, joka koostuu tuotantosäännöstä. Sitä käytetään luomaan kielen merkkijono.

T on terminaalisymbolin viimeinen joukko. Se on merkitty pienillä kirjaimilla.

SISÄÄN on ei-päätteisen symbolin viimeinen joukko. Se on merkitty isoilla kirjaimilla.

P on joukko tuotantosääntöjä, joita käytetään korvaamaan ei-päätesymbolit (tuotannon vasemmalla puolella) merkkijonossa muilla pääte- tai ei-päätesymboleilla (tuotannon oikealla puolella).

staattinen vuonna c

S on aloitussymboli, jota käytetään merkkijonon johtamiseen. Voimme johtaa merkkijonon korvaamalla toistuvasti ei-päätettä tuotannon oikealla puolella, kunnes kaikki ei-pääte on korvattu terminaalisymboleilla.

Esimerkki 1:

Muodosta CFG kielelle, jolla on mikä tahansa määrä a:ita joukon ∑= {a} yli.

Ratkaisu:

Kuten tiedämme, yllä olevan kielen säännöllinen lauseke on

 r.e. = a* 

Säännöllisen lausekkeen tuotantosääntö on seuraava:

 S → aS rule 1 S → ε rule 2 

Jos nyt haluamme johtaa merkkijonon 'aaaaaa', voimme aloittaa aloitussymboleilla.

 S aS aaS rule 1 aaaS rule 1 aaaaS rule 1 aaaaaS rule 1 aaaaaaS rule 1 aaaaaaε rule 2 aaaaaa 

R.e. = a* voi luoda joukon merkkijonoa {ε, a, aa, aaa,.....}. Meillä voi olla nollamerkkijono, koska S on aloitussymboli ja sääntö 2 antaa S → ε.

Esimerkki 2:

Muodosta CFG säännölliselle lausekkeelle (0+1)*

Ratkaisu:

on proteiinirasvaa

CFG:n voi antaa

 Production rule (P): S → 0S | 1S S → ε 

Säännöt ovat 0:n ja 1:n yhdistelmässä aloitussymbolin kanssa. Koska (0+1)* tarkoittaa {ε, 0, 1, 01, 10, 00, 11, ....}. Tässä joukossa ε on merkkijono, joten säännössä voimme asettaa säännön S → ε.

Esimerkki 3:

Muodosta CFG kielelle L = missä w € (a, b)*.

Ratkaisu:

Tietylle kielelle luotava merkkijono on {aacaa, bcb, abcba, bacab, abbcbba, ....}

Kielioppi voisi olla:

 S → aSa rule 1 S → bSb rule 2 S → c rule 3 

Jos nyt haluamme johtaa merkkijonon 'abbcbba', voimme aloittaa aloitussymboleilla.

 S → aSa S → abSba from rule 2 S → abbSbba from rule 2 S → abbcbba from rule 3 

Siten mikä tahansa tämäntyyppinen merkkijono voidaan johtaa annetuista tuotantosäännöistä.

Esimerkki 4:

Muodosta CFG kielelle L = anb2nmissä n>=1.

Ratkaisu:

merkintä kuvilla

Merkkijono, joka voidaan luoda tietylle kielelle, on {abb, aabbbb, aaabbbbbb....}.

Kielioppi voisi olla:

 S → aSbb | abb 

Jos nyt haluamme johtaa merkkijonon 'aabbbb', voimme aloittaa aloitussymboleilla.

 S → aSbb S → aabbbb