Povećani Backus-Naurov oblik

Izvor: Wikipedija

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 RFC 4234 i često služi kao definicijski jezik za IETF komunikacijske protokole.

RFC 4234 ispravlja probleme u i obsoletira RFC 2234.

Uvod[uredi | uredi kôd]

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[uredi | uredi kôd]

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[uredi | uredi kôd]

Bjeline[uredi | uredi kôd]

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

Nadovezivanje:[uredi | uredi kôd]

Pravilo1 Pravilo2

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

  1. fu = %x61 ; a
  2. bar = %x62 ; b
  3. mumble = fu bar fu

Alterniranje:[uredi | uredi kôd]

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:

  1. fubar = fu / bar

Inkrementalni izbori:[uredi | uredi kôd]

Pravilo1 =/ Pravilo2

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

Pravilo

  1. skuppravila = izbor1 / izbor2 / izbor3 / izbor4 / izbor5

je istovjetno sljedećima

  1. skuppravila = izbor1 / izbor2
  2. skuppravila =/ izbor3
  3. skuppravila =/ izbor4 / izbor5

Opseg vrijednosti:[uredi | uredi kôd]

%c##-##

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

Pravilo

  1. OKTALNO = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"

je istovjetno sljedećem pravilu:

  1. OKTALNO = %x30-37

Grupa slijeda:[uredi | uredi kôd]

(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:

  1. grupa = elem (fubar / tarfu) snafu

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

  1. grupa = elem fubar / tarfu snafu
  2. grupa = (elem fubar) / (tarfu snafu)

Opetovanje varijabli:[uredi | uredi kôd]

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:[uredi | uredi kôd]

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:[uredi | uredi kôd]

[Pravilo]

Kako bi se naznačio izborni (opcionalni) element, sljedeće konstrukcije su istovjetne:

  1. [fubar snafu]
  2. *1(fubar snafu)
  3. 0*1(fubar snafu)

Komentar:[uredi | uredi kôd]

; komentar

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

Prednost operatora[uredi | uredi kôd]

Sljedeći operatori imaju danu prednost od najjačeg do najslabijeg vezanja:

  1. Stringovi, Oblikovanje Imena
  2. Komentari
  3. Opseg vrijednosti
  4. Opetovanje
  5. Grupiranje, Izborni
  6. Nadovezivanje
  7. 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[uredi | uredi kôd]

Osnovna pravila su definirana u ABNF standardu.

Pravilo Formalna definicija Značenje
ALPHA %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 navodnik
SP %x20 znak praznine (engl. space)
HTAB %x09 horizontalni tab
WSP SP / HTAB znak praznine i horizontalni tab
LWSP *(WSP / CRLF WSP) linearna bjelina (nakon znaka za novi red)
VCHAR %x21-7E vidljivi (ispisivi) znakovi
CHAR %x01-7F bilo koji 7-bitni US-ASCII znak, isključujući NUL
OCTET %x00-FF 8 bitova podataka
CTL %x00-1F / %x7F kontrolni znakovi
CR %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 red
BIT "0" / "1"

Primjer[uredi | uredi kôd]

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[uredi | uredi kôd]

  • RFC 4234 Augmented BNF for Syntax Specifications: ABNF
  • RFC 2234 Augmented BNF for Syntax Specifications: ABNF (obsoletno)