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ı
1
A
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:
parser = yacc.yacc(write_tables=False)
: "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. –
@AkshatMahajan Açıkçası, bir defter bir dosyadır ('.ipynb'), ancak bir modül değildir. –