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