The Language
------------
Lexemes
   Character Classes
      SIGN:         '+-'
      DIGIT:        '0123456789'
      SYMBOL_FIRST: 'a..zA..Z+-~!$%^&*_=\/?<>:#|'
      SYMBOL_REST:  'a..zA..Z+-~!$%^&*_=\/?<>:#|0..9'
   
   Comments
      Comments extend from ';' through '\n'.

   Literals
      NumberLiteral:  [SIGN] DIGIT+
                         ( '/' DIGIT+
                         | 'e' [SIGN] DIGIT+
                         | '.' DIGIT+ [ 'e' [SIGN] DIGIT+ ]
                         )   # Supports integers, floats and fractions
      StringLiteral:  '"' { ^["] } '"'   # Supports all python string escape sequences
      Symbol:         SYMBOL_FIRST {SYMBOL_REST}

Grammar
   Start:
      { Object } EOF

   Object:
      NumberLiteral | StringLiteral | Symbol | List
      | "'" Object | "`" Object | "," Object | ",@" Object

   List:
      '(' { Object } ')'

Notes
- parentheses () indicate grouping
- brackets [] surround optional parts
- braces {} surround parts that can occur 0 or more times in a row
- plus + follows parts that must occur 1 or more times in a row
- pipes | separate alternatives
- two dots .. separate parts that indicate a range
- caret brackets ^[ ... ] define a character class that includes
  all printable characters not found among those listed between the brackets.
  So, ^["] means anything but double quote.