我正在查看使用Antlr并定义了许多语法的代码库。我看到使用以下,但不清楚他们真正的意思Antlr符号 - 需要示例
- 令牌{ONE,TWO}
- 我没有看到一个或两个的任何地方定义。
- 符号 - >和^
- 请告诉我的这些目的是什么?我在两个词法分析器和解析器规则看到这些
- 符号[]
- 这在下面
令牌{SET}
ID:...
TOKEN1:.. SET [$ ID]
这是什么意思?例子会有很大的帮助。
我正在查看使用Antlr并定义了许多语法的代码库。我看到使用以下,但不清楚他们真正的意思Antlr符号 - 需要示例
- 令牌{ONE,TWO}
- 符号 - >和^
- 符号[]
令牌{SET}
ID:...
TOKEN1:.. SET [$ ID]
这是什么意思?例子会有很大的帮助。
这些项目看起来好像它们来自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)。
@MikeThanks。这在一定程度上有所帮助,但您能否指出一些描述这些情况的例子。例子会让事情变得更好。 – learninghuman
所有这些事情都在明确的ANTLR3指南中描述。这是每个人都认真对待ANTLR3的最佳参考(同样适用于ANTLR4 btw)。没有简要的总结,我知道其中描述了所有这些。通常你会学习其他语法并从示例中学习。我添加了一个链接到我的答案。 –