2016-04-04 12 views
1

私は、ply解析ツールを使用するプロジェクトで作業しています。私はiPythonでプロジェクトを実装する必要がありますが、このポスト Problems with PLY LEX and YACCで見られるように、プライはツールで問題を引き起こしています。このように、私はプライとノートブックツールを同時に使用できるようにするための問題の修正または回避策があるかどうかを知りたいと思っていました。iPython/JupyterでPlyを使用する

+0

は今、IPython/Jupyterノートブックでyaccを使用するには、このようにそれを呼び出す必要がありますファイルに入ってください。 " IPythonノートブックはファイルではありません。あなたのシステムのどこかのファイルとして文法を保存し、ノートブックに読み込むことができます。 –

+0

@AkshatMahajanノートブックはファイル( '.ipynb')ですが、モジュールではありません。 –

答えて

0

おそらく少し遅れて応答しましたが、同じ問題に直面して回避策を見つけることができました。

レクサーをビルドするには、PLYには__file__という名前の変数が必要です。したがって、lex.lex()を呼び出す前に、__file__にノートブックファイルの名前を設定する必要があります。例えば

[...] 
__file__ = "My_Notebook.ipynb" 
lexer = lex.lex() 
[...] 

そして、あなたはクラスを使用している場合(以下、このexample):あなたが指摘したように、ノートブックファイルごとに複数のレクサーを定義するべきではありません。また

class MyLexer(object): 
    # [...] 
    # lots and lots of token declarations 
    # [...] 

    # Build the lexer 
    def build(self,**kwargs): 
     self.lexer = lex.lex(module=self, **kwargs) 

my_lexer = MyLexer() 
__file__ = "My_Notebook.ipynb" 
my_lexer.build() 

セクション4.15の末尾にあるPLY documentationによって。 「プライは、それがなければならないことを意味しており、文法がモジュールであることを主張:あなたがにリンクされている質問から

parser = yacc.yacc(write_tables=False) 
関連する問題