4 个版本 (重大更新)

0.4.0 2023年5月27日
0.3.0 2023年5月22日
0.2.0 2023年5月17日
0.1.0 2023年5月15日

#2240 in 解析器实现

39 次每月下载

MIT/Apache

83KB
2K SLoC

Any-sexpr

这是一个具有以下目标的 S-表达式解析器和格式化工具

  • 提供对标记化程序的直接访问,例如 anysexpr::parse,同时也提供了 anysexpr::read 以方便构建内存中的树。

  • 良好的错误报告(精确的位置信息和消息)。

  • (未来)使 anysexpr::read 的数据构造函数可参数化(泛型),例如在 sexpr_parser 包中。

  • 流式处理:允许从文件句柄中懒加载读取,并通过自定义循环打印输出,例如用于通信。目前这通过直接使用 anysexpr::parse 进行输入,或创建用于打印的令牌来实现。未来:更多可能性,例如将树转换为令牌流,或在打印时使用按需生成的树进行参数化。

  • (未来)通过运行时(和编译时?)设置支持各种 s-表达式变体(R*RS、Guile、Clojure、Common Lisp、..)。

  • (可能)适用于微控制器(代码小,无标准?)。

作者对 Rust 还比较陌生。某些 API 指南条目可能尚未遵循,该领域的帮助如同其他领域一样受欢迎。

使用方法

请参阅 examples/main.rs

待办事项

  • 打印时的字符串转义功能
  • 不精确和复数
  • 性能调整?可能不要使用 genawaiter?
  • 更好的错误行为:解析器应返回错误,但尝试使其能够继续?
  • 更多测试(大型测试语料库,模糊测试往返)
  • 处理 Guile、Clojure 和其他语法版本
  • 树生成/映射的参数化(泛型)(与 Serde?相比)
  • 如上所述的懒加载功能
  • 一定程度的支持格式化输出

正交

  • 更详细地研究 lexpr 包(在开始此项目之前研究现有包时被遗漏)

联系方式

Christian Jaeger [email protected]

依赖项

~1–1.8MB
~38K SLoC