From 6688918349a6b3cd85e57ea3dea23dee4c6b14b7 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Fri, 18 Feb 2011 20:57:39 -0500 Subject: [PATCH] return position at which parsing fails --- util/complete/Parser.scala | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/util/complete/Parser.scala b/util/complete/Parser.scala index 5adfa222d..d3c8e766c 100644 --- a/util/complete/Parser.scala +++ b/util/complete/Parser.scala @@ -214,19 +214,18 @@ trait ParserMain // intended to be temporary pending proper error feedback def result[T](p: Parser[T], s: String): Either[(String,Int), T] = { - /* def loop(i: Int, a: Parser[T]): Either[(String,Int), T] = - a.err match + def loop(i: Int, a: Parser[T]): Either[(String,Int), T] = + if(a.valid) { - case Some(msg) => Left((msg, i)) - case None => - val ci = i+1 - if(ci >= s.length) - a.resultEmpty.toRight(("", i)) - else - loop(ci, a derive s(ci)) + val ci = i+1 + if(ci >= s.length) + a.resultEmpty.toRight(("Unexpected end of input", ci)) + else + loop(ci, a derive s(ci) ) } - loop(-1, p)*/ - apply(p)(s).resultEmpty.toRight(("Parse error", 0)) + else + Left(("Parse error",i)) + loop(-1, p) } def apply[T](p: Parser[T])(s: String): Parser[T] =