Szerkesztő:Beginner 25/UFT-32
A bővített Backus–Naur forma - Extended Backus-Naur form (EBNF) az alap Backus–Naur forma (BNF) egy bővítése a metaszintaxis jelölésére. Eredetileg Niklaus Wirth fejlesztette ki, és az EBNF-t szabványok is meghatározzák, többek között az ISO-14977.
Alapok
[szerkesztés]A kód, pontosabban a számítógépes program forrás kódja terminális szimbólumokat tartalmaz. Ezek a látható karakterek, számok, elválasztó jelek, szóköz karakterek, stb.
Az EBNF által meghatározott leszármaztatási szabályok, amelyek leírják a szimbólumok sorrendjét, végeredményben nem-termináliso(ka)t rendelnek a terminálisokhoz :
szám nulla nélkül= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; szám = "0" | szám nulla nélkül;
Ez a leszármaztatási szabály meghatározza a bal oldalon lévő nem-terminális szám-ot egy hozzárendeléssel. A függőleges vonal egy alternatívát jelöl, a terminális szimbólumokat pedig idézőjelek fogják közre, a szabály záró karaktere pedig a pontosvessző. Ezek szerint egy Szám vagy egy 0 vagy egy szám nulla nélkül ami lehet 1 vagy 2 vagy 3 és igy tovább, egészen 9-ig.
A leszármaztatási szabály terminális vagy nem-terminális elemek egymástól vesszővel elválasztott sorozatát is meghatározhatja:
tizenkettő = "1" , "2" ; kettőszáz-egy = "2" , "0" , "1" ; háromszáz-tizenkettő = "3" , tizenkettő ; tizenkétezer-kettőszáz-egy = tizenkettő , kettőszáz-egy ;
Az elhagyható vagy ismételhető kifejezéseket kapcsos zárójelek határolják { ... }:
természetes szám = szám nulla nélkül, { szám } ;
Fenti meghatározás alapján az 1, 2, ...,10,...,12345,... sorozatok helyes kifejezések. To represent this, everything that is set within the curly braces may be repeated arbitrarily often, including not at all.
Az opciót a szögletes zárojelek jelzik [ ... ]:
egész = "0" | [ "-" ] , természetes szám ;
tehát egy egész a nulla (0) vagy egy természetes szám amit előtt egy (opcionális) negativ előjel lehet.
EBNF also provides, among other things the syntax to describe repetitions of a specified number of time, to exclude some part of a production or to insert comments in an EBNF grammar.
ISO szerinti bővítések
[szerkesztés]Az ISO 14977 szerinti szabványos EBNF bővíthető, és két fontos tulajdonsággal bír. Ezek közül az első az, hogy megengedi kérdőjelek közötti tetszés szerinti szöveg használatát, amelynek az értelmezése kívül esik az EBNF szabványon. Például, a szóköz karakter definiálhatjuk a következő szabállyal:
szóköz = ? US-ASCII karakter 32 ?;
A második tulajdonság, hogy a zárójelek nem következhetnek közvetlenül egy azonosító után, ezért a következő szabály érvénytelen az EBNF-ben:
valami = foo ( bar );
Ezzel a bővitéssel az EBNF használható, mint jelölő nyelv. Például, a LISP nyelvtanánál, egy függvény alkalmazás a következő szabállyal definiálható:
függvény alkalmazás = lista( szimbólum , [ { kifejezés } ] );
A BNF bővítésének okai
[szerkesztés]A BNF jelölési rendszerében nem megoldott az opciók és az ismétlések direkt módon való kifejezése. Instead, they needed the use of an intermediate rule or alternative production defined to be either nothing or the optional production for option, or either the repeated production or itself, recursively, for repetition. The same constructs can still be used in EBNF.
Opció:
előjeles szám = [ előjel ] , szám ;
a BNF szerű jelölésekkel:
előjeles szám = előjel , szám | szám ;
vagy
előjeles szám = opcionális előjel, szám ; opcionális előjel = ε | előjel ; (* epsilon is used to denote more clearly an empty production *)
Ismétlődés:
szám = { számjegy } ;
ugyanez BNF szerúen:
szám = számjegy | szám számjegy;
Other additions and modifications
[szerkesztés]The EBNF eliminates some of the BNF's flaws:
- The BNF uses the symbols (<, >, |, ::=) for itself. When these appear in the language that is to be defined, the BNF can not be used without modifications and explanation.
- A BNF-syntax can only represent a rule in one line.
The EBNF solves these problems:
- Terminals are strictly enclosed within quotation marks ("..." or '...'). The angle brackets ("<...>") for nonterminals can be omitted.
- A terminating character, usually a semicolon marks the end of a rule.
Furthermore there are mechanisms for enhancements, defining the number of repetitions, excluding alternatives (e.g. all characters excluding quotation marks), comments etc. provided.
Despite all enhancements, the EBNF is not "more powerful" than the BNF in the sense of the language it can define. As a matter of principle any grammar defined in EBNF can also be represented in BNF. However this often leads to a considerably larger representation.
The EBNF has been standardized by the ISO under the code ISO/IEC 14977:1996(E).
Under some circumstances any extended BNF is referred to as EBNF. For example the W3C uses one EBNF to specify XML.
Another example
[szerkesztés]A simple programming language that only allows assignments can be defined in EBNF as follows:
(* a simple program in EBNF − Wikipedia *) program = 'PROGRAM' , white space , identifier , white space , 'BEGIN' , white space , { assignment , ";" , white space } , 'END' "." ; identifier = alphabetic character , [ { alphabetic character | digit } ] ; number = [ "-" ] , digit , [ { digit } ] ; string = '"' , { all characters − '"' } , '"' ; assignment = identifier , ":=" , ( number | identifier | string ) ; alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" ; digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; white space = ? white space characters ? ; all characters = ? all visible characters ? ;
A syntactically correct program then would be:
PROGRAM DEMO1 BEGIN A0:=3; B:=45; H:=-100023; C:=A; D123:=B34A; BABOON:=GIRAFFE; TEXT:="Hello world!"; END.
The language can easily be extended with control flows, arithmetical expressions and Input/Output instructions. Then a small, usable programming language would be developed.
The following characters that are proposed in the standard as normal representation have been used:
Használata | Jelölése |
---|---|
meghatározás | = |
egyesités | , |
lezárás | ; |
elválasztás | | |
opció | [ ... ] |
ismétlés | { ... } |
csoportositás | ( ... ) |
kettős idézőjel | " ... " |
sima idézőjel | ' ... ' |
magyarázat | (* ... *) |
különleges sorozat | ? ... ? |
kivétel | - |
Konvenciók
[szerkesztés]1. A következő konvenciók vannak használatban:
- Az EBNF bármilyen meta-azonositóját egy vagy több, egymástólkötőjellel elválasztott szavakkal irható le;
- Egy "-szimbólum" ("-symbol") végződésű meta-azonositó név terminális szimbólum a EBNF-ben.
2. A normál karakterek által reprezentált EBNF operátorok és azok precedenciái a következők (precedenciák felülrúl lefelé csökkenek):
* ismétlési-szimbólum (repetition-symbol) - ivétel-szimbólum (except-symbol) , egyesitési-szimbólum (concatenate-symbol) | definition-separator-symbol = defining-symbol ; terminator-symbol
3. The normal precedence is over-ridden by the following bracket pairs:
´ first-quote-symbol first-quote-symbol ´ " second-quote-symbol second-quote-symbol " (* start-comment-symbol end-comment-symbol *) ( start-group-symbol end-group-symbol ) [ start-option-symbol end-option-symbol ] { start-repeat-symbol end-repeat-symbol } ? special-sequence-symbol special-sequence-symbol ?
As examples, the following syntax-rules illustrate the facilities for expressing repetition:
aa = "A"; bb = 3 * aa, "B"; cc = 3 * [aa], "C"; dd = {aa}, "D"; ee = aa, {aa}, "E"; ff = 3 * aa, 3 * [aa], "F"; gg = {3 * aa}, "D";
Terminal-strings defined by these rules are as follows:
aa: A bb: AAAB cc: C AC AAC AAAC dd: D AD AAD AAAD AAAAD etc. ee: AE AAE AAAE AAAAE AAAAAE etc. ff: AAAF AAAAF AAAAAF AAAAAAF gg: D AAAD AAAAAAD etc.
Kapcsolódó témák
[szerkesztés]- The W3C used a different EBNF to specify the XML syntax.
- The British Standards Institute published a standard for an EBNF: BS 6154 in 1981.
- The IETF uses Augmented BNF (ABNF), specified in RFC 2234.
Lásd még
[szerkesztés]- Augmented Backus-Naur form
- Backus–Naur forma
- Szabályos kifejezések
- Spirit Parser Framework
- Wirth Syntax Notation
References
[szerkesztés]- Niklaus Wirth: What can we do about the unnecessary diversity of notation for syntactic definitions? CACM, Vol. 20, Issue 11, November 1977, pp. 822-823.
- Roger S. Scowen: Extended BNF — A generic base standard. Software Engineering Standards Symposium 1993.
- The International standard (ISO 14977) that defines the EBNF is now freely available as zipped pdf file.
Külső, angol nyelvű linkek
[szerkesztés]- Article "EBNF: A Notation to Describe Syntax (PDF)" by Richard E. Pattis describing the functions and syntax of EBNF
- Article "BNF and EBNF: What are they and how do they work?" by Lars Marius Garshol
- Article "The Naming of Parts" by John E. Simpson
- ISO/IEC 14977 : 1996(E)
- RFC 2234 - Augmented BNF for Syntax Specifications: ABNF
- BNF/EBNF variants - a table by Pete Jinks comparing several syntaxes.