Antlr生成的文件

Antlr生成的文件,antlr,Antlr,我试图理解从antlr生成的文件。我有两个input.g4(和)文件 运行antlr(4.7.2)时,使用: 它生成以下文件: / │ TSqlLexer.cs │ TSqlLexer.interp │ TSqlLexer.tokens │ TSqlParser.cs │ TSqlParser.interp │ TSqlParser.tokens │ TSqlParserBaseListener.cs │ TSqlParserListener.cs 什么是*.i

我试图理解从antlr生成的文件。我有两个input.g4(和)文件

运行antlr(4.7.2)时,使用:

它生成以下文件:

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

什么是
*.interp
*.tokens
文件?这些是帮助文件吗?我找不到关于它们的任何文档。如果它们是帮助文件,为什么不自动清理它们

.interp
.tokens
文件有特定的用途,语法作者通常不感兴趣

  • .tokens
    文件:包含由ANTLR4生成的令牌名称及其数字赋值的列表。这些仅为lexer创建。当您将tokenVocab选项添加到解析器语法(仅适用于拆分语法)中时,ANTLR4将实际使用此tokens文件,而不是lexer语法。这意味着必须首先生成lexer,以便为解析器生成准备好令牌文件。顺便说一句,您还可以在lexer中设置tokenVocab,以便从其他源导入令牌分配。例如,这可以用于指定显式标记值,与lexer规则在语法中的显示方式无关。如果您希望确保某些令牌具有非常特定的令牌类型(即,将所有关键字放在一个连续的范围内,以便快速检查它们),这将是一个很大的帮助。我在的解析器中使用这种方法
  • .interp
    :这是对ANTLR4的一个相对较新的添加,包含允许运行内置解释器而不是生成的解析器的数据。这主要用于允许调试语法的IDE,比如我的。该文件包含与生成的解析器/词法分析器文件完全相同的信息(令牌/规则名称、它们的显示名称、序列化的ATN、词法分析器的模式+通道名称)

语法作者通常不感兴趣的
.interp
.tokens
文件有特定用途

  • .tokens
    文件:包含由ANTLR4生成的令牌名称及其数字赋值的列表。这些仅为lexer创建。当您将tokenVocab选项添加到解析器语法(仅适用于拆分语法)中时,ANTLR4将实际使用此tokens文件,而不是lexer语法。这意味着必须首先生成lexer,以便为解析器生成准备好令牌文件。顺便说一句,您还可以在lexer中设置tokenVocab,以便从其他源导入令牌分配。例如,这可以用于指定显式标记值,与lexer规则在语法中的显示方式无关。如果您希望确保某些令牌具有非常特定的令牌类型(即,将所有关键字放在一个连续的范围内,以便快速检查它们),这将是一个很大的帮助。我在的解析器中使用这种方法
  • .interp
    :这是对ANTLR4的一个相对较新的添加,包含允许运行内置解释器而不是生成的解析器的数据。这主要用于允许调试语法的IDE,比如我的。该文件包含与生成的解析器/词法分析器文件完全相同的信息(令牌/规则名称、它们的显示名称、序列化的ATN、词法分析器的模式+通道名称)

感谢您的详尽回答。所以基本上我可以用Lexer定义(TSqlLexer.g4)代替“.tokens”文件(它们包含相同的信息,对吗?)。通常我也会将这些文件添加到.gitignore中(当它们生成时)?您可以替换它,是的,但这没有多大意义。每当您为lexer语法运行antlr工具时,.tokens文件就会重新生成(即使它实际上是一个组合语法,antlr也会隐式地将lexer和解析器分离并运行此过程)。感谢您的详细回答。所以基本上我可以用Lexer定义(TSqlLexer.g4)代替“.tokens”文件(它们包含相同的信息,对吗?)。通常我也会将这些文件添加到.gitignore中(当它们生成时)?您可以替换它,是的,但这没有多大意义。每当您为lexer语法运行antlr工具时,就会重新生成.tokens文件(即使它实际上是一个组合语法,antlr也会隐式地分离lexer和解析器并运行此过程)。
/
│   TSqlLexer.cs
│   TSqlLexer.interp
│   TSqlLexer.tokens
│   TSqlParser.cs
│   TSqlParser.interp
│   TSqlParser.tokens
│   TSqlParserBaseListener.cs
│   TSqlParserListener.cs