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). 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):
| 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
- La internacia normo (ISO 14977) difinanta EBNF senpage akirebla kiel Zip-densigita PDF dosiero.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.