Ugrás a tartalomhoz

Szerkesztő:Beginner 25/UFT-32

A Wikipédiából, a szabad enciklopédiából

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]

Lásd még

[szerkesztés]

References

[szerkesztés]
  • Roger S. Scowen: Extended BNF — A generic base standard. Software Engineering Standards Symposium 1993.

Külső, angol nyelvű linkek

[szerkesztés]