Невозможно построить PLY лексер с помощью ideone
Я пытаюсь создать MCVE для вопроса, который собираюсь задать позже, но у меня возникла проблема с онлайновой IDE, которую я пытаюсь использовать, ideone.
Код по ссылке ниже прекрасно работает, если я запускаю его в своем локальном интерпретаторе Python 2.7:
Однако на ideone я получаю следующие ошибки:
ERROR: prog.py:282: No regular expression defined for rule 't_DIRECTIVE'
ERROR: prog.py:286: No regular expression defined for rule 't_REFERENCE'
ERROR: prog.py:291: No regular expression defined for rule 't_UNAME'
ERROR: prog.py:296: No regular expression defined for rule 't_USTRING'
ERROR: prog.py:301: No regular expression defined for rule 't_UFLOAT'
ERROR: prog.py:307: No regular expression defined for rule 't_HEX'
ERROR: prog.py:314: No regular expression defined for rule 't_INTEGER'
ERROR: prog.py:320: No regular expression defined for rule 't_COMMENT'
ERROR: prog.py:324: No regular expression defined for rule 't_ID'
ERROR: prog.py:330: No regular expression defined for rule 't_newline'
Traceback (most recent call last):
File "prog.py", line 338, in <module>
File "/usr/lib/python2.7/dist-packages/ply/lex.py", line 901, in lex
raise SyntaxError("Can't build lexer")
SyntaxError: Can't build lexer
Однако я правильно определяю свои правила. Например:
def t_REFERENCE(t):
r'([a-zA-Z0-9_\-]+)\s*\'([a-zA-Z0-9_\-\.]+)\''
return t
Что будет причиной этой ошибки?
Спасибо заранее.
1 ответ
Предположительно Ideone использует -OO
настройка оптимизации, которая удаляет все строки документации. Следовательно, lex
модуль не может найти строки документации, когда он хочет построить сканер. Подобная проблема будет встречаться в парсере.
Вот уродливый обходной путь: http://ideone.com/H5rxXK
В руководстве по PLY есть чистый обходной путь (см. Следующий раздел - 8. Использование оптимизированного режима Python - после ссылки; "правильная" ссылка в настоящее время не работает из-за ошибки HTML в руководстве по PLY). К сожалению, он выдает другую ошибку, предположительно, в результате виртуализации файловой системы ideone.