2016-04-04 4 views
1

Я работаю над проектом, который использует инструмент разбора слоев. Мне нужно реализовать проект в iPython, но, как видно из этого сообщения Problems with PLY LEX and YACC, ply вызывает проблемы с инструментом. Таким образом, я хотел знать, есть ли исправление или обходной путь для проблемы, которая позволит мне использовать слой и инструмент для ноутбука одновременно.Использование Ply с iPython/Jupyter

+0

От вопроса вы связаны: «Ply настаивает, что грамматика является модуль, который означает, что он должен быть в файле ». Ноутбук 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() 

Кроме того, вы не должны определить более одного лексера на файл ноутбука, как указывалось на PLY documentation в конце раздела 4.15.

Теперь, чтобы использовать yacc в IPython/Jupyter Notebook, вы должны назвать это так:

parser = yacc.yacc(write_tables=False)