Вам необходимо указать, как обрабатывать пробелы , например, следующее не работает:
import fastparse._
import fastparse.NoWhitespace._
def ab[_:P] = P("a" ~ "b")
assert(parse("a b", ab(_)).isSuccess)
, потому что "a b"
содержит пробелы, а следующие проходит
import fastparse._
import fastparse.SingleLineWhitespace._
def ab[_:P] = P("a" ~ "b")
assert(parse("a b", ab(_)).isSuccess)
потому что import fastparse.SingleLineWhitespace._
предоставляет потребителя пробела. Если мы посмотрим на определение ~
def ~[V, R](other: P[V])
(implicit s: Implicits.Sequencer[T, V, R],
whitespace: P[Any] => P[Unit],
ctx: P[_]): P[R] = macro MacroImpls.parsedSequence[T, V, R]
, мы увидим требование implicit whitespace: P[Any] => P[Unit]
, которое объясняет ошибку No implicit view available
. Импорт пробелов предоставляет эту возможность, например
object NoWhitespace {
implicit object noWhitespaceImplicit extends (ParsingRun[_] => ParsingRun[Unit]){
def apply(ctx: ParsingRun[_]) = ctx.freshSuccessUnit()
}
}
, где мы видим ParsingRun[_] => ParsingRun[Unit]
неявную функцию.