Backus-muoto - Naur (lyhennetty BNF , Backus - Naura muoto ) on muodollinen syntaksin kuvausjärjestelmä , jossa jotkin syntaktiset luokat määritellään peräkkäin muiden luokkien kautta. BNF:ää käytetään kuvaamaan yhteydettömiä muodollisia kielioppeja . On olemassa laajennettu muoto Backus - Naura , joka eroaa vain tilavammista malleista.
Käytetään kuvaamaan ohjelmointikielten, tietojen, protokollien (esimerkiksi RFC -dokumenteissa ) jne. syntaksia (sekä kielioppia että tavallista sanastoa, koska tavalliset kieliopit ovat yhteydettömien kielioppien osajoukko ).
Tämän artikkelin terminologia voi poiketa perinteisestä.
BNF-konstruktio määrittelee äärellisen määrän symboleja ( ei -päätteitä ). Lisäksi se määrittelee säännöt merkin korvaamiseksi jollain kirjainsarjalla (päätteellä) ja symboleilla. Kirjainketjun hankintaprosessi voidaan määritellä vaiheittain: aluksi on yksi merkki (merkit on yleensä suljettu kulmasuluissa, eikä niiden nimessä ole mitään tietoa). Sitten tämä symboli korvataan jollakin kirjain- ja symbolisarjalla yhden säännön mukaisesti. Sitten prosessi toistetaan (jokaisessa vaiheessa yksi merkeistä korvataan sarjalla säännön mukaan). Lopulta saadaan ketju, joka koostuu kirjaimista ja ei sisällä symboleja. Tämä tarkoittaa, että tuloksena oleva merkkijono voidaan päätellä aloitusmerkistä.
BNF-rakenne koostuu useista muodon lauseista
<määritettävä merkki> ::= <viimeinen1> | <viimeinen.2> | . . . | <viimeinen.n>sääntöjä kuvailemalla. Tällainen sääntö tarkoittaa, että merkki <определяемый символ>voidaan korvata jollakin sarjoista <посл.n>. Määritelmän merkki näyttää yleensä muodolta ::=tai →, mutta muutkin muunnelmat ovat mahdollisia.
Jotkut erikoismerkit, kuten <пусто>, tarkoittavat jotakin sarjaa (tässä tapauksessa tyhjää).
Tämä on yksinkertainen rakenne, joka koostuu vain yhdestä säännöstä, jonka mukaan merkki <правпосл>voidaan korvata joko tyhjällä välilyönnillä tai samalla merkillä <правпосл>suluissa tai kahdella merkillä <правпосл>peräkkäin.
Kuvaus ifPASCAL-kielioperaattorista laajennetussa BNF:ssä:
<ehdollinen operaattori if> ::= if <boolen lauseke> sitten <operaattori> [else <operaattori>] <looginen lauseke> ::= "EI" <looginen lauseke> | <looginen lauseke> <looginen operaatio> <looginen lauseke> | <lauseke> <vertailuoperaattori> <lauseke> <looginen operaatio> ::= "TAI" | "JA" <lauseke> ::= <muuttuja> | <merkkijono> | <hahmo> <vertailutoiminto> ::= "=" | " < " | " > " …