In computer science, augmented Backus–Naur form (ABNF) is a metalanguage based on Backus–Naur form (BNF), but consisting of its own syntax and derivation rules. The motive principle for ABNF is to describe a formal system of a language to be used as a bidirectional . It is defined by Internet Standard 68 ("STD 68", type case sic), which as of December 2010[update] is RFC 5234, and it often serves as the definition language for IETF communication protocols.
RFC 5234 supersedes RFC 4234 (which superseded RFC 2234 and RFC 733).RFC 7405 updates it, adding a syntax for specifying case-sensitive string literals.
An ABNF specification is a set of derivation rules, written as
where rule is a case-insensitive nonterminal, the definition consists of sequences of symbols that define the rule, a comment for documentation, and ending with a carriage return and line feed.
Rule names are case-insensitive: <rulename>
, <Rulename>
, <RULENAME>
, and <rUlENamE>
all refer to the same rule. Rule names consist of a letter followed by letters, numbers, and hyphens.
Angle brackets (<
, >
) are not required around rule names (as they are in BNF). However, they may be used to delimit a rule name when used in prose to discern a rule name.
Terminals are specified by one or more numeric characters.
Numeric characters may be specified as the percent sign %
, followed by the base (b
= binary, d
= decimal, and x
= hexadecimal), followed by the value, or concatenation of values (indicated by .
). For example, a carriage return is specified by %d13
in decimal or %x0D
in hexadecimal. A carriage return followed by a line feed may be specified with concatenation as %d13.10
.