Comments in this syntax presentation are enclosed in double quotes ".
CSV_file_format ::= [[ CSV_record ] CSV_record_separator [[ CSV_record ] CSV_record_separator ]... ] [CSV_record] 
CSV_record ::= { [CSV_field CSV_delimiter]... CSV_non-empty_field | CSV_field CSV_delimiter [CSV_field CSV_delimiter]... }
CSV_record_separator ::= { X'04' "(EBCDIC control character NEL)" |   X'0D' "(EBCDIC control character CR)" |  X'15' "(EBCDIC control character LF)" |  X'25' "(EBCDIC control character)" |
    "End of record of a BS2000SAM file" }
CSV_field ::= { CSV non-empty field | "(leer)" }
CSV_non-empty_field ::= { CSV plain field | CSV quoted field }
CSV_plain_field ::= CSV_plain_intro [ CSV_plain_part ]...
CSV_plain_intro ::= { CSV_escape_sequence | "all characters except CSV_record_separator, CSV_delimiter, CSV_escape und CSV_quote" } 
CSV_plain_part ::= { CSV_escape_sequence | "all characters except  CSV_record_separator, CSV_delimiter und CSV_escape" }
CSV_quoted_field ::= CSV_quote [ CSV_quoted part ]... CSV_quote
CSV_quoted_part ::= { CSV_quote CSV_quote | CSV_escape_sequence | "End of record of a BS2000SAM file" | "all characters except CSV_quote und CSV_escape"  }
CSV_escape_sequence ::= { CSV_escape CSV_record_separator | CSV_escape CSV_delimiter | CSV_escape CSV_quote | CSV_escape CSV_escape }
CSV_delimiter ::= character
CSV_quote ::= character
CSV_escape ::= character
For details of CSV_delimiter, CSV_quote, and CSV_escape, see also the syntax description of the CSV function on "CSV() - Reading a BS2000 file as a table".