Otvori glavni izbornik

U računarstvu i lingvistici, formalna gramatika, ili ponekad jednostavno gramatika, jest precizan opis formalnog jezika - to jest, skupa nizova znakova (stringova). Dvije glavne kategorije formalnih gramatika su generativne gramatike, koje predstavljaju skup pravila za generiranje nizova znakova jezika, te analitičke gramatike, koje predstavljaju skup pravila za analizu pripadnosti niza znakova jeziku. Ukratko, analitička gramatika opisuje kako prepoznati kad je niz znakova u skupu, dok generativna gramatika opisuje kako pisati samo one nizove znakova u skupu.

Sadržaj

Generativne gramatikeUredi

Generativna gramatika se sastoji od skupa pravila za transformiranje nizova znakova koje zovemo produkcije. Prilikom generiranja niza znakova u jeziku započinjemo sa nizom znakova koji se sastoji od samo jednog početnog znaka, i potom uzastopno primjenjujemo pravila (bilo koji broj puta, u bilo kojem redoslijedu) u svrhu prepisivanja (engl. rewrite) niza znakova. Jezik se sastoji od svih nizova znakova koji mogu biti generirani na ovaj način. Bilo koji pojedinačni slijed valjanih izbora pravila odabranih za vrijeme procesa prepisivanja daje neki pojedinačni niz znakova jezika, i ukoliko postoji više načina za generiranje jednog niza znakova, tada za gramatiku kažemo da je nejednoznačna.

Na primjer, pretpostavimo da se abeceda sastoji od znakova   i  , da je početni znak  , te da imamo sljedeće produkcije:

1.  
2.  

tada započinjemo sa početnim nezavršnim znakom   te odabiremo produkciju koju nad njim primjenjujemo. Ako odaberemo prvu produkciju, zamjenjujemo   sa   te dobivamo međuniz  . Ako opet odaberemo prvu produkciju, zamjenjujemo   sa   te na taj način generiramo međuniz  . Ovaj proces ponavljamo sve dok međuniz ne bude sadržavao samo znakove iz abecede (tj.   i  ). Ako sad odaberemo drugu produkciju, zamjenjujemo   sa   pri čemu se generira niz znakova   i generiranje je završeno. Ovaj slijed odabira produkcija možemo konciznije zapisati koristeći simbole:  . Jezik ove gramatike je skup svih nizova znakova koji mogu biti generirani koristeći sljedeći proces:  .

Formalna definicijaUredi

Klasičnu formalizaciju generativnih gramatika je prvi predložio Noam Chomsky 1950ih,[1][2], gramatiku G čine sljedeće komponente:

  • Konačan skup   nezavršnih znakova
  • Konačan skup   završnih znakova disjunktan sa skupom  
  • Konačan skup   pravila produkcija, svako oblika
 
gdje je   Kleeneov operator i   označava uniju skupova. To jest, svaka produkcija preslikava jedan niz znakova u drugi, gdje prvi niz znakova sadrži barem jedan nezavršni znak. U slučaju da je drugi niz znakova prazni niz - tj. ne sadrži nijedan znak - simbol iz grčke abecede epsilon ( ) se obično piše mjesto njega kako bi se izbjegla nejednoznačnost.
  • Istaknuti znak   je početni nezavršni znak.

Obično se takva formalna gramatika   konciznije zapiše kao uređena četvorka  .

Jezik formalne gramatike  , označen sa  , je definiran kao skup svih onih nizova znakova nad   koji mogu biti generirani počevši od početnog nezavršnog znaka   i potom primjenjujući produkcije u   sve dok nijedan nezavršni znak nije prisutan u međunizu.

PrimjerUredi

Promatrajmo gramatiku   gdje je  ,  ,   je početni nezavršni znak, i   se sastoji od sljedećih produkcija:

1.  
2.  
3.  
4.  

Neki primjeri generiranih nizova znakova u   su:

  •  
  •  
  •   
(Bilješka o korištenoj notaciji:   čitaj kao "L generira R korištenjem produkcije i" i generirani dio međuniza je svaki put masno otisnut (podebljan).)

Ova gramatika definira jezik   gdje   označava niz znakova koji se sastoji od n uzastopnih znakova  . Dakle, jezik ove gramatike je skup svih nizova znakova koji se sastoje od jednog ili više znakova  , nakon kojih slijedi jednak broj znakova  , nakon kojih slijedi jednak broj znakova  .

