#lang abnf
;; 

file = [header CRLF] record *(CRLF record) [CRLF]

header = name *(COMMA name)

record = field *(COMMA field)

name = field

field = (escaped / non-escaped)

escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE

non-escaped = *TEXTDATA

COMMA = %x2C

as per section 6.1 of RFC 2234 [ 2 ]

as per section 6.1 of RFC 2234 [ 2 ]

as per section 6.1 of RFC 2234 [ 2 ]

as per section 6.1 of RFC 2234 [ 2 ]

TEXTDATA =  %x20-21 / %x23-2B / %x2D-7E

#lang abnf

file = [header CRLF] record *(CRLF record) [CRLF]

header = name *(COMMA name)

record = field *(COMMA field)

name = field

field = (escaped / non-escaped)

escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE

non-escaped = *TEXTDATA

COMMA = %x2C

as per section 6.1 of RFC 2234 [ 2 ]

as per section 6.1 of RFC 2234 [ 2 ]

as per section 6.1 of RFC 2234 [ 2 ]

as per section 6.1 of RFC 2234 [ 2 ]

TEXTDATA =  %x20-21 / %x23-2B / %x2D-7E
