antlr — Antlr3 с целью C ++: недопустимое преобразование из const CommonTokenType *

Я пытаюсь получить очень простую грамматику, работающую для ANTLR3 с целью C ++.

Я обнаружил, что если я ссылаюсь на какие-либо переменные в своем действии, я получаю следующую ошибку:

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

Если так, могу ли я спросить, почему базовая функциональность супер-супер-супер нарушена в цели C ++ ANTLR?

Если это кому-нибудь еще пригодится, я сейчас работаю над этим, выполнив команду в моем Makefile, чтобы вручную выполнить поиск и замену в сгенерированном коде:

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

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]