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
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
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.