Aller au contenu principal

2. Définition des règles

2.1. Nommage des règles​

Le nom d'une règle (rule name) est simplement le nom lui-même, c'est-à-dire une séquence de caractères commençant par un caractère alphabétique et suivie d'une combinaison de caractères alphabétiques, de chiffres et de traits d'union (tirets).

NOTE:

Les noms de règles ne sont pas sensibles à la casse.

Les noms , , et désignent tous la même règle.

Contrairement à la BNF d'origine, les chevrons ("<", ">") ne sont pas obligatoires. Toutefois, des chevrons peuvent être employés autour d'un nom de règle lorsque leur présence facilite le repérage de l'utilisation d'un nom de règle. Cela se limite typiquement aux références à des noms de règles dans de la prose libre, ou sert à distinguer des règles partielles qui se combinent en une chaîne non séparée par des espaces, comme l'illustre la discussion sur la répétition ci-dessous.

2.2. Forme des règles​

Une règle est définie par la séquence suivante:

      name =  elements crlf

où est le nom de la règle, est un ou plusieurs noms de règles ou spécifications terminales, et est l'indicateur de fin de ligne (retour chariot suivi d'un saut de ligne). Le signe égal sépare le nom de la définition de la règle. Les éléments forment une séquence d'un ou plusieurs noms de règles et/ou définitions de valeurs, combinés selon les divers opérateurs définis dans le présent document, tels que les alternatives (alternatives) et la répétition (repetition).

Pour faciliter la lecture, les définitions de règles sont alignées à gauche. Lorsqu'une règle nécessite plusieurs lignes, les lignes de continuation sont indentées. L'alignement à gauche et l'indentation sont relatifs aux premières lignes des règles ABNF et n'ont pas à correspondre à la marge gauche du document.

2.3. Valeurs terminales​

Les règles se résolvent en une chaîne de valeurs terminales (terminal values), parfois appelées caractères. En ABNF, un caractère n'est qu'un entier non négatif. Dans certains contextes, une correspondance (codage) spécifique des valeurs vers un jeu de caractères (tel qu'ASCII) sera spécifiée.

Les valeurs terminales sont spécifiées par un ou plusieurs caractères numériques, l'interprétation de base de ces caractères étant indiquée explicitement. Les bases suivantes sont actuellement définies:

      b           =  binary

d = decimal

x = hexadecimal

Ainsi:

      CR          =  %d13

CR = %x0D

spécifient respectivement la représentation décimale et hexadécimale de [US-ASCII] pour le retour chariot.

Une chaîne concaténée de telles valeurs est spécifiée de façon compacte, à l'aide d'un point (".") pour indiquer une séparation de caractères au sein de cette valeur. Ainsi:

      CRLF        =  %d13.10

L'ABNF permet de spécifier directement des chaînes de texte littérales, placées entre guillemets. Ainsi:

      command     =  "command string"

Les chaînes de texte littérales sont interprétées comme un ensemble concaténé de caractères imprimables.

NOTE:

Les chaînes ABNF ne sont pas sensibles à la casse et le jeu de caractères de ces chaînes est US-ASCII.

Ainsi:

      rulename = "abc"

et:

      rulename = "aBc"

correspondront à "abc", "Abc", "aBc", "abC", "ABc", "aBC", "AbC" et "ABC".

Pour spécifier une règle sensible à la casse, spécifiez les caractères individuellement.

Par exemple:

      rulename    =  %d97 %d98 %d99

ou

      rulename    =  %d97.98.99

ne correspondront qu'à la chaîne composée uniquement des caractères minuscules, abc.

2.4. Encodages externes​

Les représentations externes des caractères de valeur terminale varient selon les contraintes de l'environnement de stockage ou de transmission. Ainsi, une même grammaire fondée sur l'ABNF peut avoir plusieurs encodages externes, par exemple l'un pour un environnement US-ASCII à 7 bits, un autre pour un environnement d'octets binaires, et encore un autre lorsque l'Unicode à 16 bits est utilisé. Les détails d'encodage sortent du cadre de l'ABNF, bien que l'annexe B fournisse des définitions pour un environnement US-ASCII à 7 bits, comme cela a été courant dans une grande partie de l'Internet.

En séparant l'encodage externe de la syntaxe, on entend permettre l'utilisation d'environnements d'encodage différents pour une même syntaxe.