Profile Antlr语法

Profile Antlr grammar

我发现 this question 在这里,OP 要求提供一种分析 ANTLTR 语法的方法。
然而,答案有点不令人满意,因为它仅限于没有动作的语法,而且 - 更重要的是 - 它是一个自动分析,将(如我所见)使用生成的 lexer/parser 的默认构造函数来构造它。

我需要描述一个语法,确实 包含动作并且必须使用自定义构造函数来构造。因此,我需要能够自己实例化词法分析器 + 解析器,然后对其进行分析。
我找不到有关此主题的任何信息。我知道有一个 IntelliJ 分析器,但它的工作方式与链接问题的答案中描述的非常相似(甚至可能是相同的)。

有谁知道我如何根据这种特殊需要来描述我的语法?我不需要任何花哨的 GUI。如果我将结果打印到控制台或类似的东西,我会很满意。

总结一下:我正在寻找一种工具或有关如何编写一些代码的提示,这些代码可以让我分析我的 ANTLR 语法(使用自实例化 lexer/parser)。
顺便说一句,我的目标语言是 Java,所以我想分析器也必须在 Java 中。

一个好的开始是将 Parser.setProfile() 设置为 true 并在解析 运行 后检查从 Parser.getParseInfo() 得到的结果。我还没有仔细查看分析结果详细提供的内容,但它在我的 vscode ANTLR4 扩展的待办事项列表中,为语法提供分析信息以帮助改进它们。

从决策信息到特定规则的提示:其中有一个 decision number, which is an index into ATN.decisionToState. The DecisionState instance you can get by this is an ATNState descendant, which allows to get a ATNState.ruleIndex。规则索引然后可以与您的解析器的 ruleNames 属性 一起使用来查找该规则的名称。该值也是用于规则枚举条目的值。