我以这种方式重新定义了 STRING 终端
terminal STRING : ('.'|'+'|'('|')'|'a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
因为我必须识别 STRING 不是由 " 或 ' 分隔
问题是,虽然生成的解析器可以工作,但它会截断已识别字符串的第一个和最后一个字符。我错过了什么?
如果您自定义 STRING 规则,您还必须调整相应的值转换器。
像这样的东西必须绑定在你的运行时模块中:
public class MyStringValueConverter extends STRINGValueConverter {
@Override
protected String toEscapedString(String value) {
return value;
}
public String toValue(String string, INode node) {
if (string == null)
return null;
return string;
}
}
有关详细信息,请参阅文档。