Backus-Naur Form: differenze tra le versioni

nessun oggetto della modifica
m (Bot: Aggiungo: ms:Bentuk Backus–Naur)
Nessun oggetto della modifica
La '''BNF''' ('''Backus-Naur Form''' o '''Backus Normal Form''') è una [[metasintassi]], ovvero un formalismo attraverso il quale è possibile descrivere la [[sintassi (informatica)|sintassi]] di [[Linguaggio formale (matematica)|linguaggi formali]] (il prefisso ''meta'' ha proprio a che vedere con la natura ''circolare'' di questa definizione). Si tratta di uno strumento molto usato per descrivere, in modo preciso e non ambiguo, la sintassi dei [[linguaggio di programmazione|linguaggi di programmazione]], dei [[protocollo di rete|protocolli di rete]] e così via;, benché non manchino, in letteratura, esempi di sue applicazioni a contesti anche non informatici e addirittura non tecnologici. La BNF viene usata nella maggior parte dei testi sulla teoria dei linguaggi di programmazione (e in molti testi introduttivi su specifici linguaggi).
 
In termini formali, la BNF può essere vista come un formalismo per descrivere [[grammatica libera dal contesto|grammatiche libere dal contesto]].
 
La BNF fu proposta da [[John Backus]] durantenel lacorpo della definizione del linguaggio di programmazione [[ALGOL]]. L'acronimo BNF era inizialmente inteso come '''Backus Normal Form''' ("forma normale di Backus"); su suggerimento di [[Donald Knuth]], fu in seguito riletto come '''Backus-Naur Form''', in onore di [[Peter Naur]], un altro membro del comitato ALGOL e pioniere dei [[linguaggio di programmazione|linguaggi di programmazione]] (e più in particolare della realizzazione di [[compilatore|compilatori]]).
 
== Introduzione ==
Le due forme sono assolutamente equivalenti. La prima forma (che verrà utilizzata nel seguito) utilizza caratteri ASCII standard ed è quella più utilizzata per scrivere grammatiche che devono essere utilizzate dai calcolatori e lette in file di testo. La seconda forma è meno utilizzabile nella pratica ma è comune nei testi e negli articoli di informatica teorica in quanto meglio esprime l'operazione di derivazione delle stringhe di un linguaggio a causa dell'applicazione delle regole di derivazione.
Nelle regole di derivazione <simbolo> (i caratteri < e > sono obbligatori) viene detto un '''simbolo nonterminale''' e __espressione__ è costituita da una o più sequenze di simboli '''terminali''' (vedi sotto) o nonterminali (identificati dal fatto di essere racchiusi tra < >); se le sequenze sono più di unouna esse sono separate dalla barra verticale '|'. La regola esprime il fatto che il nonterminale a sinistra della regola può essere ''sostituito'' da una qualsiasi delle sequenze indicate sulla destra (come chiariremochiarito anel breveseguito). Inoltre in una sequenza alcuni simboli o sottosequenze possono essere indicati come opzionali racchiudendoli fra parentesi quadre.
 
I simboli che non appaiono mai a sinistra di una regola di derivazione sono detti '''terminali'''. I terminali sono in un certo senso il punto di arrivo, perché rappresentano elementi che si troveranno effettivamente in un testo scritto secondo le regole sintattiche che la specifica BNF descrive. I simboli nonterminali, viceversa, sono strumenti utilizzati esclusivamente dalla BNF e sono racchiusi tra <>; si può dire che essi rappresentano gli ''elementi astratti'' della grammatica.
18

contributi