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