Как поймать пропущенные токены с помощью antlr? - PullRequest
0 голосов
/ 21 марта 2019

Я играл с antlr, чтобы сделать своего рода проверку формулы Excel. Antlr выглядит довольно хорошо, однако у меня есть некоторые сомнения по поводу того, как это работает.

Представьте, что у меня есть грамматика, которая уже знает обо всех видах токенов, необходимых для проверки формулы Excel (ссылки на правила, операции и т. Д.). В этой грамматике нет действительного токена для символов валюты (€, £ и т. Д.), Хотя у меня есть токен 'ERROR_CHAR', который соответствует чему-либо: ERROR_CHAR: .;

Вот что я хочу знать о примере ввода: =€€€+SUM(1,2)

  1. Формула недействительна
  2. Все токены после €€€ действительны и для них есть правила -> +SUM(1,2)

Мой анализатор знает только, что недопустим, но не знает о последовательности ERROR_CHAR, как и €€€, и поэтому все входные данные неверны, и все последующие токены перехватываются прослушивателем ошибок. Я предполагаю, что это потому, что, основываясь на моих правилах синтаксического анализа, я не говорю, что ERROR_CHAR может присутствовать в любом месте ввода. Я не хочу пропускать эти токены, потому что я хотел бы выделить позицию ошибки, и я уже пропускаю пробелы.

У вас есть идеи, как я могу справиться с этим?

1 Ответ

0 голосов
/ 21 марта 2019

Если вы просто хотите выделить позицию ошибки, пусть ANTLR обнаружит ошибки и их позиции.Это делает это довольно хорошо.Грамматические изменения не требуются.

Используйте ErrorListener для обнаружения ошибок и их обработки.
Вы можете найти больше информации здесь: Обработка ошибок в ANTLR4

...