2. Regeln
2.1. Regelbenennung (Rule Naming)
Der Name einer Regel ist einfach der Name selbst, das heißt eine Folge von Zeichen, die mit einem alphabetischen Zeichen beginnt und auf die eine Kombination aus alphabetischen Zeichen, Ziffern und Bindestrichen (Gedankenstrichen) folgt.
HINWEIS:
Regelnamen sind unabhängig von der Groß- und Kleinschreibung (case insensitive).
Die Namen
Anders als bei der ursprünglichen BNF sind spitze Klammern ("<", ">") nicht erforderlich. Spitze Klammern können jedoch um einen Regelnamen verwendet werden, wann immer ihr Vorhandensein das Erkennen der Verwendung eines Regelnamens erleichtert. Dies ist typischerweise auf Verweise auf Regelnamen in freiem Fließtext beschränkt oder dient dazu, Teilregeln zu unterscheiden, die sich zu einer nicht durch Leerraum getrennten Zeichenkette zusammensetzen, wie unten in der Diskussion über die Wiederholung gezeigt.
2.2. Regelform (Rule Form)
Eine Regel wird durch die folgende Sequenz definiert:
name = elements crlf
wobei
Zur besseren visuellen Erfassung werden Regeln linksbündig ausgerichtet. Wenn eine Regel mehrere Zeilen benötigt, werden die Fortsetzungszeilen eingerückt. Die linksbündige Ausrichtung und die Einrückung beziehen sich auf die ersten Zeilen der ABNF-Regeln und müssen nicht mit dem linken Rand des Dokuments übereinstimmen.
2.3. Terminalwerte (Terminal Values)
Regeln lösen sich in eine Zeichenkette von Terminalwerten auf, die manchmal Zeichen (characters) genannt werden. In ABNF ist ein Zeichen lediglich eine nicht-negative ganze Zahl. In bestimmten Kontexten wird eine spezifische Abbildung (Kodierung) von Werten auf einen Zeichensatz (wie ASCII) festgelegt.
Terminalwerte (terminals) werden durch ein oder mehrere numerische Zeichen spezifiziert, wobei die Basisinterpretation dieser Zeichen explizit angegeben wird. Die folgenden Basen sind derzeit definiert:
b = binary
d = decimal
x = hexadecimal
Daher:
CR = %d13
CR = %x0D
spezifizieren jeweils die dezimale und die hexadezimale Darstellung von [US-ASCII] für den Wagenrücklauf (carriage return).
Eine verkettete Zeichenkette solcher Werte wird kompakt spezifiziert, wobei ein Punkt (".") eine Trennung von Zeichen innerhalb dieses Wertes angibt. Daher:
CRLF = %d13.10
ABNF erlaubt die direkte Angabe von Literal-Textzeichenketten (literal text strings), die in Anführungszeichen eingeschlossen sind. Daher:
command = "command string"
Literal-Textzeichenketten werden als eine verkettete Menge druckbarer Zeichen interpretiert.
HINWEIS:
ABNF-Zeichenketten sind unabhängig von der Groß- und Kleinschreibung (case insensitive), und der Zeichensatz für diese Zeichenketten ist US-ASCII.
Daher:
rulename = "abc"
und:
rulename = "aBc"
stimmen mit "abc", "Abc", "aBc", "abC", "ABc", "aBC", "AbC" und "ABC" überein.
Um eine Regel zu spezifizieren, bei der die Groß- und Kleinschreibung beachtet wird (case sensitive), geben Sie die Zeichen einzeln an.
Zum Beispiel:
rulename = %d97 %d98 %d99
oder
rulename = %d97.98.99
stimmen nur mit der Zeichenkette überein, die ausschließlich aus den Kleinbuchstaben abc besteht.
2.4. Externe Kodierungen (External Encodings)
Externe Darstellungen von Terminalwert-Zeichen variieren je nach den Beschränkungen in der Speicher- oder Übertragungsumgebung. Daher kann dieselbe ABNF-basierte Grammatik mehrere externe Kodierungen haben, etwa eine für eine 7-Bit-US-ASCII-Umgebung, eine weitere für eine binäre Oktett-Umgebung und noch eine andere, wenn 16-Bit-Unicode verwendet wird. Kodierungsdetails liegen außerhalb des Geltungsbereichs von ABNF, obwohl Anhang B Definitionen für eine 7-Bit-US-ASCII-Umgebung bereitstellt, wie sie für einen großen Teil des Internets üblich war.
Durch die Trennung der externen Kodierung von der Syntax ist beabsichtigt, dass alternative Kodierungsumgebungen für dieselbe Syntax verwendet werden können.