所以我正在使用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>
与我的语法中的规则编号有什么关系吗?
下面是默认令牌格式的细分。
[@{TokenIndex},{StartIndex}:{StopIndex}={Text},<{TokenType}>,{Line}:{Column}]
{TokenType}
字段通常对应于特定的词法分析器规则(常量将在生成的词法分析器中声明(。但是,可以在任何词法分析器规则中使用 -> type(X)
命令,以将该规则生成的令牌重新分配给另一种类型。如果将值20
分配给名为 Foo
的令牌,则列表中的第一个标记是由名为 Foo
的词法分析规则或包含操作-> type(foo)
的词法分析规则生成的,或者您有一个用户定义的操作,该操作将类型Foo
显式分配给由其他规则生成的令牌(这将是您编写的代码, 不是由 ANTLR 生成的代码(。