【发布时间】:2016-12-27 00:20:49
【问题描述】:
是否可以使用更多解析器组合器扩展Scala Parser Combinator library,也许在包装器的帮助下?我正在尝试添加具有自定义行为的新解析器组合器。我目前的解决方案是采用文件(Parsers.scala、RegexParsers.scala 和 SubSequence.scala)并直接添加我的自定义解析器组合器。
编辑
在old Gitter message 的帮助下,我得到了以下解决方案:
import scala.util.parsing.combinator._
trait JustTesting extends RegexParsers {
def test = "a" abc "b"
abstract class TestParser[T] extends Parser[T] {
def abc[U](q: ⇒ Parser[U]): Parser[U] = { // same behaviour as ~
lazy val p = q // lazy argument
(for (a ← this; b ← p) yield b).named("abc")
}
}
override implicit def literal(s: String): TestParser[String] =
super.literal(s).asInstanceOf[TestParser[String]] // Runtime error, because a convert is not possible
}
这是要走的路吗?是否可以更改实现以便我不需要覆盖 literal 函数?还有一个问题是我不能使用"a" abc "b" abc "c"。
【问题讨论】:
-
不清楚你的意思,你当然可以继承这些类。
-
@Brain 谢谢,我正在尝试这样做。如何创建此类的子类:github.com/scala/scala-parser-combinators/blob/1.0.x/shared/src/…