A Backus–Naur-forma (röviden BNF, más néven Backus–Naur-formalizmus, Backus-normálforma, Bacus–Naur-forma, vagy Pánini–Backus-forma) környezetfüggetlen nyelvtanok leírására használható metaszintaxis: végeredményben formális nyelvek szintaxisa is leírhatók vele.
A BNF széles körben használatos a számítógépek programozási nyelveinek nyelvtanának leírására, ideértve az utasításkészleteket és a kommunikációs protokollokat, valamint egyes természetes nyelvek nyelvtanát is (pl. meter a szanszkrit költészetben). A legtöbb programozási nyelv elméleti leírása és/vagy szemantikai dokumentumai általában BNF-ben vannak leírva.
A BNF-nek több bővítése és változata létezik és van használatban.
A jelölési rendszert John Backus hozta létre az ALGOL nyelvtanának leírására. Az első, 1959-ben, Párizsban megtartott "World Computer Congress"-on mutatta be Backus a rendszerét a "The syntax and semantics of the proposed international algebraic language of the Zurich ACM-GAMM Conference" – a zürichi ACM-GAMM konferencián javasolt a nemzetközi algebrai nyelv szintaxisa és szemantikája – előadásában. A nemzetközi algebrai nyelv leírása később ALGOL 58 néven vált ismertté. Az ismertetett formális nyelv Emil Post produkciós rendszerén alapul. A generatív nyelvtanokat már matematikai módszerekkel többen is tanulmányozták, közöttük Noam Chomsky, aki ezeket a formális leírásokat a természetes nyelvekre is alkalmazta.
Peter Naur később egyszerűsítette Backus jelöléseit, minimalizálta a használt karakterek számát, ezért Donald Knuth javaslatára, a hozzájárulásáért a neve megjelent a jelölési mód elnevezésében.
A Backus–Naur Forma vagy BNF nyelvtanok nagyon hasonlóak a Pánini nyelvtani szabályaihoz, ezért erre a jelölésre gyakran Panini–Backus-forma néven is hivatkoznak.
Egy BNF leírás valójában leszármaztatási szabályok halmaza, amelyeket a következő formában írnak fel:
::=
ahol <szimbólum> egy nemterminális elem, a ::=
jelölés (olvasd: négypont-egyenlő) választja el a szimbólumot a leszármaztatási szabálytól, ami egy kifejezés. Ez a kifejezés tartalmazza a szimbólumok sorozatát és/vagy egymástól a függőleges vonallal ('|') elválasztott sorozatokat (a '|' jel a választást jelenti – olvasd: vagy). A szabály bal oldala valójában azt mutatja, mivel/mikkel helyettesíthető a jobb oldalon álló szimbólum. Az a szimbólum, amely soha sem bukkan fel szabály bal oldalán, az úgynevezett terminális.
A fentiek illusztrálására nézzük meg egy (egyszerűsített) postai cím BNF leírását (pl. 1234 Pusztakotkodács, Kossuth Lajos u. 1):
::= ", " ", " ::= " " | " " ::= ". " | ::= ::= "utca" | "tér" | "körút" | "lépcső" | "u." | "krt." ::= "-" | ::= " "
magyarra fordítva:
Meg kell jegyezni, hogy a fenti leírás nem teljes, hiszen nincsen pontosan definiálva, hogy mit is kell például ország_kód vagy akár irányítószám alatt érteni (annak ellenére, hogy tudjuk, mi is az irányítószám – esetünkben ez elég is). Egy programozási nyelv leírásakor viszont pontosan le kell írni mindent, ezért gyakran úgy kezdődnek a leírások, hogy megadják, mit kell betű alatt érteni, és mit kell szám alatt érteni, mik a fenntartott karakterek (ha vannak), szavak, stb., és csak ezután kezdődik a nyelv szintaxisának leírása.
A BNF szintaxis leírható a BNF saját jelölési módjával, a következők szerint:
::= | ::= "<" ">" "::=" ::= | "|" ::= | ::= | "<" ">" ::= '"' '"' | "'" "'" ::= " " | "" ::= |
Az ""
az üres (azaz 0 karakterből álló) szöveg, tehát a 3. szabály azt jelenti, hogy az
Megjegyzendő, hogy az eredeti BNF nem használt idézőjeleket.
Az
A
A BNF-nek több változata és kiterjesztése létezik, amelyeket vagy leírással kapcsolatos speciális igények, vagy pedig a további egyszerűsítésekre illetve hatékonyságra való törekvések hoztak létre. Közös ezekben a változatokban a reguláris kifejezések ismétlési műveleteinek, mint a *
és a +
használata. Az Extended Backus-Naur form (EBNF) a legismertebb ezek közül. A fenti példa sem felel meg pontosan az "ALGOL 60 report" jelölésmódjának. A [ ]
zárójelek használata néhány évvel később, az IBM PL/I-es nyelvének meghatározásánál kezdődött, de azóta általánosan elfogadottá vált. Az ABNF a másik bővítés, amelyet az IETF használt protokollok leírására.
Parsing expression nyelvtanok is felépíthetők a BNF használatával, és a reguláris kifejezések jelölései is formalizálhatók, mint egy lehetséges osztálya a formális nyelvtanoknak. A BNF használata kevésbé jellemző az analitikus, mint a generatív nyelvtanok leírásánál.
Ma már számos BNF specifikáció található online, amelyek jól olvashatók és nem annyira formálisak. Ezeknél gyakran a következő szintaktikai szabályokat használják, bővítésként:
[]
. ::= { }
.+
) követi.*
) karakterrel jelölik.|
jelek választják el egymástól, például |
.This article uses material from the Wikipedia Magyar article Backus–Naur-forma, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). A lap szövege CC BY-SA 4.0 alatt érhető el, ha nincs külön jelölve. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki Magyar (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.