我的 ANTLR4 语法中有 2 个简单的词法分析器规则:
fragment Attrs : '.' ARCH;
fragment ARCH : 'IA32' | 'X64' | 'IPF' | 'EBC' | 'common';
用ANTLR4.7生成的ATN是这样的(Visual Studio Code):我搜索了一些关于“ATN”的引用资料,比如这个 one .
很美,但是看不懂:
最佳答案
图像中的 ATN 图表示单个规则,由解析器生成器生成的 ATN 状态组成。这些对于想要编写以某种方式使用 ATN 的代码的开发人员来说最有趣(例如用于代码完成)。通常您的语法工作不需要这些信息。当您更改语法中的某些内容(用于微调语法)时,查看 ATN 图如何变化也可能会派上用场。
您在图像中看到的是 ATN 状态的圆圈,带有它们的唯一 ID(没有 2 个状态共享相同的状态编号)以及指示状态类型(规则开始/结束状态、基本状态等)的标签。您可以通过将鼠标悬停在某个状态上直到获得工具提示来获取更多信息。圆角矩形描述了此规则调用的规则。
大多数状态通过转换连接,转换描述了解析器在执行此状态机时必须走的方向。可以在不消耗输入的情况下执行转换(然后称为 epsilon 转换,由那个小 epsilon 符号标记)或需要某些输入才能匹配(在 ATN 中表示为 label
,也附在图形图像)。
关于antlr - 如何理解为ANTLR语法生成的ATN图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45473333/