2016-04-04 25 views
1

Kat ayrıştırma aracını kullanan bir proje üzerinde çalışıyorum. Projeyi iPython uygulamasında kullanmam gerekiyor, ancak bu postada görüldüğü gibi Problems with PLY LEX and YACC, araçla ilgili sorunlara neden oluyor. Bu nedenle, aynı anda defter ve katlama aracını kullanmama izin verecek bir sorun veya çözüm bulunup bulunmadığını öğrenmek istedim.iPython/Jupyter ile Katman Kullanımı

+0

: "Ply'nin dilbilgisi o olmalı anlamına gelen bir modül olmak ısrar bir dosyada olmak. Bir IPython defteri bir dosya değildir. Dilbilgisini sisteminizdeki bir dosya olarak kaydetmeyi ve bir not defterine aktarmayı deneyebilirsiniz, sanırım. –

+0

@AkshatMahajan Açıkçası, bir defter bir dosyadır ('.ipynb'), ancak bir modül değildir. –

cevap

0

Belki bir yanıt için biraz geç kaldım, ama aynı problemle karşılaştım ve bir çözüm bulmayı başardım.

Lexer'ı oluşturmak için PLY, __file__ adlı bir değişken gerektirir. Yani, lex.lex()'u aramadan önce, defter dosyanızın adına __file__'u ayarlamanız gerekir. Örneğin

:

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

Ve bir sınıf kullanıyorsanız (Aşağıda bu example): Eğer sivri olarak, dizüstü dosya başına birden fazla lexer tanımlamak olmamalıdır Ayrıca

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() 

bölüm 4.15'in sonunda PLY documentation tarafından.

Şimdi, ipython/Jupyter Notebook içinde yacc kullanmak, böyle söylemek zorunda:

sen bağlı sorudan
parser = yacc.yacc(write_tables=False)