我正在做一个使用ply解析工具的项目。我需要用iPython实现这个项目,但正如在这篇文章Problems with PLY LEX and YACC中所看到的,ply导致了这个工具的问题。因此,我想知道是否有修复或解决这个问题的方法,使我可以同时使用ply和notebook工具。
发布于 2018-02-16 10:12:47
也许回应有点晚了,但我刚刚遇到了同样的问题,并设法找到了解决办法。
要构建lexer,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)https://stackoverflow.com/questions/36393114
复制相似问题