带有C ++目标的Antlr3:来自const CommonTokenType *的无效转换

时间:2016-08-17 18:49:11

标签: c++ antlr antlr3

我试图让一个超级简单的语法为带有C ++目标的ANTLR3工作。

我发现如果我在操作中引用任何变量,我会收到以下错误:

  

invalid conversion from ‘const CommonTokenType* {aka const CommonToken<Traits<NlpCfgRuleAntlrLexer, NlpCfgRuleAntlrParser>>*}’ to ‘Traits<NlpCfgRuleAntlrLexer, NlpCfgRuleAntlrParser>::CommonTokenType* {aka CommonToken<Traits<NlpCfgRuleAntlrLexer, NlpCfgRuleAntlrParser>>*}’ [-fpermissive]

这是我语法的核心部分:

def 
    : ID ':' {$ID.text;}
    ;
ID  : 'a'..'z'+ ;

如果我将生成的C ++源代码转到此行:

ImplTraits::CommonTokenType* ID1 = NULL;

...并将其更改为:

const ImplTraits::CommonTokenType* ID1 = NULL;

...然后编译错误就消失了。

也许解决方法在这里:(?)

https://github.com/ibre5041/antlr3/commit/0c90ab8f8506a46e37f54988207cb4d6a1d2596a

如果是这样,请问为什么在ANTLR的C ++目标中超级超级超级基本功能会被打破?

如果它对其他人有帮助,我目前正在通过在我的Makefile中运行命令来手动搜索和替换生成的代码来解决这个问题:

perl -p -i -e 's/    ImplTraits::CommonTokenType\*/    const ImplTraits::CommonTokenType*/g' $(GEN)/mydir/*.cpp

0 个答案:

没有答案