Я создаю калькулятор, используя PLY, и хочу иметь возможность остановить синтаксический анализ, когда он сталкивается с делением на 0. Если я выдаю ошибку, это остановит мою программу, а это не то, что мне нужно. Я хочу иметь возможность напечатать сообщение об ошибке, а затем игнорировать оставшуюся часть проанализированной строки.
Поскольку я нахожусь в al oop, он прекратит анализ и снова запросит новый ввод.
while True:
question = input('>>> ')
try:
answer = parser.parse(question)
if answer is not None:
print(answer)
except EOFError:
break
У меня есть класс (не правило разбора) для обработки чисел и операций между ними. Если произойдет деление на ноль, он вызовет метод ошибки, который пока просто напечатает сообщение об ошибке.
def error(self, op, other):
print('Illegal operation "{} {} {}" for {}'.format(self, op, other, type(self).__name__))
Что хорошо, если после деления больше ничего нет, но это будет проблемой для this: 10/0 - 3 + 2
, потому что анализ продолжается и будет выдано несколько ошибок. Я хочу иметь возможность остановить синтаксический анализ после самой первой ошибки.
Я думал что-то вроде lexer.skip(1)
, но для всей строки, а не только для одного токена. Есть ли подобный метод для этого? Большое спасибо!