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

时间:2017-08-03 01:25:16

标签: antlr antlr4 state-machine regular-language automata

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

fragment Attrs : '.' ARCH; 
fragment ARCH : 'IA32' | 'X64' | 'IPF' | 'EBC' | 'common';

使用ANTLR4.7生成的ATN是这样的:

enter image description here

我搜索了一些关于ATN的引用,例如one

它很漂亮,但我不明白:

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

1 个答案:

答案 0 :(得分:4)

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

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

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