Antlr 生成的文件

标签 antlr

我正在尝试理解 antlr 生成的文件。我有两个输入 .g4 ( TSqlParser.g4TSqlLexer.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 。该文件包含与生成的解析器/词法分析器文件完全相同的信息( token /规则名称、它们的显示名称、序列化的 ATN、模式 + 词法分析器的 channel 名称)。

关于Antlr 生成的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59734259/

相关文章:

java - 如何在java中解析后获取pl sql包的详细信息

java - 如何使用 ANTLR v3 构建日期/小时语法?

java - 在 ANTLR 中解析不正确的输入时出现 OutOfMemoryError

java - Antlr树语法

java - Antlr 删除左递归,同时分别保留数学表达式和 boolean 表达式

java - ANTLR4 中的树语法在哪里?

antlr - 使用 Antlr 进行源代码补全是否可行?

parsing - VBScript 部分解析器

Antlr4 函数应用语法

java - ANTLR4 向监听器发送空上下文属性