【问题标题】:Profile Antlr grammar简介 Antlr 语法
【发布时间】:2018-04-17 16:04:24
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这个问题相当广泛,因此在这里很难回答。您可以先将 Parser.setProfile() 设置为 true,然后在解析运行后检查您从 Parser.getParseInfo() 获得的内容。
  • 好吧,我会试试的……我什至不知道这个选项存在
  • 好的,这似乎涵盖了我正在寻找的所有信息。如果您写的答案包含您的评论内容(以及如何将 decisionInfo 与相应规则的名称相关联),我会接受它作为我问题的正确答案。

标签: parsing profiling antlr4


【解决方案1】:

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

从决策信息到特定规则的提示:有一个decision number,它是ATN.decisionToState 的索引。您可以由此获得的DecisionState 实例是ATNState 的后代,它允许从中获得ATNState.ruleIndex。然后可以将规则索引与解析器的 ruleNames 属性一起使用以查找该规则的名称。该值也是用于规则的枚举条目的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多