0

我以这种方式重新定义了 STRING 终端

terminal STRING : ('.'|'+'|'('|')'|'a'..'z'|'A'..'Z'|'_'|'0'..'9')*;

因为我必须识别 STRING 不是由 " 或 ' 分隔

问题是,虽然生成的解析器可以工作,但它会截断已识别字符串的第一个和最后一个字符。我错过了什么?

4

1 回答 1

1

如果您自定义 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;
    }
}

有关详细信息,请参阅文档。

于 2012-10-14T09:05:19.223 回答