解析ALMOST Python语言的最佳方法是什么?

时间:2010-08-17 16:22:06

标签: 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__不是我问题的正确解决方案吗?

1 个答案:

答案 0 :(得分:1)

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

lex和yacc都有一个隐式接口,可以将lex的输出作为独立程序运行。这个“功能”被精心保留。类似地,对于PLY的yacc样特征。创建一个奇怪的,隐含的独立主程序的“特征”被精心保存。

然而,PLY作为lex / yacc兼容工具集相当不错。你所有的lex / yacc技能都得以保留。

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