我在这里发现了这个问题,OP在其中询问了一种评测ANTLTR语法的方法
然而,答案有些不令人满意,因为它仅限于没有操作的语法,而且更重要的是,它是一个自动评测,(在我看来)将使用生成的lexer/parser的实际构造函数来构建它。
我需要评测一个语法,确实包含操作,并且必须使用自定义构造函数来构建。因此,我需要能够自己实例化lexer+解析器,然后对其进行评测。
我找不到任何关于这个主题的信息。我知道IntelliJ有一个探查器,但它的工作原理与链接问题答案中描述的非常相似(也许它甚至是一样的)。
有人知道我如何根据这种特殊需求来描述我的语法吗?我不需要任何花哨的GUI。如果我把结果打印到控制台或类似的东西上,我会很满意的。
最后:我正在寻找一个工具或关于如何编写一些代码的提示,这些代码可以让我评测我的ANTLR语法(使用自实例化的lexer/parser)
Btw我的目标语言是Java,所以我想探查器也必须是Java。
一个好的开始是将Parser.setProfile()
设置为true,并在解析运行后检查从Parser.getParseInfo()
获得的内容。我还没有仔细查看评测结果提供的详细信息,但它在我的ANTLR4 vscode扩展的待办事项列表中,为语法提供评测信息以帮助改进它们。
从决策信息获取特定规则的提示:有一个决策号,它是ATN.decisionToState的索引。您可以通过它获取的DecisionState
实例是ATNState
子体,它允许从中获取ATNState.ruleIndex。然后,规则索引可以与解析器的ruleNames
属性一起使用,以查找该规则的名称。该值也是用于规则的枚举项的值。