Возможно ли продлить Scala Parser Combinator library с помощью большего количества Комбиниров Parser, возможно, с помощью обертки? Я пытаюсь добавить новый Parser Combinator с обычным поведением. Мое текущее решение состоит в том, чтобы принять файлы (Parsers.scala
, RegexParsers.scala
и SubSequence.scala
) и добавить мои собственные комбайнеры Parser напрямую.Добавить комнайторы парсера
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