Standard symbol definitions
Standard symbols as name, number or string are, usually, difficult to express in BNF rules (even though it would be possible). Hence, a special parser class has been provided in order to support a number of standard symbols, which can be references in any other parser definition. The documentation of those symbols below has more explanatory value and is not valid BNF notation.
std_constant := std_float | std_string | std_bool | std_hex
std_bool := std_false | std_true
std_false := 'false' | 'FALSE' | 'NO'
std_true := 'true' | 'TRUE' | 'YES'
std_hex := '0x' std_hexdigs
std_name := std_alpha1 [ std_nchars ]
std_alpha1 := std_alpha | std_nspec
std_number := std_integer | std_decimal | std_float
std_float := std_decimal [ std_floatp ]
std_floatp := 'E' std_integer
std_decimal := std_integer [ std_decimalp ]
std_decimalp := '.' std_digits
std_integer := std_digits | '+' std_digits | '-' std_digits
std_line_end := [' '(*)] nl
std_stringn := '"' [std_str2(*)] '"'
std_string := '\'' [std_str1(*)] '\'' | '"' [std_str2(*)] '"'
std_str1 := std_cchar1(*)
std_str2 := std_cchar2(*)
std_comment := 0x01 [std_comchar(*)] 0x02
std_comchar := 1-255 except: 0x01, 0x02 (for / * and * /)
std_bnfchar := 33-255 except: ; <
std_anychars := std_anychar(*)
std_fixtext := std_ftchar(*)
std_nchars := std_nchar(*)
std_nchar := std_alpha | std_digit | std_nspec
std_digits := std_digit(*)
std_hexdigs := std_hexdig(*)
std_cchar1 := std_dapost | std_cchar
std_dapost := \' | '' | "
std_cchar2 := std_dquote | std_cchar
std_dquote := \" | "" | '
std_separators:= std_separator(*)
std_separator := ' ' | std_nl | 0x09
std_digit := 0 - 9
std_hexdig := 0 - 9, A -F, a - f
std_alpha := a - z | A - Z
std_cchar := std_bss | 1-255 except: ' " \
std_bss := '\' std_bsc
std_bsc := '\' | '"' | 'n' | 't' | 'r'
std_bs := \\
std_bsn := \\ std_nl
std_bsb := \\ (backspace - blank)
std_anychar := 1-255 except: 0x0D, 0x0A
std_ftchar := 1-255 except: $ \
std_nspec := '_' | '$'
std_nl := 0x0A | 0x0D 0x0A