Tvar Backus - Naura

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 4. dubna 2016; kontroly vyžadují 8 úprav .

Backus forma - Naur (zkr. BNF , Backus  - Naura forma ) je formální systém popisu syntaxe , ve kterém jsou některé syntaktické kategorie postupně definovány prostřednictvím jiných kategorií. BNF se používá k popisu bezkontextových formálních gramatik . Existuje rozšířená forma Backus - Naura , lišící se pouze prostornějším provedením.

Používá se k popisu syntaxe programovacích jazyků, dat, protokolů (například v dokumentech RFC ) atd. (jak gramatiky, tak běžné slovní zásoby, protože regulární gramatiky jsou podmnožinou bezkontextových ).

Popis

Terminologie tohoto článku se může lišit od tradiční.

Konstrukce BNF definuje konečný počet symbolů ( neterminálů ). Kromě toho definuje pravidla pro nahrazení znaku nějakou posloupností písmen (terminálů) a symbolů. Proces získávání řetězce písmen lze definovat ve fázích: zpočátku je zde jeden znak (znaky jsou obvykle uzavřeny v lomených závorkách a jejich jméno nenese žádnou informaci). Poté je tento symbol nahrazen nějakou sekvencí písmen a symbolů, podle jednoho z pravidel. Poté se proces opakuje (v každém kroku je jeden ze znaků nahrazen sekvencí podle pravidla). Nakonec se získá řetězec, který se skládá z písmen a neobsahuje symboly. To znamená, že výsledný řetězec lze odvodit z počátečního znaku.

Konstrukce BNF se skládá z několika vět formuláře

<znak, který bude definován> ::= <poslední1> | <poslední.2> | . . . | <poslední.n>

popisující pravidla. Takové pravidlo znamená, že znak <определяемый символ>může být nahrazen jednou ze sekvencí <посл.n>. Znaménko definice obvykle vypadá jako ::=nebo →, ale jsou možné i jiné varianty.

Některé speciální znaky, například <пусто>, znamenají nějakou sekvenci (v tomto případě prázdnou).

Příklady konstrukcí

<rightseq> ::= <prázdné> | (<rightseq>) | <rightlast><rightlast>

Jedná se o jednoduchou konstrukci, skládající se pouze z jednoho pravidla, které říká, že znak <правпосл>může být nahrazen buď prázdným místem, nebo stejným znakem <правпосл>uzavřeným v závorkách, nebo dvěma znaky za <правпосл>sebou.

Popis ifoperátoru jazyka PASCAL v rozšířeném BNF:

<podmíněný operátor if> ::= if <booleovský výraz> then <operátor> [else <operátor>] <booleovský výraz> ::= "NE" <booleovský výraz> | <booleovský výraz> <logická operace> <logický výraz> | <výraz> <porovnávací operátor> <výraz> <logická operace> ::= "NEBO" | "A" <výraz> ::= <proměnná> | <řetězec> | <znak> <porovnávací operace> ::= "=" | " < " | " > " …