anysexpr

Crates.ioanysexpr
lib.rsanysexpr
version0.4.0
sourcesrc
created_at2023-05-15 01:28:44.200691
updated_at2023-05-27 23:48:11.011306
description(Universal) S-Expression parser and formatter
homepage
repositoryhttps://github.com/pflanze/anysexpr
max_upload_size
id864572
size122,457
Christian Jaeger (pflanze)

documentation

README

Any-sexpr

This is an S-Expression parser and formatter with the following goals:

  • Offering direct access to the tokenizer, anysexpr::parse, but also anysexpr::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 the sexpr_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

Commit count: 171

cargo fmt