[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 530.   Notazione BNF

In molti documenti si usa la «notazione BNF» per mostrare la sintassi di qualcosa, particolarmente quando si tratta della descrizione formale dei linguaggi di programmazione. La sigla BNF sta per Backus Naur form, a ricordare che si tratta di una notazione introdotta da John Backus e Peter Naur, tra il 1959 e il 1960.

530.1   BNF essenziale

La notazione BNF utilizza pochi simboli per attribuire un significato a ciò che descrive:

Simbolo Significato
::=
Si legge come: «è definito da». Sta a indicare che l'oggetto alla sinistra di tale simbolo viene definito come ciò che si trova alla destra di questo.
|
Si legge come: «oppure». Sta a indicare che può essere usato l'oggetto che sta a sinistra del simbolo, oppure quello a destra, indifferentemente.
<nome>
Indica il nome di una categoria. Il nome può essere scritto senza vincoli particolari.
x
Qualunque cosa sia scritta al di fuori delle parentesi angolari (<, >), escludendo altri simboli di cui sia stato dichiarato il significato, va interpretata letteralmente (come parola chiave).

A titolo di esempio, viene mostrata la definizione di una lettera dell'alfabeto latino, suddividendo il problema, definendo cosa sono le lettere latine minuscole e cosa sono le lettere latine maiuscole:

<lettera_alfabeto_latino> ::=
      <lettera_alfabeto_latino_maiuscola>
    | <lettera_alfabeto_latino_minuscola>
<lettera_alfabeto_latino_maiuscola> ::=
          A | B | C | D | E | F | G | H | I | J | K | L | M | N | O
    | P | Q | R | S | T | U | V | W | X | Y | Z
<lettera_alfabeto_latino_minuscola> ::=
          a | b | c | d | e | f | g | h | i | j | k | l | m | n | o
    | p | q | r | s | t | u | v | w | x | y | z

530.2   Estensioni usuali

Di fatto, la notazione BNF viene usata estendendo leggermente la simbologia, per semplificarne la lettura ed evitare ambiguità, ma a volte la simbologia viene anche cambiata leggermente.

Simbolo Significato
[...]
Le parentesi quadre vengono usate normalmente per delimitare una porzione facoltativa della dichiarazione.
{...}
Le parentesi graffe vengono usate normalmente per delimitare una porzione necessaria della dichiarazione, che però, per qualche ragione, va intesa come un blocco unito. A volte, l'inclusione tra parentesi graffe va intesa come la possibilità di ripetere indefinitamente il suo contenuto, ma per questo, di solito si aggiungono tre puntini di sospensione in coda.
...
Tre puntini di sospensione vengono usati per indicare una porzione della dichiarazione che può essere ripetuta.
"..."
'...'
Una coppia di apici doppi o singoli, può essere usata per delimitare qualcosa che va inteso letteralmente e non va confuso con la simbologia usata per la notazione BNF.
nome
I nomi di qualcosa potrebbero essere annotati senza le parentesi angolari, se si usa una forma tipografica particolare per evidenziarli (per esempio in corsivo o in nero, rispetto a un testo normale per ciò che va inteso letteralmente).

Segue un esempio molto semplice, dove si vede l'uso delle parentesi quadre, graffe e dei puntini di sospensione, per descrivere un'istruzione condizionale di un certo linguaggio, senza però entrare troppo nel dettaglio:

<istruzione_condizionale> ::= IF <espressione_logica>
                                  THEN
                                      <sequenza_di_istruzioni>
                                [ ELSE
                                      <sequenza_di_istruzioni> ]
                              END FI

<sequenza_di_istruzioni> ::= { <istruzione> | <commento> | <riga_bianca> }...

Segue lo stesso esempio, modificato in modo da evidenziare i nomi di categoria, evitando così l'uso delle parentesi angolari:

istruzione_condizionale ::= IF espressione_logica
                            THEN
                                sequenza_di_istruzioni
                          [ ELSE
                                sequenza_di_istruzioni ]
                        END FI

sequenza_di_istruzioni ::= { istruzione | commento | riga_bianca }...

530.3   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome notazione_bnf.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!