EBNF: Malsamoj inter versioj

El Vikipedio, la libera enciklopedio
[kontrolita revizio][kontrolita revizio]
Enhavo forigita Enhavo aldonita
e robota aldono de: es:BNF extendido
Addbot (diskuto | kontribuoj)
e Roboto: Forigo de 16 interlingvaj ligiloj, kiuj nun disponas per Vikidatumoj (d:q1165219)
Linio 184: Linio 184:
[[Kategorio:Formalaj lingvoj]]
[[Kategorio:Formalaj lingvoj]]


[[ca:Forma de Backus i Naur Ampliada]]
[[cs:Rozvinutá Backusova-Naurova forma]]
[[de:Erweiterte Backus-Naur-Form]]
[[en:Extended Backus–Naur Form]]
[[es:BNF extendido]]
[[fr:Extended Backus-Naur Form]]
[[hr:Prošireni Backus-Naurov oblik]]
[[hy:ԲՆԸՁ]]
[[it:EBNF]]
[[ja:EBNF]]
[[nl:EBNF]]
[[pl:Notacja EBNF]]
[[ru:Расширенная форма Бэкуса — Наура]]
[[sr:Проширена Бекус-Наурова форма]]
[[sr:Проширена Бекус-Наурова форма]]
[[tr:EBNF Genişletilmiş Backus-Naur formu]]
[[uk:Розширена нотація Бекуса-Наура]]
[[zh:扩展巴科斯范式]]

Kiel registrite je 17:48, 4 apr. 2013

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