# s-expr
Rust library for S-expression like parsing and printing
* parser keeps track of spans, and representation (e.g. number base)
* number and decimal don't limit size
* only 1 dependency on `unicode-xid`
## S-expressions features
Extra features which are not in usual s-expressions (cannot be turned off):
* binary and hexadecimal number, when starting a number with the prefixes respectively `0b` or `0x`.
* `_` characters in number, e.g. `0xfedc__1240__abcd` or `100_000_000` to improve legibility
Currently unsupported:
* symbol with spaces
* negative literal integral and decimal, currently `-123` will be tokenized as the ident `-` followed by number `123`.
* scientific notation for decimal numbers `6.022e23` will be parsed as decimal `6.022` then ident `e`, then number `23`
There's lots of variant of S-expression, so the parser allow to parse various
different optional features that can be enabled/disabled depending on the user wishes:
* semi-colon line comment
* byte string of the format : `#8BADF00D#`
* braces `{ }` and bracket `[ ]` group, which behave like `( )` but provide
equivalent grouping balancing check and flavor of grouping