Chomskyjeva hijerarhijaUredi

 Podrobniji članak o temi: Chomskyjeva hijerarhija

Kada je Noam Chomsky prvi iznio formalizam generativnih gramatika 1956.[1], klasificirao ih je u tipove danas poznate kao dio Chomskyjeve hijerarhije. Razlika između ovih tipova jest što imaju povećavajuće stroga produkcijska pravila i stoga mogu izraziti sve manje formalnih jezika. Dva važna tipa su kontekstno neovisne gramatike (tip 2) i regularne gramatike (tip 3). Jezici koji se mogu opisati ovakvim gramatikama se respektivno zovu kontekstno neovisni jezici i regularni jezici. Premda nešto manje moćne od gramatike neograničenih produkcija (tip 0), koje mogu izraziti bilo koji jezik koji prihvaća Turingov stroj, ova dva ograničena tipa gramatika su najčešće korištena jer se parser za njih može učinkovito implementirati.[3] Na primjer, sve regularne jezike može prepoznati konačni automat, a za korisne podskupove kontekstno neovisnih gramatika postoje dobro poznati algoritmi za generiranje učinkovitih LL parsera i LR parsera koji prepoznaju odgovarajuće jezike koje gramatike generiraju.

Kontekstno neovisne gramatikeUredi

Kontekstno neovisna gramatika je gramatika u kojoj se lijeva strana produkcije sastoji samo od jednog nezavršnog znaka. Ovo ograničenje je netrivijalno; kontekstno neovisna gramatika ne može generirati sve jezike. One koje može zovemo kontekstno neovisni jezici.

Jezik definiran u gornjem primjeru nije kontekstno neovisan i ovo se može strogo dokazati koristeći svojstvo napuhavanja za kontekstno neovisne jezike, no npr. jezik   (barem jedan znak   nakon kojeg slijedi jednak broj znakova  ) jest kontekstno neovisan, pošto ga generira gramatika   sa  ,  , pri čemu je   početni nezavršni znak, a produkcije su sljedeće:

1.  
2.  

Kontekstno neovisni jezik može biti prepoznat u vremenu   koristeći algoritme kao što je Earleyev algoritam. Drugim riječima, za svaki kontekstno neovisni jezik se može izgraditi stroj koji na ulazu prima neki niz znakova i određuje u   vremenu pripada li niz jeziku, pri čemu je   duljina niza znakova.[4] Nadalje, neki važni podskupovi kontekstno neovisnih jezika mogu biti prepoznati u linearnom vremenu koristeći neke druge algoritme.

Regularne gramatikeUredi

U regularnim gramatikama, lijeva strana produkcije je također isključivo jedan nezavršni znak, ali sad se postavlja ograničenje i na desnu stranu produkcije, na kojoj ne mora biti nijedan znak (u slučaju  -produkcije), može biti jedan završni znak, ili jedan završni znak nakon kojeg slijedi jedan nezavršni znak, i nijedan drugi niz znakova. (Ponekad se koristi nešto šira definicija po kojoj su dozvoljeni dulji nizovi završnih znakova ili samo jedan nezavršni znak i ništa drugo, i na taj se način pojednostavi označavanje iste klase jezika.)

Jezik prethodno definiran nije regularan, ali jezik   (barem jedan znak   nakon kojeg slijed barem jedan znak  , iako ne nužno isti broj puta) jest, pošto ga generira gramatika   sa  ,  , pri čemu je   početni nezavršni znak, a skup produkcija je sljedeći:

1.  
2.  
3.  
4.  
5.  

Sve jezike koje generira regularna gramatika može u linearnom vremenu prepoznati konačni automat. Iako su u praksi regularne gramatike obično opisane regularnim izrazima, neki oblici regularnih izraza korištenih u praksi ne generiraju strogo regularne jezike i zbog tih otklona ne mogu biti prepoznati u linearnom vremenu.

Drugi oblici generativnih gramatikaUredi

