Povećani Backus-Naurov oblik (češće kraće samo kao ABNF, od engl. Augmented Backus–Naur form) proširuje Backus-Naurov oblik.

Povećani Backus-Naurov oblik (ABNF) je zasnovan na Backus-Naurovom obliku, ali posjeduje vlastitu sintaksu i produkcijska pravila. Povod za nastanak ovog metajezika jest opis formalnog sustava jezika koji je protokol (dvosmjerna specifikacija). Dokumentiran je u i često služi kao definicijski jezik za IETF komunikacijske protokole.

ispravlja probleme u i obsoletira .

Uvod

ABNF specifikacija je skup produkcijskih pravila, zapisanih kao pravilo = definicija ; komentar CR LF: gdje je pravilo nezavršni simbol osjetljiv na velika i mala slova, definicija se sastoji od slijedova simbola koji definiraju pravilo, komentar je u svrhu dokumentacije, a pravilo završava znakom vraćanja ne početak reda (CR od engl. carriage return) i znakom prelaska u novi red (LF od engl line feed).

Imena pravila su neosjetljiva na velika i mala slova: <imepravila>, <Imepravila>, <IMEPRAVILA>, i <iMePRaviLA> su sve ista pravila. Imena pravila se sastoje od slova nakon kojeg slijede slova, brojevi i crtice.

Uglate zagrade (“<”, “>”) se ne zahtijevaju oko imena pravila (kao što se zahtijevaju u BNF notaciji). Međutim, mogu biti korištene za označavanje imena pravila prilikom korištenja u običnom tekstu za isticanje samih imena pravila.

ABNF se enkodira u 7-bitnom ASCII kodu u 8-bitnom polju čiji je vršni bit postavljen na nulu.

Završne vrijednosti

Završni su simboli specificirani jednim ili više numeričkih karaktera (znakova).

Numerički karakteri mogu biti specificirani znakom postotka “%”, nakon kojeg slijedi baza (b = binarna, d = decimalna, i x = heksadecimalna), nakon kojeg slijedi vrijednost, ili nadovezivanje (konkatenacija) vrijednosti (označena sa “.”). Na primjer, znak vraćanja na početak reda, CR (od engl. carriage return), je specificiran kodom %d13 u decimalnoj bazi ili %x0D u heksadecimalnoj. CR nakon kojeg slijedi znak prelaska u novi red - LF (od engl. line feed) se može specificirati nadovezivanjem kao %d13.10.

