使用PLY和python -OO?

Using PLY with python -OO?

我有一个应用程序启动的系统:

1
python -OO my_app.py

我无法更改应用程序的启动方式,但我完全控制了应用程序。当使用ply向应用程序添加解析器时,我被-oo删除ply所依赖的docstring这一事实咬了一口。

在以-oo开头的应用程序中不可能使用ply吗?有没有什么聪明的python技巧可以用来解决这个问题?

我一直在考虑使用Cython来编译解析器模块。我不确定是否能做到,这会增加一层复杂性,所以在我走上这条路之前,我会欣赏其他的想法。


好吧,找到答案的经典案例,就像写问题一样…

在PLY手册中明确指出,有一个优化模式用于这个确切的用例。我认为这涉及到另一种性能优化。

请注意,由于-oo删除了docstrings,因此使用optimize=1实例化lexer和parser将不会处理以下空规则:

1
2
3
4
5
6
7
8
9
def p_commands(self, p):
   """commands :
                | commands command"""

    # This will fail when running optimized

def p_command(self, p):
   """command : foo
               | bar"""

    p[0] = p[1]