더 많은 파서 결합자를 사용하여 Scala Parser Combinator library을 확장 할 수 있습니까? 어쩌면 래퍼를 사용하여 확장 할 수 있습니까? 사용자 지정 동작을 사용하여 새 Parser Combinator를 추가하려고합니다. 현재 해결책은 파일 (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"
을 사용할 수 없다는 것입니다.
당신이 의미하는 것이 분명하지 않다면, 당신은 확실히 이러한 클래스들을 서브 클래스화할 수 있습니다. – Brian
@ 브레인 감사합니다. 이 클래스의 하위 클래스는 어떻게 만들 수 있습니까? https://github.com/scala/scala-parser-combinators/blob/1.0.x/shared/src/main/scala/scala/util/parsing/combinator/Parsers. 스칼라 # L230 – user1091344