Passa al contenuto principale

2. Definizione delle regole

2.1. Denominazione delle regole (Rule Naming)​

Il nome di una regola, ossia il nome di regola (nome di regola, rule name), è semplicemente il nome stesso, cioè una sequenza di caratteri che inizia con un carattere alfabetico ed è seguita da una combinazione di caratteri alfabetici, cifre e trattini (lineette).

NOTA:

I nomi delle regole non distinguono tra maiuscole e minuscole.

I nomi , , e si riferiscono tutti alla stessa regola.

A differenza della BNF originale, le parentesi angolari ("<", ">") non sono richieste. Tuttavia, le parentesi angolari possono essere usate attorno a un nome di regola ogni volta che la loro presenza faciliti il riconoscimento dell'uso di un nome di regola. Questo è tipicamente limitato ai riferimenti a nomi di regola nella prosa libera, oppure a distinguere regole parziali che si combinano in una stringa non separata da spazi bianchi, come mostrato nella discussione sulla ripetizione, più sotto.

2.2. Forma delle regole (Rule Form)​

Una regola è definita dalla seguente sequenza:

      name =  elements crlf

dove è il nome della regola, è uno o più nomi di regola o specifiche di valori terminali (terminal specifications), e è l'indicatore di fine riga (ritorno carrello seguito da avanzamento di riga). Il segno di uguale separa il nome dalla definizione della regola. Gli elementi formano una sequenza di uno o più nomi di regola e/o definizioni di valori, combinati secondo i vari operatori definiti nel presente documento, quali l'alternativa (alternatives) e la ripetizione (repetition).

Per facilità di lettura, le definizioni delle regole sono allineate a sinistra. Quando una regola richiede più righe, le righe di continuazione sono indentate. L'allineamento a sinistra e l'indentazione sono relativi alle prime righe delle regole ABNF e non devono corrispondere al margine sinistro del documento.

2.3. Valori terminali (Terminal Values)​

Le regole si risolvono in una stringa di valori terminali (valore terminale, terminal value), talvolta chiamati caratteri. In ABNF, un carattere è semplicemente un intero non negativo. In certi contesti, verrà specificata una mappatura specifica (codifica, encoding) dei valori in un insieme di caratteri (come ASCII).

I valori terminali sono specificati da uno o più caratteri numerici, con l'interpretazione in base di tali caratteri indicata esplicitamente. Attualmente sono definite le seguenti basi:

      b           =  binary

d = decimal

x = hexadecimal

Pertanto:

      CR          =  %d13

CR = %x0D

specificano rispettivamente la rappresentazione decimale ed esadecimale di [US-ASCII] per il ritorno carrello (carriage return).

Una stringa concatenata di tali valori è specificata in modo compatto, usando un punto (".") per indicare la separazione dei caratteri all'interno di quel valore. Pertanto:

      CRLF        =  %d13.10

L'ABNF consente di specificare direttamente stringhe di testo letterali, racchiuse tra virgolette. Pertanto:

      command     =  "command string"

Le stringhe di testo letterali sono interpretate come un insieme concatenato di caratteri stampabili.

NOTA:

Le stringhe ABNF non distinguono tra maiuscole e minuscole e l'insieme di caratteri per queste stringhe è US-ASCII.

Pertanto:

      rulename = "abc"

e:

      rulename = "aBc"

corrisponderanno a "abc", "Abc", "aBc", "abC", "ABc", "aBC", "AbC" e "ABC".

Per specificare una regola sensibile alle maiuscole e minuscole, specificare i caratteri singolarmente.

Per esempio:

      rulename    =  %d97 %d98 %d99

oppure

      rulename    =  %d97.98.99

corrisponderanno solo alla stringa che comprende esclusivamente i caratteri minuscoli, abc.

2.4. Codifiche esterne (External Encodings)​

Le rappresentazioni esterne dei caratteri di valore terminale varieranno in base ai vincoli dell'ambiente di memorizzazione o di trasmissione. Pertanto, la stessa grammatica basata su ABNF può avere più codifiche esterne, come una per un ambiente US-ASCII a 7 bit, un'altra per un ambiente a ottetti binari (binary octet) e ancora una diversa quando si utilizza Unicode a 16 bit. I dettagli della codifica sono al di fuori dello scopo dell'ABNF, sebbene l'Appendice B fornisca definizioni per un ambiente US-ASCII a 7 bit, come è stato comune a gran parte di Internet.

Separando la codifica esterna dalla sintassi, si intende che ambienti di codifica alternativi possano essere usati per la stessa sintassi.