Я работаю над проектом, который использует инструмент разбора слоев. Мне нужно реализовать проект в iPython, но, как видно из этого сообщения Problems with PLY LEX and YACC, ply вызывает проблемы с инструментом. Таким образом, я хотел знать, есть ли исправление или обходной путь для проблемы, которая позволит мне использовать слой и инструмент для ноутбука одновременно.Использование Ply с iPython/Jupyter
1
A
ответ
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)
От вопроса вы связаны: «Ply настаивает, что грамматика является модуль, который означает, что он должен быть в файле ». Ноутбук IPython не является файлом. Вы можете попробовать сохранить грамматику как файл где-то в вашей системе и импортировать его в блокнот, я полагаю. –
@AkshatMahajan. Чтобы быть понятным, ноутбук представляет собой файл ('.ipynb'), но не модуль. –