company logo

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