首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原子跃迁、Set跃迁和ANTLR4 ATN中的Epsilon跃迁有什么区别?

原子跃迁、Set跃迁和ANTLR4 ATN中的Epsilon跃迁有什么区别?
EN

Stack Overflow用户
提问于 2020-08-02 12:31:24
回答 1查看 242关注 0票数 1

ANTLR4 ATN中原子跃迁、Set跃迁和Epsilon跃迁有什么区别?在网上找不到任何定义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 15:44:25

你不会找到任何定义,因为这是一个内部细节,对大多数人来说都不感兴趣。

ATN步行算法处理时,多采用不同的过渡类型来表示匹配条件。其中有10人:

  1. Epsilon:一个没有条件且不需要输入的转换。走路的人跳过了。
  2. Range:可能是Set转换的旧版本,而不是在ANTLR4中使用。唯一的区别是范围需要匹配范围的起始值和结束值,而set采用间隔集。
  3. 规则:解析器中的epsilon转换为子规则。什么都不吃。
  4. 谓词:以附加谓词为条件的epsilon转换。什么都不吃。
  5. Atom:匹配单个输入符号,只消耗一个输入符号。
  6. action :一个epsilon转换,它只需要附加一个操作(在处理转换时在目标代码中执行)。
  7. set :匹配一组间隔(允许间隔),并且只消耗一个输入符号。典型的例子是:[a-zA-Z]。只在雷克萨斯上使用。
  8. Not set:带倒置间隔的集合转换(完整的Unicode减去给定的集合)。
  9. 通配符:匹配任何单个输入并使用一个输入符号。
  10. Precedence (又名Precedence谓词):不能100%确定这一项。在转换的左递归规则中,似乎是用于优先级的,并且还附加了一个谓词。从这个意义上说,这是一个非常特殊的过渡,与其他的相比。

下面是一些转换的示例:

这是规则的ATN:LETTER: [a-zA-Z] '$';。它从ATN状态1开始,并有一个单epsilon过渡到第一个基本状态。其中一个有一个输出集,转换到另一个基本状态。从那里开始,原子转换到另一个中间状态,然后从那里到规则结束。

对于这个和更多的可视化、语法调试和ANTLR4语言支持,请安装我的ANTLR4的vscode扩展 (前提是您使用visualizations作为语法编辑器)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63216028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档