我正在研究在Python之上实现的一个特定于领域的语言。语法和Python非常接近,直到现在我们只是进行了一些简单的字符串转换,然后将其输入到ast
。例如,缩进被替换为#endfor
/#endwhile
/#endif
语句,所以我们对缩进进行规范化,但它仍然是一个字符串。解析一个几乎是Python的语言的最佳方式?
我想知道是否有更好的方法?据我所知,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__
是不是我的问题的正确解决方案?
“编译器特性的句法窗口修饰”。这两个'__future__'模块实际上不是'模块'。它看起来像一个'import'语法,但它修改了正在使用的Python编译器。这不是一个合适的“进口”。这是魔法。 – 2010-08-17 19:16:58