Toggle menu
310,1 tis.
44
18
525,6 tis.
Hrvatska internetska enciklopedija
Toggle preferences menu
Toggle personal menu
Niste prijavljeni
Your IP address will be publicly visible if you make any edits.

Prošireni Backus-Naurov oblik

Izvor: Hrvatska internetska enciklopedija
Inačica 45020 od 21. kolovoz 2021. u 04:29 koju je unio WikiSysop (razgovor | doprinosi) (Bot: Automatski unos stranica)
(razl) ←Starija inačica | vidi trenutačnu inačicu (razl) | Novija inačica→ (razl)

Prošireni Backus-Naurov oblik (EBNF od engl. extended Backus-Naur form) je proširenje osnovne metasintaksne notacije Backus-Naurovog oblika. Izvorno ju je razvio Niklaus Wirth, najkorištenije inačice EBNF notacije su danas definirane standardima, ponajprije ISO-14977.

Osnove

Kod, npr. izvorni kod računalnog programa, se sastoji od završnih simbola. To su vidljivi znakovi, znamenke, interpunkcijski znakovi, bjeline itd.

EBNF definira pravila produkcija u kojima su slijedovi simbola odgovarajuće dodijeljeni nezavršnim simbolima:

znamenka bez nule    = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
znamenka             = "0" | znamenka bez nule ;

Ovo produkcijsko pravilo definira nezavršni simbol znamenka koji je na lijevoj strani dodjele. Uspravna crta predstavlja alternativu (mogućnost izbora), dok su završni simboli zatvoreni u navodnike nakon kojih slijedi točka-zarez kao terminirajući znak. Stoga je znamenka ili 0 ili znamenka bez nule, koja pak može biti 1 ili 2 ili 3 i tako dalje sve do 9.

Produkcijsko pravilo također može uključivati slijed završnih ili nezavršnih simbola, svaki razdvojen zarezom:

dvanaest                              = "1" , "2" ;
dvije stotine i jedan                 = "2" , "0" , "1" ;
tri stotine i dvanaest                = "3" , dvanaest ;
dvanaest tisuća dvije stotine i jedan = dvanaest , dvije stotine i jedan ;

Izrazi koji mogu biti izostavljeni ili opetovani mogu biti predstavljeni vitičastim zagradama { ... }:

prirodni broj = znamenka bez nule , { znamenka } ;

U ovom slučaju su stringovi 1, 2, ...,10, ..., 12345, ... svi odreda ispravni. Valja imati na umu dakle, da sve što je zapisano unutar vitičastih zagrada može biti opetovano proizvoljnom učestalošću, ali se može i pojaviti nijednom.

Izbor može biti predstavljen uglatim zagradama [ ... ]:

cijeli broj = "0" | [ "-" ] , prirodni broj ;

Stoga cijeli broj je nula (0) ili prirodni broj koji može biti prethođen izbornim znakom minusa.

EBNF također između ostaloga pruža i sintaksu za opis opetovanja predodređen broj puta, za isključivanje nekog dijela produkcije ili umetanje komentara u EBNF gramatiku.

Proširenja koja propisuje ISO

Sudeći po ISO 14977 standardu, EBNF je namijenjen da bude proširiv, i dva su mehanizma u tu svrhu spomenuta. Prvi je dio EBNF gramatike, posebni slijed, koji predstavlja tekst unutar upitnika, i čija je interpretacija izvan djelokruga EBNF standarda. Na primjer, znak razmaka se može definirati sljedećim pravilom:

razmak = ? US-ASCII znak 32 ?;

Drugi je mehanizam činjenica da zagrade ne mogu u EBNF biti smještene pored identifikatora. Sljedeće nije vrijedeći EBNF:

nešto = foo ( bar );

Stoga proširenje EBNF notacije može koristiti takav sustav oznaka. Na primjer, u Lispovoj gramatici, aplikacija funkcije može biti definirana sljedećim produkcijskim pravilom:

aplikacija funkcije = list( simbol , [ { izraz } ] );

Motivacija za proširenje BNF sustava oznaka

BNF je imao taj problem što izbori (opcije) i ponavljanja nisu mogli biti izravno izraženi. Umjesto toga, zahtijevali su uporabu međupravila ili alternativne produkcije definirane ili kao prazna produkcija ili kao izborna produkcija za izbor, odnosno ili kao opetovana produkcija ili sama, rekurzivno, za ponavljanje. Isti konstrukti mogu još uvijek biti korišteni u EBNF.

Izbor:

broj s predznakom = [ predznak ] , broj ;

se u BNF stilu može definirati kao:

broj s predznakom = predznak , broj | broj ;

ili

broj s predznakom = izborni predznak , broj ;
izborni predznak =  | predznak ; (*  se koristi za očitije označavanje prazne produkcije *)

Opetovanje:

broj = { znamenka } ;

može biti definirano u BNF-stilu kao:

broj = znamenka | broj znamenka;

Drugi dodaci i modifikacije

EBNF eliminira neke od BNF nedostataka:

  • BNF koristi simbole (, , |, ::=) za sebe. Kada se oni pojave u jeziku koji se definira, BNF se ne može koristiti bez modifikacija i objašnjenja,
  • BNF sintaksa može predstaviti samo jedno produkcijsko pravilo u jednoj liniji.

EBNF rješava ove probleme:

  • Završni simboli su strogo zatvoreni unutar navodnika ("..." ili '...'). Uglate zagrade (...) za nezavršne simbole mogu biti izostavljene.
  • Terminirajući znak, obično točka-zarez, označava kraj produkcijskog pravila.

Nadalje, postoje dodatni mehanizmi za poboljšanja, poput onih za definiranje broja ponavljanja, isključujuće alternative (npr. sve znakove osim navodnika), komentare itd.

Unatoč svim poboljšanjima, EBNF nije "moćniji" od BNF sustava oznaka u smislu jezika koji može definirati. Ustvari bilo koja gramatika koja može biti definirana u EBNF se može predstaviti i u BNF sustavu oznaka. Međutim, takvo nešto vodi ka znatno većem zapisu pravila gramatike.

EBNF je standardizirala Međunarodna organizacija za standardizaciju tijela pod kodom ISO/IEC 14977:1996(E).

Pod nekim okolnostima se bilo koja proširena BNF notacija može zvati EBNF. Na primjer, W3C koristi jednu takvu EBNF notaciju za specificiranje sintakse XML-a.

Povezani rad

Vidi još

Izvori

  • Roger S. Scowen: Extended BNF — A generic base standard. Software Engineering Standards Symposium 1993.

Vanjske poveznice