Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

err Not Working as (I) Expected #29

Closed
Assignees
Milestone
@kevinmeredith

Description

In the following Parser:

object Foo extends JavaTokenParsers { 
 def word(x: String) = s"\\b$x\\b".r
 lazy val expr = aSentence | something
 lazy val aSentence = noun ~ verb ~ obj
 lazy val noun = word("noun")
 lazy val verb = word("verb") | err("not a verb!")
 lazy val obj = word("object")
 lazy val something = word("FOO")
}

It will parse noun verb object.

scala> Foo.parseAll(Foo.expr, "noun verb object")
res1: Foo.ParseResult[java.io.Serializable] = [1.17] parsed: ((noun~verb)~object)

But, when entering a valid noun, but an invalid verb, why won't the err("not a verb!") return an Error with that particular error message?

scala> Foo.parseAll(Foo.expr, "noun vedsfasdf")
res2: Foo.ParseResult[java.io.Serializable] =
[1.6] failure: string matching regex `\bverb\b' expected but `v' found
noun vedsfasdf
 ^

credit: Thanks to Travis Brown for explaining the need for the word function here.

@dcsobral provides a thorough explanation here - http://stackoverflow.com/questions/25147833/using-err-in-a-child-parser as to why this behavior is occurring.

I don't completely understand his answer (re-reading it a few more times), but shouldn't err(... in my above example result in that particular Error?

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    AltStyle によって変換されたページ (->オリジナル) /