Augmented Backus – Naur forma - Augmented Backus–Naur form
v počítačová věda, rozšířená forma Backus – Naur (ABNF) je metajazyk na základě Backus – Naurova forma (BNF), ale sestávající z vlastních pravidel syntaxe a odvození. Princip motivu pro ABNF je popsat a formální systém jazyka, který má být použit jako obousměrný komunikační protokol. Je definován Internetový standard 68 („STD 68“, typ case sic), který k prosinci 2010[Aktualizace] je RFC 5234, a často slouží jako definiční jazyk pro IETF komunikační protokoly.[1][2]
RFC 5234 nahrazuje RFC 4234 (který nahradil RFC 2234 a RFC 733 ).[3] RFC 7405 aktualizuje jej a přidává syntaxi pro určení řetězcových literálů citlivých na velká a malá písmena.
Přehled
Specifikace ABNF je sada odvozovacích pravidel, psaných jako
pravidlo = definice; komentář CR LF
kde pravidlo je a malá a velká písmena neterminální, definice se skládá ze sekvencí symbolů, které definují pravidlo, komentář k dokumentaci a končí návratem vozíku a posunem řádku.
Názvy pravidel nerozlišují velká a malá písmena: <rulename>
, <Rulename>
, <RULENAME>
, a <rUlENamE>
všichni odkazují na stejné pravidlo. Názvy pravidel se skládají z písmene následovaného písmeny, číslicemi a spojovníky.
Úhelníky (<
, >
) nejsou vyžadovány kolem názvů pravidel (jako jsou v BNF). Mohou však být použity k vymezení názvu pravidla, pokud jsou použity v próze k rozeznání názvu pravidla.
Koncové hodnoty
Terminály jsou specifikovány jedním nebo více numerickými znaky.
Jako znak procenta lze zadat číselné znaky %
, následovaný základnou (b
= binární, d
= desetinné číslo a X
= hexadecimální), následovaná hodnotou nebo zřetězením hodnot (označeno .
). Například návrat vozíku je zadán pomocí % d13
v desítkové nebo % x0D
v šestnáctkové soustavě. Návrat vozíku následovaný posunem řádku lze zadat se zřetězením jako % d13.10
.
Doslovný text je určen pomocí řetězce uzavřeného v uvozovkách ("
). Tyto řetězce nerozlišují velká a malá písmena a použitá znaková sada je (US-) ASCII. Proto řetězec „abc“
bude odpovídat „abc“, „Abc“, „aBc“, „abC“, „ABc“, „AbC“, „aBC“ a „ABC“. RFC 7405 přidána syntaxe pro řetězce citlivé na velká a malá písmena: % s „aBc“
bude odpovídat pouze „aBc“. Před tím bylo možné zadat řetězec citlivý na velká a malá písmena pouze uvedením jednotlivých znaků: pro shodu „aBc“ by definice byla % d97,66,99
. Řetězec lze také explicitně zadat jako malá a velká písmena s % i
předpona.
Operátoři
Prázdné místo
Prázdné místo se používá k oddělení prvků definice; aby byl prostor rozpoznán jako oddělovač, musí být výslovně zahrnut. Explicitní odkaz na jeden znak mezery je WSP
(lineární prázdné místo) a LWSP
je pro nulu nebo více mezer s povolenými novými řádky. The LWSP
definice v RFC5234 je kontroverzní[4] protože k vytvoření oddělovače mezi dvěma poli je potřeba alespoň jeden znak mezery.
Definice jsou zarovnány doleva. Pokud je vyžadováno více řádků (kvůli čitelnosti), jsou pokračovací řádky odsazeny mezerou.
Komentář
; komentář
Středník (;
) spustí komentář, který pokračuje až na konec řádku.
Zřetězení
Pravidlo 1 Pravidlo 2
Pravidlo lze definovat uvedením seznamu názvů pravidel.
Pro shodu řetězce „aba“ lze použít následující pravidla:
fu = % x61 ; A
bar = % x62 ; b
mumlat = fu bar fu
Alternativní
Pravidlo 1 / Pravidlo 2
Pravidlo může být definováno seznamem alternativních pravidel oddělených a solidus (/
).
Přijmout pravidlo fu nebo pravidlo bar, lze sestavit následující pravidlo:
fubar = fu / bar
Přírůstkové alternativy
Pravidlo1 = / Pravidlo2
K pravidlu lze přidat další alternativy pomocí =/
mezi názvem pravidla a definicí.
Pravidlo
sada pravidel = alt1 / alt2 / alt3 / alt4 / alt5
je ekvivalentní k
sada pravidel = alt1 / alt2
sada pravidel =/ alt3
sada pravidel =/ alt4 / alt5
Rozsah hodnot
%C##-##
Rozsah číselných hodnot lze určit pomocí pomlčky (-
).
Pravidlo
OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"
je ekvivalentní k
OCTAL = % x30-37
Sekvenční skupina
(Pravidlo 1 Pravidlo 2)
Prvky mohou být umístěny v závorkách pro seskupení pravidel v definici.
Pro shodu „elem fubar snafu“ nebo „elem tarfu snafu“ lze sestavit následující pravidlo:
skupina = elem (fubar / tarfu) snafu
Pro shodu „elem fubar“ nebo „tarfu snafu“ lze vytvořit následující pravidla:
skupina = elem fubar / tarfu snafu
skupina = (elem fubar) / (tarfu snafu)
Variabilní opakování
n * nPravidlo
K označení opakování prvku, formuláře * prvek
se používá. Volitelné <a>
udává minimální počet prvků, které mají být zahrnuty (s výchozí hodnotou 0). Volitelné <b>
udává maximální počet prvků, které mají být zahrnuty (s výchozím nastavením nekonečna).
Použití *živel
pro nula nebo více prvků, * 1 prvek
pro nulu nebo jeden prvek, 1 * prvek
pro jeden nebo více prvků a 2 * 3element
pro dva nebo tři prvky, srov. regulární výrazy E*
, E?
, e +
a e {2,3}
.
Specifické opakování
nPravidlo
Chcete-li označit explicitní počet prvků, formulář prvek
se používá a je ekvivalentní s * prvek
.
Použití 2DIGIT
získat dvě číslice a 3DIGIT
získat tři číslice. (ČÍSLICE
je definováno níže pod „Základní pravidla ". Viz také PSČ v níže uvedeném příkladu.)
Volitelná sekvence
[Pravidlo]
K označení volitelného prvku jsou ekvivalentní následující konstrukce:
[fubar snafu]
*1(fubar snafu)
0*1(fubar snafu)
Priorita operátora
Následující operátoři mají danou prioritu od nejužší vazby po nejvolnější vazbu:
- Řetězce, tvorba jmen
- Komentář
- Rozsah hodnot
- Opakování
- Seskupení, volitelné
- Zřetězení
- Alternativní
Použití alternativního operátoru se zřetězením může být matoucí a pro vytvoření explicitních skupin zřetězení se doporučuje použít seskupení.
Základní pravidla
Základní pravidla jsou definována ve standardu ABNF.
Pravidlo | Formální definice | Význam |
---|---|---|
ALPHA | % x41-5A /% x61-7A | Velká a malá písmena ASCII (A – Z, a – z) |
ČÍSLICE | % x30-39 | Desetinná čísla (0–9) |
HEXDIG | DIGIT / „A“ / „B“ / „C“ / „D“ / „E“ / „F“ | Šestnáctkové číslice (0–9, A – F, a-f) |
DQUOTE | % x22 | Dvojitá nabídka |
SP | % x20 | Prostor |
HTAB | % x09 | Vodorovná karta |
WSP | SP / HTAB | Mezera a vodorovná karta |
LWSP | * (WSP / CRLF WSP) | Lineární prázdné znaky (za novým řádkem) |
VCHAR | % x21-7E | Viditelné (tiskové) znaky |
CHAR | % x01-7F | Libovolný znak ASCII, kromě NUL |
OKTET | % x00-FF | 8 bitů dat |
CTL | % x00-1F /% x7F | Řízení |
ČR | % x0D | Návrat vozíku |
LF | % x0A | Linefeed |
CRLF | CR LF | Standardní linka na internetu |
BIT | "0" / "1" | Binární číslice |
Příklad
Příklad poštovní adresy uvedený na stránce rozšířeného formuláře Backus – Naur (ABNF) lze zadat takto:
poštovní adresa = část názvu ulice zipová částčást názvu = *(osobní část SP) příjmení [SP přípona] CRLFčást názvu =/ osobní část CRLFosobní část = jméno / (počáteční ".")jméno = *ALPHApočáteční = ALPHApříjmení = *ALPHApřípona = („Jr.“ / „Sr.“ / 1*("Já" / "PROTI" / "X"))ulice = [výstižný SP] číslo domu SP jméno ulice CRLFvýstižný = 1*4ČÍSLICEčíslo domu = 1*8(ČÍSLICE / ALPHA)jméno ulice = 1*VCHARzipová část = název města "," SP Stát 1*2SP PSČ CRLFnázev města = 1*(ALPHA / SP)Stát = 2ALPHAPSČ = 5ČÍSLICE ["-" 4ČÍSLICE]
Úskalí
RFC 5234 přidá varování společně s definicí LWSP takto:
Použití tohoto pravidla lineárního prázdného prostoru povoluje řádky obsahující pouze prázdné znaky, které již nejsou v záhlaví pošty legální a způsobily problémy s interoperabilitou v jiných kontextech. Nepoužívejte při definování záhlaví pošty a používejte opatrně v jiných kontextech.
Reference
- ^ „Oficiální standardy internetového protokolu“. RFC editor. 21. 2. 2010. Archivováno z původního dne 9. února 2010. Citováno 2010-02-21.
- ^ Crocker, D .; Overell, P. (leden 2008). „Augmented BNF for Syntax Specification: ABNF“ (prostý text). RFC editor. p. 16. Citováno 2010-02-21.
- ^ "RFC index". RFC editor. 19. 2. 2010. Archivováno z původního dne 9. února 2010. Citováno 2010-02-21.
- ^ RFC Errata 3096.