我正在编写一个解析器,其中一个部分应匹配并检索双引号字符串内容 它只产生引号,但不是整个字符串。对于不带引号的那些一切都很好
以下是相应的规则:
def doubleQuoted: Rule1[StringWrapper] = rule { //same for singlequoted
"\"" ~ zeroOrMore( noneOf("\"\\") | ("\\" ~ "\"") ) ~ "\"" ~> StringWrapper
}
问题是:
答案 0 :(得分:2)
请注意,您可以使用normal* (special normal*)*
模式来加快解析速度。在Java中:
Rule Normal()
{
return NoneOf("\\\"");
}
Rule Special()
{
return String("\\\"");
}
Rule NSN()
{
return Sequence(
ZeroOrMore(Normal()),
ZeroOrMore(Special(), ZeroOrMore(Normal()))
);
}
Rule DoubleQuotedString()
{
return Sequence('"', NSN(), '"');
}
答案 1 :(得分:1)
其实我找到了解决方案!
此代码效果很好。实际上,我的IDE高举了我前面例子中的这部分代码
zeroOrMore( noneOf("\"\\") | ("\\" ~ "\"") )
的类型为Rule0。我强迫它去Rule1 而且,现在它有效。
def doubleQouteBody: Rule1[StringWrapper] = rule {
zeroOrMore( noneOf("\"\\") | ("\\" ~ "\"") ) ~> StringWrapper
}
def doubleQuoted: Rule1[StringWrapper] = rule { //same for singlequoted
"\"" ~ doubleQouteBody ~ "\""
}