Antlr 生成的文件
Antlr generated files
我正在尝试了解 antlr 生成的文件。我有两个输入 .g4 (TSqlParser.g4 and 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
文件是什么?这些是帮助文件吗?我找不到关于它们的任何文档。如果它们是辅助文件,为什么不自动清除它们?
.interp
和 .tokens
文件有特定用途,语法作者通常不会感兴趣。
.tokens
文件:包含令牌名称列表及其由 ANTLR4 生成的数字分配。这些仅为词法分析器创建。当您向解析器语法添加 tokenVocab 选项时(仅适用于拆分语法),ANTLR4 实际上将使用此标记文件,而不是词法分析器语法。这意味着必须首先生成词法分析器,以便为解析器生成准备好标记文件。顺便提一句。您还可以在词法分析器中设置 tokenVocab,以从其他来源导入标记分配。例如,这可以用于指定显式标记值,而与词法分析器规则如何出现在语法中无关。如果您想确保某些标记具有非常特定的标记类型(即将所有关键字放在一个连续的范围内以允许快速检查它们),这将是一个很大的帮助。我在 MySQL Workbench. 的解析器中使用了这种方法
.interp
:这是对 ANTLR4 的一个相对较新的添加,包含允许 运行 内置解释器而不是生成的解析器的数据。这主要用于允许调试语法的 IDE,比如我的 ANTLR4 extension for vscode。该文件包含与生成的 parser/lexer 文件完全相同的信息(token/rule 名称、它们的显示名称、序列化的 ATN、模式 + 词法分析器的通道名称)。
我正在尝试了解 antlr 生成的文件。我有两个输入 .g4 (TSqlParser.g4 and 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
文件是什么?这些是帮助文件吗?我找不到关于它们的任何文档。如果它们是辅助文件,为什么不自动清除它们?
.interp
和 .tokens
文件有特定用途,语法作者通常不会感兴趣。
.tokens
文件:包含令牌名称列表及其由 ANTLR4 生成的数字分配。这些仅为词法分析器创建。当您向解析器语法添加 tokenVocab 选项时(仅适用于拆分语法),ANTLR4 实际上将使用此标记文件,而不是词法分析器语法。这意味着必须首先生成词法分析器,以便为解析器生成准备好标记文件。顺便提一句。您还可以在词法分析器中设置 tokenVocab,以从其他来源导入标记分配。例如,这可以用于指定显式标记值,而与词法分析器规则如何出现在语法中无关。如果您想确保某些标记具有非常特定的标记类型(即将所有关键字放在一个连续的范围内以允许快速检查它们),这将是一个很大的帮助。我在 MySQL Workbench. 的解析器中使用了这种方法
.interp
:这是对 ANTLR4 的一个相对较新的添加,包含允许 运行 内置解释器而不是生成的解析器的数据。这主要用于允许调试语法的 IDE,比如我的 ANTLR4 extension for vscode。该文件包含与生成的 parser/lexer 文件完全相同的信息(token/rule 名称、它们的显示名称、序列化的 ATN、模式 + 词法分析器的通道名称)。