Lisp lexer (scanner) implemented in GO used by jig/lisp and jig/tinylisp
Code adapted from the Go text/scanner standard package, and mostly compatible with it (beside the fact this is for Lisp and that is for Go syntax).
Major differences:
- identifier allowed characters is more expansive than Go is (e.g.
+,-,*host-name*, or<=are valid identifiers) - negative integers or negative floats are supported as a single token (of type
IntorFloatrespectively) - character tokens are not supported anymore (e.g.
'A') as'is used as synonym ofquote - parsing errors are not printed to
os.Stdoutby default - raw strings in
jig/lispare quoted with¬character (instead of`) as`is used as synonym ofquasiquote. Raw strings might include¬by doublind them¬¬ #{is specially handled to support Lisp set literals~,@and~@are specially handled to support them as synonyms ofunquote,derefandsplice-unquoterespectively- support of Lisp keywords (e.g.
:key) as a single token of typeKeyword