Scala 添加更多解析器组合符

Scala 添加更多解析器组合符,scala,parser-combinators,Scala,Parser Combinators,是否可以使用更多的解析器组合器(可能是借助包装器)来扩展?我正在尝试添加一个具有自定义行为的新解析器组合器。我当前的解决方案是采用文件(Parsers.scala、RegexParsers.scala、和SubSequence.scala)并直接添加我的自定义解析器组合 编辑 在A的帮助下,我得到了以下解决方案: import scala.util.parsing.combinator._ trait JustTesting extends RegexParsers { def test

是否可以使用更多的解析器组合器(可能是借助包装器)来扩展?我正在尝试添加一个具有自定义行为的新解析器组合器。我当前的解决方案是采用文件(
Parsers.scala
RegexParsers.scala
、和
SubSequence.scala
)并直接添加我的自定义解析器组合

编辑

在A的帮助下,我得到了以下解决方案:

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”

scala Parser combinator库中有许多解析器的子类。您基本上可以按照示例进行操作

e、 g.这些都扩展了解析器:

JavaTokenParsers扩展了RegexParsers:

下面是来自web的另一个随机示例,其中一个具体对象扩展了该特性:

你可以找到许多展示如何使用图书馆的博客


一般来说,扩展一个类只需要编写
类MyClass将类扩展到扩展{}
,然后实现任何抽象方法,直到编译器停止抱怨。

不清楚您的意思,您当然可以对这些类进行子类化。@Brain谢谢,我正在尝试这样做。如何创建此类的子类: