2016-04-04 12 views
1

Ich arbeite an einem Projekt, das das Ply-Parsing-Tool verwendet. Ich muss das Projekt in iPython implementieren, aber wie in diesem Beitrag gesehen Problems with PLY LEX and YACC verursacht Ply Probleme mit dem Tool. Daher wollte ich wissen, ob es eine Lösung für dieses Problem gibt, die es mir ermöglicht, ply und das Notebook-Tool gleichzeitig zu verwenden.Verwenden von Ply mit iPython/Jupyter

+0

Von der Frage an Sie verknüpft: „Ply besteht darauf, dass die Grammatik ein Modul sein, das es bedeutet, muss in einer Datei sein. " Ein IPython-Notizbuch ist keine Datei. Sie können versuchen, die Grammatik als Datei irgendwo auf Ihrem System zu speichern und sie in ein Notizbuch zu importieren, nehme ich an. –

+0

@AkshatMahajan Nur um klar zu sein, ein Notebook ist eine Datei ('.ipynb'), aber kein Modul. –

Antwort

0

Vielleicht ein bisschen zu spät für eine Antwort, aber ich habe gerade das gleiche Problem und hat es geschafft, einen Workaround zu finden.

Um den Lexer zu erstellen, benötigt PLY eine Variable mit dem Namen __file__. Bevor Sie also lex.lex() aufrufen, müssen Sie __file__ auf den Namen Ihrer Notebook-Datei setzen.

Zum Beispiel:

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

Und wenn Sie eine Klasse verwenden (im Anschluss an diese 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() 

Auch sollten Sie nicht mehr als ein Lexer pro Notebook-Datei definieren, als spitze durch die PLY documentation am Ende von Abschnitt 4.15.

Nun yacc in IPython/Jupyter Notebook zu verwenden, haben Sie es so nennen:

parser = yacc.yacc(write_tables=False)