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 标识符时更改标识符。
$Identifier
是 org.antlr.v4.runtime.Token 类型。它是一个只提供getter(f.e.getText())的接口。
以下将起作用:
normalClassDeclaration
: classModifier* 'class' Identifier typeParameters? superclass? superinterfaces? classBody
{
((CommonToken)$Identifier).setText("TEST");
}
;
为什么我不能在解析器规则中使用 setText 函数?
例如:
normalClassDeclaration
: classModifier* 'class' Identifier typeParameters? superclass? superinterfaces? classBody
{
$Identifier.setText("TEST");
}
;
如果我用这个语法生成解析器和词法分析器,解析器不知道函数 setText。 如果我在词法分析器规则中这样做,就没有问题,他正在将每个标识符更改为 "TEST"
Identifier
: JavaLetter JavaLetterOrDigit*
{
setText("V");
}
;
但他应该只在 class/function/variable 标识符时更改标识符。
$Identifier
是 org.antlr.v4.runtime.Token 类型。它是一个只提供getter(f.e.getText())的接口。
以下将起作用:
normalClassDeclaration
: classModifier* 'class' Identifier typeParameters? superclass? superinterfaces? classBody
{
((CommonToken)$Identifier).setText("TEST");
}
;