2016-11-10 73 views
0

我正在查看使用Antlr并定义了许多语法的代码库。我看到使用以下,但不清楚他们真正的意思Antlr符号 - 需要示例

  1. 令牌{ONE,TWO}
  • 我没有看到一个或两个的任何地方定义。
  • 符号 - >和^
    • 请告诉我的这些目的是什么?我在两个词法分析器和解析器规则看到这些
  • 符号[]
    • 这在下面
    使用

    令牌{SET}

    ID:...

    TOKEN1:.. SET [$ ID]

    这是什么意思?例子会有很大的帮助。

    回答

    2

    这些项目看起来好像它们来自ANTLR3语法。第一部分可能是一个令牌部分(注意复数),如下所示:

    tokens { 
        ONE, 
        TWO 
    } 
    

    它定义了一些“虚拟”令牌。这些被称为“虚拟”,因为它们没有要匹配的输入并且通常用于树重写(例如,根据某些条件改变令牌类型,例如谓词的结果)。

    符号->^用于生成AST时的树重写(并且不再由ANTLR4 btw支持,因为它根本不产生AST,而是一个分析树)。 ^表示一个根节点,它使解析器在活动规则中创建一个当前令牌树,并使用标记的令牌作为该树的根。 ->允许更多地重写结果(不同的顺序,添加虚拟令牌,省去令牌等)。

    而你问题的最后部分演示了使用令牌操作。该语法使得解析器创建具有来自匹配的ID令牌的所有值(除了类型,但是例如源位置,频道等)的新的令牌SET。所以它也是重写机器的一部分。

    更新: 的ANTLR3主页还活着,有一个Wiki一些文档:https://theantlrguy.atlassian.net/wiki/display/ANTLR3/ANTLR+3+Wiki+Home(或通过http://www.antlr3.org)。

    +0

    @MikeThanks。这在一定程度上有所帮助,但您能否指出一些描述这些情况的例子。例子会让事情变得更好。 – learninghuman

    +0

    所有这些事情都在明确的ANTLR3指南中描述。这是每个人都认真对待ANTLR3的最佳参考(同样适用于ANTLR4 btw)。没有简要的总结,我知道其中描述了所有这些。通常你会学习其他语法并从示例中学习。我添加了一个链接到我的答案。 –