Literalni tekst je specificiran uporabom stringa zatvorenog u navodnike ("). Ovi stringovi su neosjetljivi na velika i mala slova i korišteni skup karaktera iz US-ASCII. Stoga će string “abc” spariti “abc”, “Abc”, “aBc”, “abC”, “ABc”, “AbC”, “aBC”, i “ABC”. Za sparivanje osjetljivo na velika i mala slova se moraju koristiti eksplicitni karakteri: za sparivanje “aBc” definicija će biti %d97 %d66 %d99.

Operatori Bjeline

Bjeline se koriste za razdvajanje definicijskih elemenata: prazni znak mora biti eksplicitno uključen da bi se prepoznao kao graničnik.

Nadovezivanje:

Pravilo1 Pravilo2

Pravilo može biti definirano listanjem slijeda imena pravila. Da bi se spario string “aba” sljedeća pravila mogu biti korištena:

fu = %x61 ; a bar = %x62 ; b mumble = fu bar fu

Alterniranje: Pravilo1 / Pravilo2

Pravilo može biti definirano listanjem alternativnih pravila razdvojenih kosom crtom (“/”).

Da bi se prihvatilo pravilo <fu> ili pravilo <bar> može se konstruirati sljedeće pravilo: fubar = fu / bar

Inkrementalni izbori:

Pravilo1 =/ Pravilo2

Dodani izbori mogu biti dodani u pravilo uporabom koda “=/” između imena pravila i definicije.

Pravilo skuppravila = izbor1 / izbor2 / izbor3 / izbor4 / izbor5 je istovjetno sljedećima skuppravila = izbor1 / izbor2 skuppravila =/ izbor3 skuppravila =/ izbor4 / izbor5

Opseg vrijednosti:

%c##-##

Opseg numeričkih vrijednosti se može specificirati uporabom crtice (“-”).

Pravilo OKTALNO = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" je istovjetno sljedećem pravilu: OKTALNO = %x30-37

Grupa slijeda:

(Pravilo1 Pravilo2)

Elementi mogu biti smješteni u zagrade kako bi se grupirala pravila u definiciji.

Da bi se sparili stringovi “elem fubar snafu” ili “elem tarfu snafu”, sljedeće pravilo može biti konstruirano: grupa = elem (fubar / tarfu) snafu

Kako bi se sparili stringovi “elem fubar” ili “tarfu snafu”, sljedeće pravilo može biti konstruirano: grupa = elem fubar / tarfu snafu grupa = (elem fubar) / (tarfu snafu)

Opetovanje varijabli:

n*nPravilo

Kako bi se naznačilo opetovanje elementa, koristi se oblik <a>*<b>element. Izborni <a> daje minimalan broj elemenata koji se mogu uključiti, s pretpostavljenom vrijednošću jednakom 0. Izborni <b> daje maksimalan broj uključenih elemenata, bez pretpostavljene gornje granice.

Valja koristiti *element za nula illi više elemenata, 1*element za jedan ili više elemenata, i 2*3element za dva ili tri elementa.

Specifično opetovanje:

nPravilo

Kako bi se naznačio eksplicitan broj elemenata, koristi se oblik <a>element i koji je istovjetan sa <a>*<a>element.

Valja koristiti 2ZNAMENKA da bi se dobile dvije numeričke znamenke i 3ZNAMENKA kako bi se dobile tri numeričke znamenke.

Izborni slijed:

[Pravilo]

Kako bi se naznačio izborni (opcionalni) element, sljedeće konstrukcije su istovjetne: [fubar snafu] *1(fubar snafu) 0*1(fubar snafu)

Komentar:

; komentar

Točka-zarez (“;”) započinje komentar koji se nastavlja do kraja linije.

Prednost operatora

Sljedeći operatori imaju danu prednost od najjačeg do najslabijeg vezanja: Stringovi, Oblikovanje Imena Komentari Opseg vrijednosti Opetovanje Grupiranje, Izborni Nadovezivanje Alternativa

Uporaba operatora alternirana s nadovezivanjem može biti zbunjujuća i preporučuje se uporaba grupiranja kako bi se grupe nadovezivanja učinile eksplicitnima.

Osnovna pravila Osnovna pravila su definirana u ABNF standardu. PraviloFormalna definicijaZnačenjeALPHA %x41-5A / %x61-7A velika i mala ASCII slova (A-Z a-z)DIGIT %x30-39 decimalne znamenke (0-9)HEXDIG DIGIT / "A" / "B" / "C" / "D" / "E" / "F" heksadecimalne znamenke (0-9 A-F)DQUOTE %x22 dvostruki navodnikSP %x20 znak praznine (engl. space)HTAB %x09 horizontalni tabWSP SP / HTAB znak praznine i horizontalni tabLWSP *(WSP / CRLF WSP) linearna bjelina (nakon znaka za novi red)VCHAR %x21-7E vidljivi (ispisivi) znakoviCHAR %x01-7F bilo koji 7-bitni US-ASCII znak, isključujući NULOCTET %x00-FF 8 bitova podatakaCTL %x00-1F / %x7F kontrolni znakoviCR %x0D znak vraćanja na početak reda (engl. carriage return)LF %x0A znak prelaska u novi red (engl. linefeed)CRLF CR LF Standardni internetski znak za prelazak u novi redBIT "0" / "1"

Primjer

Primjer poštanskih adresa dan u članku o Backus-Naurovom obliku se može specificirati kao: poštanska-adresa = ime-dio ulica pbroj-dio

ime-dio = *(osobni-dio SP) prezime [SP jr-dio] CRLF ime-dio =/ osobni-dio CRLF

osobni-dio = ime / (inicijal ".") ime = *ALPHA inicijal = ALPHA prezime = *ALPHA jr-dio = ("Jr." / "Sr." / 1*("I" / "V" / "X"))

street = [stan-broj SP] kućni-broj SP ime-ulice CRLF stan-broj = 1*4DIGIT kućni-broj = 1*8(DIGIT / ALPHA) ime-ulice = 1*VCHAR

pbroj-dio = ime-grada "," SP država 1*2SP poštanski-broj CRLF ime-grada = 1*(ALPHA / SP) država = 2ALPHA poštanski-broj = 5DIGIT ["-" 4DIGIT]

Izvori

Augmented BNF for Syntax Specifications: ABNF Augmented BNF for Syntax Specifications: ABNF (obsoletno) Kategorija:Formalni jezici