Backus-Naur forma
Backus-Naur forma - tai tokia matematinė metametakalba, kuri skirta kitų matematinių metakalbų apibrėžinėjimui. Kadangi tipiškiausias matematinės metakalbos atvejis yra visokios programavimo kalbos, tai ta šita metametakalba ir yra tam skirta.
Backus-Naur forma atsirado, kai žiloje senovėje būrelis programuotojų per kažkokią savo konferenciją bandė sudėlioti kokią tai normalią programavimo kalbą, kuri būtų patogi programavimui. Tuo metu pagrindinė programavimo kalba buvo Fortran, bet ji nebuvo patogi - tuometinė Fortran buvo visai nestruktūruota ir panašesnė į kažkokius mašinų kodus ar asemblerį. Tai tie programuotojai sutarė, kad gal ir neišeis normalios programavimo kalbos padaryti, bet reikia bent jau susikurti tokią, kuria jie galėtų rašyti visokius algoritmus ir jais dalintis, kad būtų lengvai suprantama.
Tai štai šitaip jiems ir gavosi pirma Algol kalbos versija - Algol-58. O kartu su ta versija jiems prireikė apsibrėžti ir kalbos gramatiką, tai tai gramatikai padarė tokią išplėstą Algol versiją, kuri skirtųsi tiek, kad ja kažką užrašius, matytųsi, jog tai jau nėra Algol programa, bet kartu būtų panašiai į Algol. Kadangi pirmas tą idėją iškėlė ir surašė toksai John Backus, tai pavadinimas gavosi nuo jo, bet paskui viską supaprastino ir davedė toksai Peter Naur, tai galų gale gavosi pavadinimas "Backus-Naur form".
Visa Backus-Naur forma yra labai paprasta:
Bet koks apibrėžimas yra sudarytas iš trijų nuosekliai einančių dalių:
- <simbolis> - tam tikras pavadinimas, arba ženklas, kuris visada įskliaudžiamas į kampinius skliaustus <>
- ::= - pakeitimo ženklas reiškia, kad tas simbolis arba ženklas kairėje nuo pakeitimo ženklo yra pakeičiamas į ekspresiją, kuri yra dešinėje nuo šio ženklo
- __ekspresija__ - tai vienas ar daugiau simbolių, kurie gali būti skiriami ženklu "|", jei yra pasirinkimas tarp jų, o visa ekspresija gali būti panaudota tam, kad pakeistų apibrėžimo kairėje pusėje esantį simbolį
Štai pvz.:
- <Pipedija> ::= tokia enciklopedija
- <Enciklopedija> ::= tokia knyga | toksai tinklapis
- <Knyga> ::= daug popieriaus su raidėmis
- <Tinklapis> ::= daug ekrano su raidėmis
- <Daug> ::= daugiau, negu 3
- <Raidė> ::= toksai kringelis
- <Toksai> ::= bereikšmis žodis
- <Popierius> ::= plokščias celiuliozės lakštas
- <Ekranas> ::= toksai daiktas, kuris šviečia ir ant jo rodosi dalykai
Reikalas tas, kad gana panašiais apibrėžimais galima aprašyti kokią tai programavimo kalbą taip, kad ją paskui galėtų sugeneruoti programavimo kalboms generuoti skirtas softas, ir taip gautųsi koksai tai transliatorius.