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

时间:2017-04-03 15:48:51

标签: java antlr identifier settext

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

例如:

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

如果我使用此语法生成解析器和词法分析器,则解析器不知道函数setText。 如果我在词法分析器规则中执行此操作,则没有问题,他将每个标识符更改为“TEST”

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

但他应该只在标识类/函数/变量标识符时更改标识符。

1 个答案:

答案 0 :(得分:0)

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

以下工作:

$Identifier