python - 解析几乎是 Python 的语言的最佳方法?

标签 python parsing

我正在研究一种在 Python 之上实现的领域特定语言。语法与 Python 非常接近,以至于直到现在我们只是进行一些简单的字符串转换,然后将其输入 ast。例如,缩进被替换为 #endfor/#endwhile/#endif 语句,因此我们在缩进仍然是字符串时对其进行规范化。

请问有没有更好的办法?据我所知,ast 是硬编码来解析 Python 语法的,除了 http://docs.python.org/library/ast.html#module-ast 我真的找不到任何文档。 (我想还有来源本身)。

有没有人有使用 PyParsing、ANTLR 或 PLY 的个人经验?

有模糊的计划将解释器重写成某种东西,将我们的语言转换为有效的 Python,并将其提供给 Python 解释器本身,所以我想要一些与 compile 兼容的东西,但这不是'不会破坏交易。

更新:我刚刚想到

from __future__ import print_function, with_statement

改变了 Python 解析以下源代码的方式。然而,PEP 236表明这是编译器功能的语法修饰。有人可以确认尝试覆盖/扩展 __future__ 不是解决我的问题的正确方法吗?

最佳答案

PLY 有效。这很奇怪,因为它以一种不是非常 pythonic 的方式模仿 lex/yacc。

lex 和 yacc 都有一个隐式接口(interface),可以将 lex 的输出作为独立程序运行。这个“特征”被小心地保存了下来。类似 yacc 的 PLY 特性。创建一个奇怪的、隐含的独立主程序的“功能”被小心地保留了下来。

然而,作为 lex/yacc 兼容工具集的 PLY 非常好。您所有的 lex/yacc 技能都得到保留。

[编辑评论。 “修复”Python 的语法可能会浪费时间。几乎每个人都可以在没有任何帮助的情况下正确缩进。检查 C、Java、C++ 甚至 Pascal 代码,您会发现几乎每个人都可以很好地缩进。事实上,人们竭尽全力在不需要的地方缩进 Java。如果缩进在 Java 中不重要,为什么人们会做得这么好?]

关于python - 解析几乎是 Python 的语言的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3504677/

相关文章:

python - 操作直方图 bins Python

python - 如何在 django 的 base.html 中检查用户是否已通过身份验证?

python - 在 python 中解析大型二进制文件的最快方法

c++ - 什么库可以解析和解决 C++ 中的简单数学表达式

java - Apache Velocity IncludeTool - 条件包含

Python 2.7 OpenCV : Extracting features/descriptors from image coordinates

javascript - 原子编辑器 : node-gyp rebuild crashes

parsing - 删除匹配的括号

Python3 与输入函数和 CJK 的意外视觉交互

json - Golang - 使用/遍历 JSON 解析映射