我正在开发一个使用ply解析工具的项目。我需要在iPython中实现该项目,但正如本文所述 Problems with PLY LEX and YACC,ply导致该工具出现问题。因此,我想知道是否有问题的修复或解决方法,这将允许我同时使用ply和笔记本工具。
答案 0 :(得分:1)
回复可能有点迟,但我遇到了同样的问题并设法找到了解决方法。
要构建词法分析器,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所示。
现在,要在IPython / Jupyter Notebook中使用yacc
,你必须像这样调用它:
parser = yacc.yacc(write_tables=False)