1.1 Notazione

Le descrizioni dell'analisi lessicale e della sintassi, utilizzano una notazione per le grammatiche BNF. Utilizzano il seguente stile di definizione:

name:           lc_letter (lc_letter | "_")*
lc_letter:      "a"..."z"

La prima riga dice che un "nome", name, è una "lettera_minuscola", lc_letter, seguita da una sequenza di zero o più altre "lettere_minuscole", lc_letter, o caratteri di sottolineatura. Una "a" è un singolo carattere dell'alfabeto da "a" a "z". (Queste regole aderiscono alle definizioni delle regole lessicali e grammaticali in questo documento.)

Ogni regola inizia con un nome (che è lo stesso nome definito dalla regola) e un punto. Una sbarra verticale (|) viene usata per separare le alternative; è l'operatore con la precedenza più bassa in questa notazione. Un asterisco (*) significa zero o più ripetizioni dell'oggetto precedente, un più (+) significa una o più ripetizioni e una frase racchiusa tra parentesi quadre ([ ]) significa zero o una occorrenza (in altre parole, la frase è facoltativa). Gli operatori * e + si applicano il più strettamente possibile (in termini di numero di oggetti); le parentesi tonde vengono utilizzate per raggruppare (un gruppo si comporta come un singolo oggetto). Le stringhe costanti letterali sono incluse tra caratteri di quotatura. Gli spazi hanno solo il significato di separare i token. Le regole vengono normalmente contenute in una singola riga; le righe con molte alternative possono essere formattate alternativamente facendo iniziare tutte le righe dopo la prima con una sbarra verticale.

Nelle definizioni lessicali (come nell'esempio sopra), vengono utilizzate due ulteriori convenzioni. Due caratteri costanti letterali, separati da tre punti significano una scelta di un singolo carattere nell'intervallo indicato (estremi inclusi) di caratteri ASCII. Una frase tra parentesi angolari (<...>) da una descrizione informale del simbolo definito; per esempio, questo può essere utilizzato nel descrivere la nozione di "carattere di controllo", se necessario.

Anche se la notazione utilizzata è pressoché la stessa, c'è una grande differenza tra il significato delle definizioni lessicali e quelle sintattiche: una definizione lessicale opera su caratteri individuali del sorgente in input, mentre una definizione sintattica opera sulla sequenza di token generati dall'analisi lessicale. Tutti gli utilizzi di BNF nel prossimo capitolo (``Analisi Lessicale'') sono definizioni lessicali; quelle nei capitoli successivi sono definizioni sintattiche.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.