Toggle menu
309,8 tis.
57
18
526,9 tis.
Hrvatska internetska enciklopedija
Toggle preferences menu
Toggle personal menu
Niste prijavljeni
Your IP address will be publicly visible if you make any edits.

Povećani Backus-Naurov oblik

Izvor: Hrvatska internetska enciklopedija

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

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:

  1. fu = %x61 ; a
  2. bar = %x62 ; b
  3. 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:

  1. fubar = fu / bar

Inkrementalni izbori:

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:

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

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

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, sa 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:

  1. [fubar snafu]
  2. *1(fubar snafu)
  3. 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:

  1. Stringovi, Oblikovanje Imena
  2. Komentari
  3. Opseg vrijednosti
  4. Opetovanje
  5. Grupiranje, Izborni
  6. Nadovezivanje
  7. Alternativa

Uporaba operatora alternirana sa 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.

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

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

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