Backus-Naur Form: differenze tra le versioni

→‎Varianti: Evidenzia sintassi
(→‎Varianti: Evidenzia sintassi)
In letteratura sono state proposte molte varianti ed estensioni della BNF. In effetti alcune strutture nell'esempio riportato sopra non erano previste dalla BNF originale, ma sono state introdotte in seguito dai progettisti della [[IBM]] per descrivere la sintassi del linguaggio [[PL/1]]. Infatti nella definizione originale della BNF non era previsto né l'uso di più sequenze alternative di simboli separate dal carattere |, né l'uso delle parentesi quadre per identificare simboli opzionali. Per rappresentare queste situazioni era quindi necessario definire differenti regole di produzione per lo stesso simbolo nonterminale a sinistra, una per ciascuna delle sequenze possibili. Comunque queste estensioni, il cui scopo è quello di avere una rappresentazione più chiara e compatta della grammatica, sono riconosciute ormai universalmente come parte integrante della BNF. per rendersi conto del notevole vantaggio, di codice e di chiarezza, che si ottiene utilizzando questi costrutti notiamo che una delle regole di produzione viste sopra:
 
<syntaxhighlight lang="bnf">
:<nowiki><destinatario> ::= [<titolo>] [<nome>|<iniziale>] <cognome> <a capo></nowiki>
</syntaxhighlight>
 
senza i costrutti [] e | richiederebbe ben 6 regole di produzione:
 
<syntaxhighlight lang="bnf">
:<nowiki><destinatario> ::= <cognome> <a capo></nowiki>
:<nowiki><destinatario> ::= <nome> <cognome> <a capo></nowiki>
:<nowiki><destinatario> ::= <inizialenome> <cognome> <a capo></nowiki>
:<nowiki><destinatario> ::= <titoloiniziale> <cognome> <a capo></nowiki>
:<nowiki><destinatario> ::= <titolo> <nome> <cognome> <a capo></nowiki>
:<nowiki><destinatario> ::= <titolo> <inizialenome> <cognome> <a capo></nowiki>
:<nowiki><destinatario> ::= <titolo> <iniziale> <cognome> <a capo></nowiki>
</syntaxhighlight>
 
Invece le vere e proprie varianti o estensioni introducono modifiche più sostanziali, come i [[metacarattere|metacaratteri]] tipici delle [[espressione regolare|espressioni regolari]]. Alcuni esempi sono la [[EBNF]] (Extended Backus-Naur form) e la [[ABNF]] (Augmented Backus-Naur form), che conta, fra le sue applicazioni tipiche, la descrizione dei [[Protocollo di rete|protocolli]] [[Internet Engineering Task Force|IETF]].
366

contributi