基于 Github 项目 yacv 修改,修复了大量 bug,添加许多功能
yacv
是一个用于可视化 LL(1) 和 LR 解析器 (LR0/SLR1/LR1/LALR1) 的工具。
学习解析技术可能会很困难。虽然著名的 "龙书" 是关于编译器的极好资源,但它对解析过程本身的可视化内容非常少。尽管如此,仍然存在一些可视化工具,例如 Zak Kincaid 和 Shaowei Zhu 的 LR(0) parser visualizer 和 LL(1) parser visualizer,JSMachines,Jison 等。然而,所有这些工具都是基于网页的,并且大多数都在表格中显示步骤,这并不是很直观。
yacv
试图通过使用 manim
来克服所有这些缺点。
yacv
接受上下文无关文法和字符串,并可以用于:
- 可视化语法树
- 可视化 LR DFA
- 导出 LL(1)、LR(LR0/SLR1/LR1/LALR1) 语法分析表
- 使用 manim 逐步可视化预测分析过程
依赖:
Python
3.6+pygraphviz
pandas
manim
:yacv
理论上 应该 可以与两个manim
版本(ManimGL 或 ManimCE)一起工作,但推荐使用 ManimCE
pycairo
相关问题 ? 查看 this
要安装 yacv
,请将 yacv
GitHub 仓库 克隆到本地机器,然后使用 `pip 进行安装
git clone https://github.com/
cd yacv
pip install -e .
pip install colour pyyaml manimgl
如果遇到 pygraphviz
安装报错,可以尝试以下命令后再安装
python3 -m pip install -U --no-cache-dir \
--config-settings="--global-option=build_ext" \
--config-settings="--global-option=-I$(brew --prefix graphviz)/include/" \
--config-settings="--global-option=-L$(brew --prefix graphviz)/lib/" \
pygraphviz
请查看 docs 中关于在 Ubuntu WSL 上安装的额外说明
使用示例配置 example_config.yml
运行 yacv
yacv example_config.yml
要使用您自己的文法和字符串,请创建您自己的自定义配置并使用它。各种文法的配置文件示例可以在 examples/ 目录中找到。
运行上述示例配置后,将生成以下内容:
ManimParsingVisualization.mp4
- 暂不支持 ‘,只能使用单个字母作为终结符和非终结符
有关更多信息,请参阅 文档
MIT
- A good, free book for interpreters
- GCC does not use machine generated parsers
- Why LL and LR parsing is hard ?
原作者还写了一篇关于如何构建这个项目的博客。请查看这里