ANTLR4 setText 函数不适用于解析器规则

ANTLR4 setText function not working with parser rules

为什么我不能在解析器规则中使用 setText 函数?

例如:

normalClassDeclaration
:   classModifier* 'class' Identifier typeParameters? superclass? superinterfaces? classBody
    {
    $Identifier.setText("TEST");
    }
;

如果我用这个语法生成解析器和词法分析器,解析器不知道函数 setText。 如果我在词法分析器规则中这样做,就没有问题,他正在将每​​个标识符更改为 "TEST"

Identifier
:   JavaLetter JavaLetterOrDigit*
{
setText("V");
}
;

但他应该只在 class/function/variable 标识符时更改标识符。

$Identifierorg.antlr.v4.runtime.Token 类型。它是一个只提供getter(f.e.getText())的接口。

以下将起作用:

normalClassDeclaration
:   classModifier* 'class' Identifier typeParameters? superclass? superinterfaces? classBody
    {
    ((CommonToken)$Identifier).setText("TEST");
    }
;