灵活的Lisp读取器。
项目描述
#+title: sxpyr: Python的一个灵活的Lisp读取器
解析s表达式,edn以及各种Lisp方言。
- 简介 目前支持类似于Common Lisp、Scheme、Racket、Clojure、Hy、Fennel和Emacs Lisp的并集。
由于sxpyr旨在支持多种不同的方言,通常需要进行第二次遍历来匹配本地读取器的输出。这次遍历是提出针对您正在使用的方言的额外语法错误的好地方。一些方言已经被实现。
由于方言之间差异较大,在某些情况下,有必要提前配置阅读器。这种情况发生在某个特定形式在两种不同的方言中都是有效的情况下,并且一个或两个解析足够不同,以至于无法恢复其他方言的正确解析。
目前,读者无法在运行时修改。这意味着它不能用来解析命名的读取表或类似Racket的#lang at-exp。未来,可能会将生成器传递给处理分派宏的函数,从而使其能够注册新的读取宏,但这目前超出了范围。
最初,这个库打算作为供应商,然而从那时起,它的复杂性显著增加。可能在未来添加一个精简版本,该版本适合解析最小的合理方言,可以用作配置语言。
-
使用 #+begin_src bash git clone https://github.com/tgbugs/sxpyr.git pushd sxpyr pip install --user -e .[cli] python -m sxpyr.cli parse test/data/nested-splicing-unsyntax.rkt test/data/plist-test.sxpr popd #+end_src
-
测试 为了运行测试,您需要以下存储库。
- sbcl
- ccl
- emacs
- org-mode
- clojure
- spec.alpha
- code.specs.alpha
- tawny-owl
- hy
- Fennel
- txr
目前,您还需要在您的系统上安装以下内容。
- xemacs
- app-xemacs/xemacs-packages-all
- guile
- gambit
- 模糊测试 您需要一个afl的副本。 #+begin_src bash pip install --user -e .[fuzz] pushd test mkdir initial-inputs cp data/plist-test.sxpr initial-inputs/ # 其他种子文件也可以添加 py-afl-fuzz -m 400 -i initial-inputs/ -o fuzzing-results/ -- python -m sxpyr.cli parse --fuzz #+end_src
#+begin_src bash python -m sxpyr.cli parse test/fuzzing-results/crashes/* #+end_src
请注意,初始输入不能是符号链接,因为afl为输入文件创建硬链接。
此外,afl似乎在执行175k次后就会死亡?
有时,一些错误似乎也会逃出except块,并被视为崩溃?
项目详情
下载文件
下载您平台上的文件。如果您不确定要选择哪一个,请了解更多关于安装包的信息。
源分布
构建分布
sxpyr-0.0.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 68a070b4996eb514cb878a209e15fa4797389a7b10e6172cb21353f02f5140f9 |
|
MD5 | 7e6695c7fc81f5a02a055aec8dd2fe19 |
|
BLAKE2b-256 | 63df014c20a5c4b1e8335a58c8e59d1d88389804ab153df9a117644dad2eb995 |