EBNF

En komputado, **plivastigita notacio de Backus-Naur** aŭ (laŭ la anglalingva mallongigo) **EBNF** estas sintaksa notacio por formuli senkuntekstan gramatikon, t.e. formala manieron priskribi programlingvojn kaj aliajn formalajn lingvojn. Tiu ĉi notacio havas plivastigitajn sintaksajn rimedojn kompare kun **notacio de Backus-Naur** (**BNF**).

La plej frua EBNF estis origine disvolvita de Niklaus Wirth. Ekzistas pluraj variantoj de EBNF. La Internacia Organizaĵo por Normigado akceptis EBNF kiel normon ([ISO/IEC 14977](http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip)). Tiu ĉi artikolo uzas en ekzemploj la formon de EBNF priskribitan en ISO-normo.

## Bazo 
EBNF estas kodo kiu priskribas gramatikon de komputada lingvo.
EBNF konsistas el finformaj simboloj kaj nefinformaj produktoreguloj kiuj estas limigoj regantaj kiel la finformaj simboloj povas esti kombinitaj en laŭleĝan esprimon.
Ekzemploj de finformaj simboloj estas literoj, ciferoj, interpunkciaj simboloj kaj spacaj signoj.

EBNF difinas produktoregulojn kie sinsekvoj de simboloj estas respektive aplikataj al finformaj kaj ne finformaj simboloj:

 cifero sen nulo = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
 cifero         = "0" | cifero sen nulo ;

Tiu ĉi produktoregulo difinas nefinforman elementon *cifero* kiu troviĝas ĉe la maldekstra flanko de la esprimo.
La vertikala streko reprezentas alternativon kaj la finformoj troviĝas inter citiloj kaj ĉion fermas punktokomo kiu estas la finsimbolo.
Tiel la `cifero` povas esti *0* aŭ `cifero sen nulo`, t.e. *1* aŭ *2* aŭ *3* ktp. ĝis *9*.

La produktoregulo povas ankaŭ enhavi sekvon de finformaj kaj nefinformaj elementoj, ĉiu apartigita per komo:

 dekdu                = "1" , "2" ;
 ducent unu           = "2" , "0" , "1" ;
 tricent dekdu        = "3" , dekdu ;
 dekdu mil decent unu = dekdu , tricent dekdu ;

Esprimoj kiuj povas aperi aŭ ne, troviĝas inter kurbaj krampoj `{ ... }`:

 natura nombro = cifero sen nulo , { cifero } ;

Tiukaze, la ĉenoj *1*, *2*, ...,*10*,...,*12345*,... estas korektaj esprimoj.
Por prezenti tion, ĉio kio troviĝas inter kurbaj krampoj povas esti ripetitaj arbitrafoje, ankaŭ tute ne.

Se la elemento devas aperi almenaŭ unufoje, la norma EBNF sintakso utiligas kurbajn krampojn kun streko `{ ... }-`:

 litero = "a" | "b" | "c" ;
 ĉeno = "'" , { litero }- , "'" ;

Tiel difinita `ĉeno` povas esti:

 'a', 'abc', ktp.

sed ne

 , 'a1c', 'bda' ktp.

Opcio povas esti esprimita per rektaj krampoj `[ ... ]`.
Ĉi, kio troviĝas inter rektaj krampoj povas aperi unu fojon aŭ tute ne:

 entjero = "0" | [ "-" ] , natura nombro ;

Tiel entjero estas nulo (`0`) aŭ natura nombro kiu povas esti antaŭita per nedeviga minussigno.

Por priskribi elementojn kiuj aperas la difinitan nombron da fojoj, oni uzas steleton (`*`):

 dudek du                  = 2 * "2" ;
 trimil tricent tridek tri = 4 * "3" ;

Por esprimi esceptojn, EBNF utiligas strekon (`-`):

 litero = "A" | "B" | "C" | "ĉ" | "D" | "E" | "F"
 | "G" | "Ĝ" | "H" | "Ĥ" | "I" | "J" | "Ĵ"
 | "K" | "L" | "M" | "N" | "O" | "P" | "R"
 | "S" | "Ŝ" | "T" | "U" | "Ŭ" | "V" | "Z" ;
 vokalo = "A" | "E" | "I" | "O" | "U" ;
 konsonanto = litero - vokalo ;

### Tabelo de simboloj 
EBNF uzas la jenajn operatorojn (montritaj laŭ prioritatoj):

La prioritatoj povas esti ŝanĝitaj per jenaj simboloj:

## Ekzemploj 
 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}, "G";
 hh = {aa}-, "H";

Tiel la finformaj ĉenoj difinitaj per la ĉi supraj reguloj estas jenaj:

 aa: A
 bb: AAAB
 cc: C AC AAC AAAC
 dd: D AD AAD AAAD AAAAD ktp.
 ee: AE AAE AAAE AAAAE AAAAAE ktp.
 ff: AAAF AAAAF AAAAAF AAAAAAF
 gg: G AAAG AAAAAAG ktp.
 hh: AH AAH AAAH AAAAH AAAAAH ktp.

## Alternativo 
La normo [ISO/IEC 14977](http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip) difinas ankaŭ alternativajn simbolojn.
Ili estu uzataj se en komputiloj aŭ skribmaŝinoj mankas bazajn simbolojn.
Oni tamen devas uzi aŭ unu aŭ la duan simbolaron en unu dokumento por ne fari konfuzon.

## Referencoj 
* La internacia normo (ISO 14977) difinanta EBNF senpage akirebla kiel [Zip-densigita PDF dosiero](http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip).

Kategorio:Formalaj lingvoj