Я работаю с собственной библиотекой комбинатора синтаксического анализатора в Scala, и я хотел бы анализировать некоторые части моего ввода, но не другие. В частности, я хотел бы отбросить весь произвольный текст между входами, который меня интересует. Например, с этим вводом:
begin
Text I care about
Text I care about
DONT CARE
Text I don't care about
begin
More text I care about
...
Прямо сейчас у меня есть:
object MyParser extends RegexParsers {
val beginToken: Parser[String] = "begin"
val dontCareToken: Parser[String] = "DONT CARE"
val text: Parser[String] = not(dontCareToken) ~> """([^\n]+)""".r
val document: Parser[String] = begin ~> text.+ <~ dontCareToken ^^ { _.mkString("\n") }
val documents: Parser[Iterable[String]] = document.+
но я не уверен, как игнорировать текст, идущий после DONT CARE
и до следующего begin
. В частности, я не хочу делать никаких предположений о форме этого текста, я просто хочу снова начать синтаксический анализ со следующего оператора begin
.