4 releases (breaking)
0.4.0 | May 27, 2023 |
---|---|
0.3.0 | May 22, 2023 |
0.2.0 | May 17, 2023 |
0.1.0 | May 15, 2023 |
#2240 in Parser implementations
39 downloads per month
83KB
2K
SLoC
Any-sexpr
This is an S-Expression parser and formatter with the following goals:
-
Offering direct access to the tokenizer,
anysexpr::parse
, but alsoanysexpr::read
to build an in-memory tree easily. -
Good error reporting (precise location information and messages).
-
(Future) Make the data constructors for
anysexpr::read
parametrizable (generic), e.g. like in thesexpr_parser
crate. -
Streaming: allow to read from and print to file handles lazily, for use e.g. in communications. This currently works by using
anysexpr::parse
directly for input, or creating tokens to print via a custom loop for output. Future: more possibilities, e.g. turn a tree into a token stream, or parameterize with a tree that's generated on demand while printing. -
(Future) Support various s-expression variants (R*RS, Guile, Clojure, Common Lisp, ..) via runtime (and compile-time?) settings.
-
(Perhaps) be usable on microcontrollers (small code, no-std?).
The author is quite new to Rust. There will be API guideline entries not currently being followed, help in that area is as welcome as in other areas.
Usage
See examples/main.rs.
Todo
- string escape features on printing
- inexact and complex numbers
- performance tuning?, perhaps do not use genawaiter?
- better error behaviour: parser should return errors but try to make it possible to continue?
- more tests (large test corpora, fuzzing round trips)
- handle Guile, Clojure and other syntax versions
- parametrization (generics) for tree generation / mapping (also/vs. Serde?)
- lazy features as mentioned above
- some level of support for pretty-printing
Orthogonally:
- examine the
lexpr
crate in more detail (missed when researching existing crates before starting this project)
Contact
Christian Jaeger ch@christianjaeger.ch
Dependencies
~1–1.8MB
~38K SLoC