Est-il possible d'étendre le Scala Parser Combinator library avec plus de combinateurs d'analyseur, peut-être avec l'aide d'un wrapper? J'essaye d'ajouter un nouveau combineur d'analyseur avec un comportement personnalisé. Ma solution actuelle consiste à adopter les fichiers (Parsers.scala
, RegexParsers.scala
et SubSequence.scala
) et d'ajouter directement mes Combinators Parser personnalisés.Ajouter plus de combinateurs d'analyseur
EDIT
Avec l'aide d'un old Gitter message, je me suis solution suivante:
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
}
Est-ce que la voie à suivre? Est-il possible de modifier l'implémentation de sorte que je n'ai pas besoin de surcharger la fonction literal
? Un problème est également que je ne peux pas utiliser "a" abc "b" abc "c"
.
pas clair ce que vous voulez dire, vous pouvez certainement sous-classe ces classes. – Brian
@Brain Merci, j'essaie de faire cela. Comment puis-je créer une sous-classe de cette classe: https://github.com/scala/scala-parser-combinators/blob/1.0.x/shared/src/main/scala/scala/util/parsing/combinator/Parsers. scala # L230 – user1091344