В чем разница между переходом Atom, переходом Set и переходом Epsilon в ANTLR4 ATN? - PullRequest
1 голос
/ 02 августа 2020

В чем разница между переходом атома, переходом установки и переходом эпсилона в ANTLR4 ATN? Не удалось найти никаких определений в Интернете.

1 Ответ

3 голосов
/ 02 августа 2020

Вы не найдете никакого определения, потому что это внутренняя деталь, которая не представляет интереса для большинства людей.

Различные типы переходов в основном используются для указания условия, которому нужно соответствовать, когда алгоритм обхода ATN обрабатывает их. Всего их 10:

  1. Epsilon : переход, не имеющий условий и не требующий ввода. Ходунок просто пропускает их.
  2. Диапазон : вероятно, это более старая версия перехода Set и не используется в ANTLR4. Единственное отличие состоит в том, что Range принимает начальное и конечное значения диапазона для сопоставления, а Set принимает набор интервалов.
  3. Правило : эпсилон-переход в парсере ATN к субправилу. Ничего не потребляет.
  4. Предикат : переход эпсилон с присоединенным предикатом в качестве условия. Ничего не потребляет.
  5. Atom : соответствует одному входному символу и потребляет только один.
  6. Action : эпсилон-переход, который ничего не потребляет, но имеет присоединенное действие (выполняется в целевом коде, когда этот переход обрабатывается).
  7. Set : соответствует набору интервалов (чтобы разрешить пробелы) и потребляет только один входной символ. Типичный пример: [a-zA-Z]. Используется только в лексере.
  8. Не задано : заданный переход с инвертированными интервалами (полный Unicode минус заданный набор).
  9. Wildcard : соответствует любому отдельному входу и использует один входной символ.
  10. Приоритет (он же Предикат приоритета ): Не уверен на 100% в этом. Кажется, используется для приоритета в преобразованных леворекурсивных правилах, а также имеет прикрепленный предикат. В этом смысле это довольно особенный переход по сравнению с другими.

Вот пример некоторых переходов:

enter image description here

This is the ATN for the rule: LETTER: [a-zA-Z] '$';. It starts with the ATN state 1 and has a single epsilon transition to the first basic state. That one has a single outgoing Set transtion to another basic state. From there an Atom transition goes out to yet another intermediate state and from there to the rule end.

For this and more visualizations, grammar debugging and ANTLR4 language support install my расширение vscode для ANTLR4 (при условии, что вы используете Visual Studio Code в качестве редактора грамматики).

...