0

アプリケーションが開始されるシステムがあります:

python -OO my_app.py

アプリケーションの起動方法を変更することはできませんが、アプリケーションを完全に制御できます。PLYを使用してアプリケーションにパーサーを追加するとき、-OO が PLY が依存するドキュメントストリングを削除するという事実に悩まされました。

-OO で起動したアプリケーションで PLY を使用することはできませんか? この問題を解決するために使用できる巧妙な Python トリックはありますか?

Cython を使用してパーサー モジュールをコンパイルすることを考えています。それができるかどうかはわかりませんし、複雑さの層が追加されるので、その道を進む前に、他のアイデアをいただければ幸いです。

4

1 に答える 1

3

わかりました、質問が書かれたのと同じように答えを見つける典型的なケース...

この正確なユースケースに使用される最適化モードがあることは、PLY マニュアルに明確に記載されています。別の種類のパフォーマンスの最適化を指していると思いました。

-OO は docstring を削除するため、optimize=1 でレクサーとパーサーをインスタンス化しても、以下のような空のルールは処理されないことに注意してください。

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]
于 2014-01-30T13:41:59.797 に答える