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