Я работаю над проектом, который использует инструмент анализа слоев. Мне нужно реализовать проект в iPython, но, как видно из этого поста проблемы с PLY LEX и YACC, ply вызывает проблемы с инструментом. Таким образом, я хотел знать, есть ли исправление или обходной путь для проблемы, который позволит мне использовать ply и инструмент для ноутбука одновременно.
Использование Ply с iPython/Jupyter
Ответы (1)
Возможно, я немного опоздал с ответом, но я только что столкнулся с той же проблемой и сумел найти обходной путь.
Для создания лексера 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()
Также вы не должны определять более одного лексера в файле блокнота, как указано в документации PLY а> в конце раздела 4.15.
Теперь, чтобы использовать yacc
в блокноте IPython/Jupyter, вы должны вызывать его следующим образом:
parser = yacc.yacc(write_tables=False)
person
Niteck
schedule
16.02.2018
.ipynb
), а не модуль. - person Thomas K   schedule 04.04.2016