#------------------------------------------------------------------------
# ABNF
#------------------------------------------------------------------------
#
# The ABNF definition of ABNF as supported by com.parse2.aParse.
#
#------------------------------------------------------------------------

rulelist       =  1*( rule / (*c-wsp c-nl) );

rule           =  rulename defined-as elements ";" c-nl;

rulename       =  ALPHA *(ALPHA / DIGIT / "-" / "_");

defined-as     =  *c-wsp ("=" / "=/") *c-wsp;

elements       =  alternation *c-wsp;

c-wsp          =  WSP / (c-nl WSP);

c-nl           =  comment / CRLF;

comment        =  *WSP "#" *(WSP / VCHAR) CRLF;

alternation    =  concatenation *(*c-wsp "/" *c-wsp concatenation);

concatenation  =  repetition *(1*c-wsp repetition);

repetition     =  [repeat] element;

repeat         =  (*DIGIT "*" *DIGIT) / 1*DIGIT;

element        =  rulename / group / option / 
                  char-val / num-val / prose-val;

group          =  "(" *c-wsp alternation *c-wsp ")";

option         =  "[" *c-wsp alternation *c-wsp "]";

char-val       =  DQUOTE *(%x20-21 / %x23-7E) DQUOTE;

num-val        =  "%" (bin-val / dec-val / hex-val);

bin-val        =  "b" 1*BIT [ 1*("." 1*BIT) / ("-" 1*BIT) ];

dec-val        =  "d" 1*DIGIT [ 1*("." 1*DIGIT) / ("-" 1*DIGIT) ];

hex-val        =  "x" 1*HEXDIG [ 1*("." 1*HEXDIG) / ("-" 1*HEXDIG) ];

prose-val      =  "<" *(%x20-3D / %x3F-7E) ">";

#------------------------------------------------------------------------
# core rules
#------------------------------------------------------------------------

ALPHA          =  %x41-5A / %x61-7A;

BIT            =  "0" / "1";

CHAR           =  %x01-7F;

CR             =  %x0D;

CRLF           =  (CR LF) / LF;

CTL            =  %x00-1F / %x7F;

DIGIT          =  %x30-39;

DQUOTE         =  %x22;

HEXDIG         =  DIGIT / "A" / "B" / "C" / "D" / "E" / "F";

HTAB           =  %x09;

LF             =  %x0A;

LWSP           =  *(WSP / CRLF WSP);

OCTET          =  %x00-FF;

SP             =  %x20;

VCHAR          =  %x21-7E;

WSP            =  SP / HTAB;

#------------------------------------------------------------------------
# end
#------------------------------------------------------------------------