与iPython/Jupyter一起使用Ply



我正在处理一个使用ply解析工具的项目。我需要在iPython中实现该项目,但如本文所示PLY LEX和YACC的问题,PLY导致工具出现问题。因此,我想知道是否有解决方案或解决方法可以让我同时使用ply和笔记本工具。

也许响应有点晚,但我只是遇到了同样的问题,并设法找到了解决方法。

为了构建lexer,PLY需要一个名为__file__的变量。因此,在调用lex.lex()之前,必须将__file__设置为笔记本文件的名称。

例如:

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

如果你正在使用一个类(按照这个例子):

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文档所指出的,每个笔记本文件不应该定义多个lexer。

现在,要在IPython/Jupyter Notebook中使用yacc,您必须这样称呼它:

parser = yacc.yacc(write_tables=False)

最新更新