Antlr сгенерированные файлы - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь понять сгенерированные файлы из antlr. У меня есть два входных файла .g4 ( TSqlParser.g4 и TSqlLexer.g4 ).

При запуске antlr (4.7.2) с использованием:

java -cp .;antlr.jar org.antlr.v4.Tool -Dlanguage=CSharp *.g4

генерируются следующие файлы:

/
│   TSqlLexer.cs
│   TSqlLexer.interp
│   TSqlLexer.tokens
│   TSqlParser.cs
│   TSqlParser.interp
│   TSqlParser.tokens
│   TSqlParserBaseListener.cs
│   TSqlParserListener.cs

Что такое *.interp и *.tokens файлов? Это вспомогательные файлы? Я не смог найти никакой документации о них. Если это вспомогательные файлы, почему они не очищаются автоматически?

1 Ответ

2 голосов
/ 15 января 2020

Файлы .interp и .tokens служат для определенных c целей и обычно не представляют интереса для автора грамматики.

  • .tokens файл: содержит список имен токенов и их нумерация c, сгенерированная ANTLR4. Они созданы только для лексеров. Когда вы добавляете опцию tokenVocab в вашу грамматику синтаксического анализатора (применяется только к разделенным грамматикам), ANTLR4 будет фактически использовать этот файл токенов, а не грамматику лексера. Это означает, что лексер должен быть сгенерирован первым, чтобы файл токенов был готов для генерации парсера. Btw. у вас также может быть настройка tokenVocab в лексере для импорта назначений токенов из других источников. Это может, например, использоваться для указания явных значений токенов, независимо от того, как правила лексера появляются в грамматике. Это очень полезно, если вы хотите убедиться, что определенные токены имеют очень определенные типы токенов c (т. Е. Поместить все ключевые слова в непрерывный диапазон, чтобы их можно было быстро проверить). Я использую этот подход в парсере MySQL Workbench .
  • .interp: это относительно новое дополнение к ANTLR4 и содержит данные, позволяющие запустить встроенный интерпретатор, вместо сгенерированного парсера. Это в основном используется для IDE, которые позволяют отлаживать грамматику, например, мое расширение ANTLR4 для vscode . Файл содержит в точности ту же информацию, что и сгенерированный файл синтаксического анализатора / лексера (имена токенов / правил, их отображаемые имена, сериализованный ATN, режим + имена каналов в случае лексеров).
...