You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
implicitdefliteral(s: String):Parser[String] =newParser[String] {
defapply(in: Input) = {
valsource= in.source
valoffset= in.offset
valstart= handleWhiteSpace(source, offset)
vari=0varj= start
while (i < s.length && j < source.length && s.charAt(i) == source.charAt(j)) {
i +=1
j +=1
}
if (i == s.length)
Success(source.subSequence(start, j).toString, in.drop(j - offset), None)
else {
valfound=if (start == source.length()) "end of source"else"'"+source.charAt(start)+"'"Failure("'"+s+"' expected but "+found+" found", in.drop(start - offset))
}
}
}
Note the error reporting at the end where the index of the mismatch is reported as start. If the string is "apple", and the input "...apply...", the mismatch is at the character 'y', which is pointed to by the variable j, not at the character 'a', which is pointed to by start.
println(parse("apple", "apply"))
Failure('apple' expected but 'a' found,CharSequenceReader('a', ...))
A potential fix may be as follows:
valrest= in.drop(start - offset)
if (start == source.length()) Failure(s"'$s' expected but end of source found", rest)
elseFailure(s"'$s' expected but '${source.charAt(j)}' found at index $j", rest)
The text was updated successfully, but these errors were encountered:
Note the error reporting at the end where the index of the mismatch is reported as
start
. If the string is"apple"
, and the input"...apply..."
, the mismatch is at the character'y'
, which is pointed to by the variablej
, not at the character'a'
, which is pointed to bystart
.A potential fix may be as follows:
The text was updated successfully, but these errors were encountered: