结合不同对象的Scala解析器组合器

时间:2017-05-30 00:42:43

标签: regex scala parsing parser-combinators

这是一个与Scala: How to combine parser combinators from different objects非常相似的问题,但不同之处在于那里提出的解决方案对我的用例不起作用。

考虑到Scala Parser Combinators的文档有点稀疏,我一直无法找到解决方案,但我也是Scala的新手,所以可能是我错过了一些东西。

问题陈述:我正在尝试将两个正则表达式解析器组合在一起,以非常不同的方式处理空白。根据上述问题的解决方案,我已将我想要组合的解析器组合到trait中供我的类使用。问题是一个解析器组合器会覆盖skipWhitespace的{​​{1}}成员,而另一个则不会:

RegexParsers

问题:我如何利用// This parser handles whitespace in a very particular way trait WhiteSpaceParser extends RegexParsers { override def skipWhitespace = false def myWhiteSpaceParser: Parser[Any] = // <special whitespace CFG implementation> } // This parser does not care about whitespace, except where myWhiteSpaceParser is used class DocumentParser extends RegexParsers with WhiteSpaceParser { // This parser must skip whitespace, i.e., skipWhitespace = true def myDocumentParser: Parser[Any] = // <implementation that uses myWhiteSpaceParser> } myWhiteSpaceParser内部以非常特殊的方式处理空格,其中应忽略空格(除此异常外)?一种解决方案是在任何地方处理空白,但在整个DocumentParser中需要进行大量更改,并且更容易出错。我希望还有另一种方式。

谢谢!

0 个答案:

没有答案