antlr - 如何理解为ANTLR语法生成的ATN图?

标签 antlr antlr4 state-machine regular-language automata

我的 ANTLR4 语法中有 2 个简单的词法分析器规则:

fragment Attrs : '.' ARCH; 
fragment ARCH : 'IA32' | 'X64' | 'IPF' | 'EBC' | 'common';
用ANTLR4.7生成的ATN是这样的(Visual Studio Code):
enter image description here
我搜索了一些关于“ATN”的引用资料,比如这个 one .
很美,但是看不懂:
  • 节点中的数字和标签是什么意思?
  • 箭头线上的 epsilon 符号是什么意思?
  • 灰色和红色节点是什么意思?
  • 最佳答案

    图像中的 ATN 图表示单个规则,由解析器生成器生成的 ATN 状态组成。这些对于想要编写以某种方式使用 ATN 的代码的开发人员来说最有趣(例如用于代码完成)。通常您的语法工作不需要这些信息。当您更改语法中的某些内容(用于微调语法)时,查看 ATN 图如何变化也可能会派上用场。

    您在图像中看到的是 ATN 状态的圆圈,带有它们的唯一 ID(没有 2 个状态共享相同的状态编号)以及指示状态类型(规则开始/结束状态、基本状态等)的标签。您可以通过将鼠标悬停在某个状态上直到获得工具提示来获取更多信息。圆角矩形描述了此规则调用的规则。

    大多数状态通过转换连接,转换描述了解析器在执行此状态机时必须走的方向。可以在不消耗输入的情况下执行转换(然后称为 epsilon 转换,由那个小 epsilon 符号标记)或需要某些输入才能匹配(在 ATN 中表示为 label,也附在图形图像)。

    关于antlr - 如何理解为ANTLR语法生成的ATN图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45473333/

    相关文章:

    antlr - 语句或退出语句的 ANTLR 文法

    delphi - ANTLR4 的 Delphi 语法问题

    python - ANTLR4 生成的 Python 代码中出现错误

    c# - 使用 "yield"关键字实现状态机

    parsing - 类香料语言识别器的语法

    error-handling - 改进 ANTLR DSL 解析错误消息

    java - 将无效字符视为 ANTLR4 词法分析器中的单个标记

    events - 状态机将事件推送到自己的事件队列

    c - 大型与嵌套状态机

    java - 为什么我添加了 "cppInclude"解析器然后整个 g4 不起作用