Scala Parser Combinator libraryを複数のパーサーコンビネータで拡張することは可能でしょうか(おそらくラッパーの助けを借りて)?私は、カスタム動作で新しいParser Combinatorを追加しようとしています。私の現在の解決策は、ファイル(Parsers.scala
、RegexParsers.scala
、およびSubSequence.scala
)を採用して、私のカスタムパーサーコンビネータを直接追加することです。パーサーコンビネータをさらに追加する
EDIT
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"
を使用できないという問題もあります。
あなたが何を意味するかわからない場合は、これらのクラスを確実にサブクラス化することができます。 – Brian
@Brainありがとう、私はそれをしようとしています。このクラスのサブクラスを作成するにはどうすればいいですか:https://github.com/scala/scala-parser-combinators/blob/1.0.x/shared/src/main/scala/scala/util/parsing/combinator/Parsersスカラ#L230 – user1091344