【问题标题】:What is the difference between Atom Transition, Set Transition and Epsilon Transition in the ANTLR4 ATN?ANTLR4 ATN 中的 Atom Transition、Set Transition 和 Epsilon Transition 有什么区别?
【发布时间】:2020-08-02 12:31:24
【问题描述】:

ANTLR4 ATN 中的 Atom Transition、Set Transition 和 Epsilon Transition 有什么区别?在网上找不到任何定义。

【问题讨论】:

    标签: antlr4


    【解决方案1】:

    您不会找到任何定义,因为这是大多数人不感兴趣的内部细节。

    不同的转换类型主要用于指示 ATN 行走算法处理它们时要匹配的条件。其中有 10 个:

    1. Epsilon:没有条件且不消耗任何输入的转换。步行者只是跳过它们。
    2. 范围:可能是 Set 过渡的旧版本,未在 ANTLR4 中使用。唯一的区别是 Range 采用范围的开始值和结束值进行匹配,而 Set 采用间隔集。
    3. 规则:解析器 ATN 到子规则的 epsilon 转换。不消耗任何东西。
    4. 谓词:以附加谓词作为条件的 epsilon 转换。不消耗任何东西。
    5. Atom:匹配单个输入符号并且只消耗一个。
    6. 动作:一个不消耗任何内容但附加了一个动作的 epsilon 转换(在处理此转换时在目标代码中执行)。
    7. Set:匹配一组间隔(允许间隙)并且只使用一个输入符号。典型例子是:[a-zA-Z]。仅在词法分析器中使用。
    8. 未设置:具有倒置间隔的集合转换(完整的 Unicode 减去给定集合)。
    9. 通配符:匹配任何单个输入并使用一个输入符号。
    10. Precedence(又名Precedence Predicate):不是100% 确定这个。似乎用于转换后的左递归规则中的优先级,并且还附加了一个谓词。从这个意义上说,与其他过渡相比,这是一个非常特殊的过渡。

    以下是一些转换的示例:

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

    为此以及更多可视化、语法调试和 ANTLR4 语言支持安装我的vscode extension for ANTLR4(前提是您使用 Visual Studio Code 作为语法编辑器)。

    【讨论】:

    • 完美!!这消除了我的困惑。非常感谢
    猜你喜欢
    • 2021-07-25
    • 2011-09-07
    • 1970-01-01
    • 2012-03-25
    • 2011-02-17
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多