U posljednje su vrijeme razvijena mnoga proširenja i varijacije na izvornu Chomskyjevu hijerarhiju formalnih gramatika, kako od strane lingvista tako i od strane računalnih znanstvenika, obično u svrhu povećanja ekspresivne moći ili u svrhu lakše analize ili parsiranja. Neki oblici tako razvijenih gramatika uključuju:

  • Tree-adjoining gramatike povećavaju ekspresivnost konvencionalnih generativnih gramatika dozvoljavanjem pravilima prepisivanja da operiraju na stablima parsiranja mjesto na običnim nizovima znakova. [5]
  • Afiksne gramatike[6] i atributne gramatike[7][8] dozvoljavaju pravilima prepisivanja da budu obogaćena semantičkim atributima i operacijama, što se pak pokazalo korisno za povećanje ekspresivnosti gramatike, kao i za izgradnju praktičnih alata za prevođenje (translaciju) jezika.

Analitičke gramatikeUredi

Iako su algoritmi parsiranja jako dugo proučavani i njihova svojstva dobro shvaćena i dokumentirana u ogromnom literalnom korpusu, većina njih podrazumijeva da je jezik koji se parsira inicijalno opisan preko generativne formalne gramatike, te da je cilj generatora parsera transformirati tu generativnu gramatiku u parser. Strogo govoreći, generativna gramatika ni na koji način ne korespondira algoritmu korištenom za parsiranje jezika, i različiti algoritmi postavljaju različita ograničenja na oblik produkcija koje shvaćaju kao dobro oblikovane.

Alternativni pristup jest formalizacija jezika u obliku analitičke gramatike, koja pak puno izravnije korespondira strukturi i semantici parsera za jezik. Primjeri formalizama analitičkih gramatika uključuju:

  • The Language Machine [9] izravno implementira neograničene analitičke gramatike (analitičke gramatike neograničenih produkcija). Supstitucijska pravila se koriste za transformiranje ulaza i generiranje izlaza i ponašanja. Sustav također može generirati lm-dijagram koji pokazuje što se događa prilikom primjene pravila analitičke gramatike neograničenih produkcija.
  • Top-down parsing language (TDPL): minimalistički formalizam analitičkih gramatika razvijen u ranim 1970im u svrhu proučavanja parsera od vrha prema dnu.[10]
  • Link grammar: oblik analitičke gramatike dizajniran za lingvistiku koji izvodi sintaksnu strukturu proučavanjem pozicijskih odnosa parova riječi.[11][12]
  • Parsing expression grammar (PEG): poopćenje TDPL-a dizajnirano da zadovolji praktične potrebe ekspresivnosti programskih jezika i pisaca jezičnih procesora.[13]

IzvoriUredi

  1. 1,0 1,1 Chomsky, Noam, "Three Models for the Description of Language," IRE Transactions on Information Theory, Vol. 2 No. 2, pp. 113-123, 1956.
  2. Chomsky, Noam, Syntactic Structures, Mouton, The Hague, 1957.
  3. Grune, Dick & Jacobs, Ceriel H., Parsing Techniques—A Practical Guide, Ellis Horwood, England, 1990.
  4. Earley, Jay, "An Efficient Context-Free Parsing Algorithm," Communications of the ACM, Vol. 13 No. 2, pp. 94-102, February 1970.
  5. Joshi, Aravind K., et al., "Tree Adjunct Grammars," Journal of Computer Systems Science, Vol. 10 No. 1, pp. 136-163, 1975.
  6. Koster , Cornelis H. A., "Affix Grammars," in ALGOL 68 Implementation, North Holland Publishing Company, Amsterdam, p. 95-109, 1971.
  7. Knuth, Donald E., "Semantics of Context-Free Languages," Mathematical Systems Theory, Vol. 2 No. 2, pp. 127-145, 1968.
  8. Knuth, Donald E., "Semantics of Context-Free Languages (correction)," Mathematical Systems Theory, Vol. 5 No. 1, pp 95-96, 1971.
  9. http://languagemachine.sourceforge.net
  10. Birman, Alexander, The TMG Recognition Schema, Doctoral thesis, Princeton University, Dept. of Electrical Engineering, February 1970.
  11. Sleator, Daniel D. & Temperly, Davy, "Parsing English with a Link Grammar," Technical Report CMU-CS-91-196, Carnegie Mellon University Computer Science, 1991.
  12. Sleator, Daniel D. & Temperly, Davy, "Parsing English with a Link Grammar," Third International Workshop on Parsing Technologies, 1993. (Revizija prethodnog papira.)
  13. Ford, Bryan, Packrat Parsing: a Practical Linear-Time Algorithm with Backtracking, Master’s thesis, Massachusetts Institute of Technology, Sept. 2002.

Vanjske povezniceUredi