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 ).
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).
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> ::= "=" | " < " | " > " …