Prošireni Backus-Naurov oblik
Prošireni Backus-Naurov oblik (EBNF od engl. extended Backus-Naur form) je proširenje osnovne metasintaksne notacije Backus-Naurovog oblika. Izvorno ju je razvio Niklaus Wirth, najkorištenije inačice EBNF notacije su danas definirane standardima, ponajprije ISO-14977.
Kod, npr. izvorni kod računalnog programa, se sastoji od završnih simbola. To su vidljivi znakovi, znamenke, interpunkcijski znakovi, bjeline itd.
EBNF definira pravila produkcija u kojima su slijedovi simbola odgovarajuće dodijeljeni nezavršnim simbolima:
znamenka bez nule = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; znamenka = "0" | znamenka bez nule ;
Ovo produkcijsko pravilo definira nezavršni simbol znamenka koji je na lijevoj strani dodjele. Uspravna crta predstavlja alternativu (mogućnost izbora), dok su završni simboli zatvoreni u navodnike nakon kojih slijedi točka-zarez kao terminirajući znak. Stoga je znamenka ili 0 ili znamenka bez nule, koja pak može biti 1 ili 2 ili 3 i tako dalje sve do 9.
Produkcijsko pravilo također može uključivati slijed završnih ili nezavršnih simbola, svaki razdvojen zarezom:
dvanaest = "1", "2" ; dvije stotine i jedan = "2", "0", "1" ; tri stotine i dvanaest = "3", dvanaest ; dvanaest tisuća dvije stotine i jedan = dvanaest, dvije stotine i jedan ;
Izrazi koji mogu biti izostavljeni ili opetovani mogu biti predstavljeni vitičastim zagradama { ... }:
prirodni broj = znamenka bez nule, { znamenka } ;
U ovom slučaju su stringovi 1, 2, ...,10, ..., 12345, ... svi odreda ispravni. Valja imati na umu dakle, da sve što je zapisano unutar vitičastih zagrada može biti opetovano proizvoljnom učestalošću, ali se može i pojaviti nijednom.
Izbor može biti predstavljen uglatim zagradama [ ... ]:
cijeli broj = "0" | [ "-" ], prirodni broj ;
Stoga cijeli broj je nula (0) ili prirodni broj koji može biti prethođen izbornim znakom minusa.
EBNF također između ostaloga pruža i sintaksu za opis opetovanja predodređen broj puta, za isključivanje nekog dijela produkcije ili umetanje komentara u EBNF gramatiku.
Sudeći po ISO 14977 standardu, EBNF je namijenjen da bude proširiv, i dva su mehanizma u tu svrhu spomenuta. Prvi je dio EBNF gramatike, posebni slijed, koji predstavlja tekst unutar upitnika, i čija je interpretacija izvan djelokruga EBNF standarda. Na primjer, znak razmaka se može definirati sljedećim pravilom:
razmak = ? US-ASCII znak 32 ?;
Drugi je mehanizam činjenica da zagrade ne mogu u EBNF biti smještene pored identifikatora. Sljedeće nije vrijedeći EBNF:
nešto = foo ( bar );
Stoga proširenje EBNF notacije može koristiti takav sustav oznaka. Na primjer, u Lispovoj gramatici, aplikacija funkcije može biti definirana sljedećim produkcijskim pravilom:
aplikacija funkcije = list( simbol, [ { izraz } ] );
BNF je imao taj problem što izbori (opcije) i ponavljanja nisu mogli biti izravno izraženi. Umjesto toga, zahtijevali su uporabu međupravila ili alternativne produkcije definirane ili kao prazna produkcija ili kao izborna produkcija za izbor, odnosno ili kao opetovana produkcija ili sama, rekurzivno, za ponavljanje. Isti konstrukti mogu još uvijek biti korišteni u EBNF.
Izbor:
broj s predznakom = [ predznak ], broj ;
se u BNF stilu može definirati kao:
broj s predznakom = predznak, broj | broj ;
ili
broj s predznakom = izborni predznak, broj ; izborni predznak = | predznak ; (* se koristi za očitije označavanje prazne produkcije *)
Opetovanje:
broj = { znamenka } ;
može biti definirano u BNF-stilu kao:
broj = znamenka | broj znamenka;
EBNF eliminira neke od BNF nedostataka:
- BNF koristi simbole (, , |, ::=) za sebe. Kada se oni pojave u jeziku koji se definira, BNF se ne može koristiti bez modifikacija i objašnjenja,
- BNF sintaksa može predstaviti samo jedno produkcijsko pravilo u jednoj liniji.
EBNF rješava ove probleme:
- Završni simboli su strogo zatvoreni unutar navodnika ("..." ili '...'). Uglate zagrade (...) za nezavršne simbole mogu biti izostavljene.
- Terminirajući znak, obično točka-zarez, označava kraj produkcijskog pravila.
Nadalje, postoje dodatni mehanizmi za poboljšanja, poput onih za definiranje broja ponavljanja, isključujuće alternative (npr. sve znakove osim navodnika), komentare itd.
Unatoč svim poboljšanjima, EBNF nije "moćniji" od BNF sustava oznaka u smislu jezika koji može definirati. Ustvari bilo koja gramatika koja može biti definirana u EBNF se može predstaviti i u BNF sustavu oznaka. Međutim, takvo nešto vodi ka znatno većem zapisu pravila gramatike.
EBNF je standardizirala Međunarodna organizacija za standardizaciju tijela pod kodom ISO/IEC 14977:1996(E).
Pod nekim okolnostima se bilo koja proširena BNF notacija može zvati EBNF. Na primjer, W3C koristi jednu takvu EBNF notaciju za specificiranje sintakse XML-a.
- W3C komitet je koristio različitu varijantu EBNF notacije za specificiranje sintakse XML-a.
- British Standards je objavio standard za EBNF: BS 6154 1981. godine.
- IETF koristi Povećani BNF (ABNF), specificiran u RFC 2234.
- Niklaus Wirth: What can we do about the unnecessary diversity of notation for syntactic definitions? CACM, Vol. 20, Issue 11, November 1977, pp. 822-823.
- Roger S. Scowen: Extended BNF — A generic base standard. Software Engineering Standards Symposium 1993.
- Međunarodni standard (ISO 14977) koji definira EBNF je sad slobodno dostupan kao zipirana PDF datoteka.
- Članak "EBNF: A Notation to Describe Syntax (PDF)" autora Richarda E. Pattisa opisuje funkcije i sintaksu EBNF notacije
- Članak "BNF and EBNF: What are they and how do they work?" autora Larsa Mariusa Garshola
- Članak "The Naming of Parts" autora Johna E. Simpsona
- ISO/IEC 14977 : 1996(E)
- Citati sa CiteSeera Arhivirana inačica izvorne stranice od 11. ožujka 2008. (Wayback Machine)
- RFC 2234 - Augmented BNF for Syntax Specifications: ABNF
- BNF/EBNF variants - tablica Petea Jinksa koja uspoređuje nekoliko sintaksi.