0

所以我正在使用 Antlrworks 2,处理相当大的语法。问题是,在这个语法中,我试图解决多个歧义。

我想知道是否有办法解释失败时调用了哪些规则。

例如,当我运行我的规则时,我得到以下输出

[@0,0:1='99',<20>,1:0]
[@1,2:1='<EOF>',<-1>,1:2]
line 1:0 mismatched input '99' expecting Digit2
(dummy 99)

我想知道什么[@0,0:1='99',<20>,1:0]意思。@0或与我<20>的语法中的规则编号有什么关系吗?

4

1 回答 1

1

这是默认令牌格式的细分。

[@{TokenIndex},{StartIndex}:{StopIndex}={Text},<{TokenType}>,{Line}:{Column}]

{TokenType}字段通常对应于特定的词法分析器规则(常量将在您生成的词法分析器中声明)。但是,该-> type(X)命令可以在任何词法分析器规则中使用,以将该规则生成的标记重新分配给另一种类型。如果将该值20分配给名为 的标记Foo,则列表中的第一个标记是由名为的词法分析器规则包含该操作的词法分析器规则生成的,或者您有一个用户定义的操作,该操作将类型显式分配给由生成的标记其他一些规则(这将是您编写的代码,而不是 ANTLR 生成的代码)。Foo -> type(foo) Foo

于 2013-08-07T22:19:40.857 回答