; [rexp.sty] Lexical grammar for regular expressions


Language rexp


Regular Grammar

; Character Set

  let Byte        = '\00' .. '\ff' ; all extended ascii
  let Control     = '\00' .. '\1f' ; control
                  |          '\7f' ; DEL
                  |          '\ff' ; space-like extended ascii


; Basic elements of tokens

  let Printable   = Byte - Control

  ign Space       = " "            ; ASCII - Space
  ign Line        = "\n" | "\r\n"  ; UNIX / CPM / DOS
                  | "\r"           ; Mac
  ign Page        = "\p"           ; weak separation convention

  ign Etx         = "\1a" {Byte}   ; CPM / older DOS Versions

  let Quote       = '\'\"\`\\'
  let Digit       = '0'..'9' 
  let HexDigit    = Digit | 'a'..'f'

; single byte literals or literals, encoded in us-ascii, ISO 8859-1 Latin-1 or ucs4 hex values
  let LitChar     = Printable - Quote
                  | '\\' ( Quote | 'prnt' | 
                           HexDigit HexDigit |
                           'xX' HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit )

  let White       = Space | Line


; final tokens

  tok Opr   = '()[]{}' | '?*+|-.' | ".."          ; operator tokens
  tok Set   = '\'' {LitChar} '\''                 ; CharacterSet
  tok Seq   = '\"' {LitChar} '\"'                 ; CharacterSequence (String)
  tok OprEx = Digit+ [ White+ ',' White+ Digit+ ] ; limited iteration

