EBNF: Malsamoj inter versioj

El Vikipedio, la libera enciklopedio
[kontrolita revizio][kontrolita revizio]
Enhavo forigita Enhavo aldonita
formatigo de titoloj, +Projektoj, kosmetikaj ŝanĝoj
Linio 1: Linio 1:
En [[komputado]], '''Plivastigita notacio de Backs-Naur Formo (EBNF)''' estas familio de sintaksa notacio por esprimi senkuntekstan gramatikon, t.e. formalan manieron priskribi [[programlingvoj|programlingvojn]] kaj aliajn formalajn lingvojn. Ili estas plivastigitaj formoj de Backs-Naur Formo (BNF).
En [[komputado]], '''Plivastigita notacio de Backs-Naur Formo (EBNF)''' estas familio de sintaksa notacio por esprimi senkuntekstan gramatikon, t.e. formalan manieron priskribi [[programlingvoj|programlingvojn]] kaj aliajn formalajn lingvojn. Ili estas plivastigitaj formoj de Backs-Naur Formo (BNF).


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

==Bazo==


== Bazo ==
EBNF estas kodo kiu priskribas gramatikon de komputada lingvo.
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.
EBNF konsistas el finformaj simboloj kaj nefinformaj produktoreguloj kiuj estas limigoj regantaj kiel la finformaj simboloj povas esti kombinitaj en laŭleĝan esprimon.
Linio 44: Linio 43:


<nowiki>''</nowiki>, 'a1c', 'bda' ktp.
<nowiki>''</nowiki>, 'a1c', 'bda' ktp.

Opcio povas esti esprimita per rektaj krampoj <code>[ ... ]</code>.
Opcio povas esti esprimita per rektaj krampoj <code>[ ... ]</code>.
Ĉi, kio troviĝas inter rektaj krampoj povas aperi unu fojon aŭ tute ne:
Ĉi, kio troviĝas inter rektaj krampoj povas aperi unu fojon aŭ tute ne:
Linio 66: Linio 65:
konsonanto = litero - vokalo ;
konsonanto = litero - vokalo ;


=== Tabelo de simboloj ===

===Tabelo de simboloj===

EBNF uzas la jenajn operatorojn (montritaj laŭ prioritatoj):
EBNF uzas la jenajn operatorojn (montritaj laŭ prioritatoj):


{| class="wikitable"
{| class="wikitable"
|-
|-
! simbolo !! funkcio
! simbolo !! funkcio
|-
|-
| <code>*</code> || obligosimbolo
| <code>*</code> || obligosimbolo
Linio 92: Linio 89:
{| class="wikitable"
{| class="wikitable"
|-
|-
! simbolo !! funkcio
! simbolo !! funkcio
|-
|-
| <code>'...'</code> || finforma esprimo (unua formo)
| <code>'...'</code> || finforma esprimo (unua formo)
Linio 109: Linio 106:
|}
|}


==Ekzemploj==
== Ekzemploj ==

aa = "A";
aa = "A";
bb = 3 * aa, "B";
bb = 3 * aa, "B";
Linio 131: Linio 127:
hh: AH AAH AAAH AAAAH AAAAAH ktp.
hh: AH AAH AAAH AAAAH AAAAAH ktp.


==Alternativo==
== Alternativo ==

La normo [http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip ISO/IEC 14977] difinas ankaŭ alternativajn simbolojn.
La normo [http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip ISO/IEC 14977] difinas ankaŭ alternativajn simbolojn.
Ili estu uzataj se en komputiloj aŭ skribmaŝinoj mankas bazajn simbolojn.
Ili estu uzataj se en komputiloj aŭ skribmaŝinoj mankas bazajn simbolojn.
Linio 141: Linio 136:
! priskribo !! baza simbolo !! alternativa simbolo
! priskribo !! baza simbolo !! alternativa simbolo
|-
|-
| kunmeto || <code>,</code> (komo) ||
| kunmeto || <code>,</code> (komo) ||
|-
|-
| difino || <code>=</code> (egalsigno) ||
| difino || <code>=</code> (egalsigno) ||
Linio 161: Linio 156:
| fino de grupigo || <code>(</code> (fina krampo) ||
| fino de grupigo || <code>(</code> (fina krampo) ||
|-
|-
| komenco de komento || <code>(*</code> (komenca krampo, steleto) ||
| komenco de komento || <code>(*</code> (komenca krampo, steleto) ||
|-
|-
| fino de komento || <code>*)</code> (steleto, fina krampo) ||
| fino de komento || <code>*)</code> (steleto, fina krampo) ||
|-
|-
| komenco de opcio || <code>[</code> (komenca rekta krampo) || <code>(/</code> (komenca krampo, oblikva streko)
| komenco de opcio || <code>[</code> (komenca rekta krampo) || <code>(/</code> (komenca krampo, oblikva streko)
Linio 178: Linio 173:
|}
|}


==Referencoj==
== Referencoj ==

* La internacia normo ([http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=26153 ISO 14977]) difinanta EBNF senpage akirebla kiel [http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip Zip-densigita PDF dosiero].
* La internacia normo ([http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=26153 ISO 14977]) difinanta EBNF senpage akirebla kiel [http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip Zip-densigita PDF dosiero].

{{Projektoj}}


[[Kategorio:Formalaj lingvoj]]
[[Kategorio:Formalaj lingvoj]]

Kiel registrite je 13:57, 30 sep. 2019

En komputado, Plivastigita notacio de Backs-Naur Formo (EBNF) estas familio de sintaksa notacio por esprimi senkuntekstan gramatikon, t.e. formalan manieron priskribi programlingvojn kaj aliajn formalajn lingvojn. Ili estas plivastigitaj formoj de Backs-Naur Formo (BNF).

La plej frua EBNF estis origine disvolvita de Niklaus Wirth. Ekzistas pluraj variantoj de EBNF. La Internacia Organizo por Normigado adaptis EBNF kiel normo (ISO/IEC 14977). Tiu ĉi artikolo uzas en ekzemploj, 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 0cifero sen nulo, t.e. 123 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):

simbolo funkcio
* obligosimbolo
- esceptosimbolo
, kunmetosimbolo
| simbolo de difinoapartigo
= difinosimbolo
; finsimbolo

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

simbolo funkcio
'...' finforma esprimo (unua formo)
"..." finforma esprimo (dua formo)
(* ... *) komento
( ... ) grupigo
[ ... ] opcio
{ ... } ripeto
? ... ? speciala esprimo

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 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.

priskribo baza simbolo alternativa simbolo
kunmeto , (komo)
difino = (egalsigno)
escepto - (streko, minussigno)
obligo * (steleto)
fino ; (punktokomo) . (punkto)
citilo (unua formo) ' (apostrofo)
citilo (dua formo) " (duobla apostrofo)
difinoapartigo | (vertikala streko) / (oblikva streko) aŭ ! (krisigno)
komenco de grupigo ( (komenca krampo)
fino de grupigo ( (fina krampo)
komenco de komento (* (komenca krampo, steleto)
fino de komento *) (steleto, fina krampo)
komenco de opcio [ (komenca rekta krampo) (/ (komenca krampo, oblikva streko)
fino de opcio ] (fina rekta krampo) /) (oblikva streko, fina krampo)
komenco de ripeto { (komenca kurba krampo) (: (komenca krampo, dupunkto)
fino de ripeto } (fina kurba krampo) :) (dupunkto, fina krampo)
komenco de speciala esprimo ? (demandosigno)
fino de speciala esprimo ? (demandosigno)

Referencoj