EBNF

A Programozás Wiki wikiből

BNF kiterjesztése

A következő elemeket tartalmaza még:

[ ]    opcionális elemek felsorolása
( )    elemek egységbe zárása
{ }    elemek tetszőleges számú ismétlése
(* *)  megjegyzés
? ?    nem formális megadás.
-      kivétel
*      ismétlések számának megadása pl: <3dbA> ::= 3 * "A"

példák:

BNF-ben definiált egész számok:

<egész szám>            ::= <számjegy> | <nem nulla számjegy> <számjegyek>
<nem nulla számjegy>    ::= ”1” | ”2” | ”3” | ”4” | ”5” | ”6” | ”7” | ”8” | ”9”
<számjegy>              ::= <nem nulla számjegy> | ”0”
<számjegyek>            ::= <számjegy> | <számjegy> <számjegyek>

EBNF-ben lehetséges megadásai:

<egész szám>            ::= <számjegy> | <nem nulla számjegy> { <számjegy> }
<nem nulla számjegy>    ::= ? 1..9 ?
<számjegy>              ::= ? 0..9 ?

még egyszerűbb:

<egész szám>            ::= ”0” | ? 1..9 ? { ? 0..9 ? }

Előjeles

<előjeles egész szám>   ::= [ "-" ] ( <számjegy> | <nem nulla számjegy> { <számjegy> } )
<nem nulla számjegy>    ::= ? 1..9 ?
<számjegy>              ::= ? 0..9 ?


A ? ? használata kényelmes. Azonban nem szabad elfelejteni, hogy szintaxis elemzők implementálásánál mindent részletesen, és egyértelműen ki kell fejteni. Emellett, ezek egyéni elképzelések is lehetnek, azaz lehetséges hibák forrása.