Я работаю над проектом по преобразованию кода MATLAB в Python, и был несколько успешным после сборки работы других .Инструмент использует PLY (реализация инструментов синтаксического анализа lex и yacc для Python) для анализа входных данных MATLAB.К сожалению, это требование, чтобы мой код был написан на Python 3, а не Python 2. Инструмент работает без проблем в Python 2, но я получаю странную ошибку в Python 3 (при условии, что A
- это массив):
log_idx = A <= 16;
^
SyntaxError: Unexpected "=" (parser)
Код MATLAB, который я пытаюсь преобразовать:
idx = A <= 16;
, который должен преобразовывать почти в одно и то же в Python 3:
idx = A <= 16
Единственная реальная разницамежду кодом Python 3 и кодом Python 2 находится PLY-генерируемый файл parsetab.py, который имеет существенные различия в следующих переменных:
_tabversion
_lr_signature
_lr_action_items
_lr_goto_items
У меня проблемы с пониманием назначения этих переменных ипочему они могут отличаться, когда единственным отличием была версия Python, используемая для генерации файла parsetab.py
.
Я попытался найти документацию по этому вопросу, но безуспешно.Первоначально я подозревал, что может быть разница в способах форматирования строк между Python 2 и Python 3, но это тоже ничего не дало.Кто-нибудь знаком с PLY, который мог бы дать некоторое представление о том, как генерируются эти переменные, или почему версия Python создает эту разницу?
Редактировать: я не уверен, будет ли это кому-нибудь полезно, потому чтоФайл очень длинный и загадочный, но ниже приведен пример части первых строк _lr_action_items
и _lr_goto_items
Python 2:
_lr_action_items = {'DOTDIV':([6,9,14,20,22,24,32,34,36,42,46,47,52,54,56,57,60,71,72,73,74,75 ...
_lr_goto_items = {'lambda_args':([45,80,238,],[99,161,263,]),'unwind':([1,8,28,77,87,160,168,177 ...
Python 3:
_lr_action_items = {'END_STMT':([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,39,41,48,50 ...
_lr_goto_items = {'top':([0,],[1,]),'stmt':([1,44,46,134,137,207,212,214,215,244,245,250 ...