我正在将我的语法从版本3迁移到4.我认识到版本4有听众和访问者,我打算使用它们,但希望能够进行迁移。我想暂时保留我的语法中的动作 我正在使用自定义标记,并在语法的选项部分中使用TokenLabelType指定它。但是,生成的代码使用匹配()'没有提升到我的自定义令牌的方法,导致java编译失败。 我也注意到了“开始”#39;令牌的属性也不会提升为自定义令牌类型。 我还应该做些什么来在我的代码中正确使用自定义令牌吗?
答案 0 :(得分:0)
如果内存服务,Ter在Antlr.org网站上发布了一份设计文档,概述了Antlr3和4之间的差异(目前似乎无法找到)。
在任何情况下,请确保您的自定义令牌延伸org.antlr.v4.runtime.CommonToken
。支持的Antlr4 Action属性列在here中。 start
属性在解析器规则上有效,但在令牌上无效。
另请注意,许多令牌字段(包括start)都受到保护。但是,在start
访问的CommonToken中定义了相应的getter - getStartIndex()
。