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

smw*_*dia 4 antlr automata state-machine regular-language antlr4

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

fragment Attrs : '.' ARCH; 
fragment ARCH : 'IA32' | 'X64' | 'IPF' | 'EBC' | 'common';
Run Code Online (Sandbox Code Playgroud)

使用ANTLR4.7生成的ATN如下所示:

在此处输入图片说明

我searhed约ATN一定的参考,比如这一个

很漂亮,但我不明白:

  • 节点中的数字和标签是什么意思?
  • 箭头线上的epsion符号是什么意思?
  • 灰色和红色节点是什么意思?

Mik*_*hke 5

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

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

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