我正在一个使用层分析工具的项目中。我需要在iPython中实现该项目,但如本文所述
Problems with PLY LEX and YACC,层导致该工具出现问题。因此,我想知道是否有针对此问题的修复程序或变通办法,使我可以同时使用ply和笔记本工具。

最佳答案

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

要构建词法分析器,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)

关于python - 在iPython/Jupyter中使用Ply,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36393114/

10-14 13:31