2016-04-04 66 views
1

我正在使用ply解析工具的项目。我需要在iPython中实现这个项目,但是在这篇文章中看到的 Problems with PLY LEX and YACC,层板正在导致该工具的问题。因此,我想知道是否有解决方法或解决方案可以让我同时使用层板和笔记本工具。使用Ply与iPython/Jupyter

+0

从您链接到的问题:“帘布层坚持认为,语法是一个模块,这意味着它必须在一个文件中。“ IPython笔记本不是文件。我猜想你可以尝试将语法保存为系统中的某个文件并将其导入到笔记本中。 –

+0

@AkshatMahajan为了清楚起见,笔记本是一个文件('.ipynb'),但不是一个模块。 –

回答

0

也许有点迟到的回应,但我只是面临同样的问题,并设法找到解决方法。

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

,使用yacc在IPython中/ Jupyter笔记本电脑,你要这样称呼它:

parser = yacc.yacc(write_tables=False)