Augmented Backus-Naur Form
Augmented Backus-Naur Form, aka Augmented Backus-Naur Form, is an actively used grammar language created in 2008. 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 communications protocol. It is defined by Internet Standard 68 ("STD 68", type case sic), which as of December 2010 is RFC 5234, and it often serves as the definition language for IETF communication protocols. Read more on Wikipedia...
12Years Old | 20Users | ?Jobs |
- Augmented Backus-Naur Form ranks in the top 25% of languages
- the Augmented Backus-Naur Form wikipedia page
- Augmented Backus-Naur Form first appeared in 2008
- file extensions for Augmented Backus-Naur Form include abnf
- See also: regex
- Have a question about Augmented Backus-Naur Form not answered here? Email me and let me know how I can help.
Example code from Linguist:
; Source: https://github.com/toml-lang/toml ; License: MIT ;; This is an attempt to define TOML in ABNF according to the grammar defined ;; in RFC 4234 (http://www.ietf.org/rfc/rfc4234.txt). ;; TOML toml = expression *( newline expression ) expression = ( ws / ws comment / ws keyval ws [ comment ] / ws table ws [ comment ] ) ;; Newline newline = ( %x0A / ; LF %x0D.0A ; CRLF ) newlines = 1*newline ;; Whitespace ws = *( %x20 / ; Space %x09 ; Horizontal tab ) ;; Comment comment-start-symbol = %x23 ; # non-eol = %x09 / %x20-10FFFF comment = comment-start-symbol *non-eol ;; Key-Value pairs keyval-sep = ws %x3D ws ; = keyval = key keyval-sep val key = unquoted-key / quoted-key unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _ quoted-key = quotation-mark 1*basic-char quotation-mark ; See Basic Strings val = integer / float / string / boolean / date-time / array / inline-table ;; Table table = std-table / array-table ;; Standard Table std-table-open = %x5B ws ; [ Left square bracket std-table-close = ws %x5D ; ] Right square bracket table-key-sep = ws %x2E ws ; . Period std-table = std-table-open key *( table-key-sep key) std-table-close ;; Array Table array-table-open = %x5B.5B ws ; [[ Double left square bracket array-table-close = ws %x5D.5D ; ]] Double right square bracket array-table = array-table-open key *( table-key-sep key) array-table-close ;; Integer integer = [ minus / plus ] int minus = %x2D ; - plus = %x2B ; + digit1-9 = %x31-39 ; 1-9 underscore = %x5F ; _ int = DIGIT / digit1-9 1*( DIGIT / underscore DIGIT ) ;; Float float = integer ( frac / frac exp / exp ) zero-prefixable-int = DIGIT *( DIGIT / underscore DIGIT ) frac = decimal-point zero-prefixable-int decimal-point = %x2E ; . exp = e integer e = %x65 / %x45 ; e E ;; String string = basic-string / ml-basic-string / literal-string / ml-literal-string ;; Basic String basic-string = quotation-mark *basic-char quotation-mark quotation-mark = %x22 ; " basic-char = basic-unescaped / escaped escaped = escape ( %x22 / ; " quotation mark U+0022 %x5C / ; \ reverse solidus U+005C %x2F / ; / solidus U+002F %x62 / ; b backspace U+0008 %x66 / ; f form feed U+000C %x6E / ; n line feed U+000A %x72 / ; r carriage return U+000D %x74 / ; t tab U+0009 %x75 4HEXDIG / ; uXXXX U+XXXX %x55 8HEXDIG ) ; UXXXXXXXX U+XXXXXXXX basic-unescaped = %x20-21 / %x23-5B / %x5D-10FFFF escape = %x5C ; \ ;; Multiline Basic String ml-basic-string-delim = quotation-mark quotation-mark quotation-mark ml-basic-string = ml-basic-string-delim ml-basic-body ml-basic-string-delim ml-basic-body = *( ml-basic-char / newline / ( escape newline )) ml-basic-char = ml-basic-unescaped / escaped ml-basic-unescaped = %x20-5B / %x5D-10FFFF ;; Literal String literal-string = apostraphe *literal-char apostraphe apostraphe = %x27 ; ' Apostrophe literal-char = %x09 / %x20-26 / %x28-10FFFF ;; Multiline Literal String ml-literal-string-delim = apostraphe apostraphe apostraphe ml-literal-string = ml-literal-string-delim ml-literal-body ml-literal-string-delim ml-literal-body = *( ml-literal-char / newline ) ml-literal-char = %x09 / %x20-10FFFF ;; Boolean boolean = true / false true = %x74.72.75.65 ; true false = %x66.61.6C.73.65 ; false ;; Datetime (as defined in RFC 3339) date-fullyear = 4DIGIT date-month = 2DIGIT ; 01-12 date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on month/year time-hour = 2DIGIT ; 00-23 time-minute = 2DIGIT ; 00-59 time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second rules time-secfrac = "." 1*DIGIT time-numoffset = ( "+" / "-" ) time-hour ":" time-minute time-offset = "Z" / time-numoffset partial-time = time-hour ":" time-minute ":" time-second [time-secfrac] full-date = date-fullyear "-" date-month "-" date-mday full-time = partial-time time-offset date-time = full-date "T" full-time ;; Array array-open = %x5B ws ; [ array-close = ws %x5D ; ] array = array-open array-values array-close array-values = [ val [ array-sep ] [ ( comment newlines) / newlines ] / val array-sep [ ( comment newlines) / newlines ] array-values ] array-sep = ws %x2C ws ; , Comma ;; Inline Table inline-table-open = %x7B ws ; { inline-table-close = ws %x7D ; } inline-table-sep = ws %x2C ws ; , Comma inline-table = inline-table-open inline-table-keyvals inline-table-close inline-table-keyvals = [ inline-table-keyvals-non-empty ] inline-table-keyvals-non-empty = key keyval-sep val / key keyval-sep val inline-table-sep inline-table-keyvals-non-empty ;; Built-in ABNF terms, reproduced here for clarity ; ALPHA = %x41-5A / %x61-7A ; A-Z / a-z ; DIGIT = %x30-39 ; 0-9 ; HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
Example code from Wikipedia:
postal-address = name-part street zip-part name-part = *(personal-part SP) last-name [SP suffix] CRLF name-part =/ personal-part CRLF personal-part = first-name / (initial ".") first-name = *ALPHA initial = ALPHA last-name = *ALPHA suffix = ("Jr." / "Sr." / 1*("I" / "V" / "X")) street = [apt SP] house-num SP street-name CRLF apt = 1*4DIGIT house-num = 1*8(DIGIT / ALPHA) street-name = 1*VCHAR zip-part = town-name "," SP state 1*2SP zip-code CRLF town-name = 1*(ALPHA / SP) state = 2ALPHA zip-code = 5DIGIT ["-" 4DIGIT]
Trending Repos
repo | stars | description |
---|
Last updated August 9th, 2020