multiple errors with different positions using megaparsec
Asked Answered
A

1

3

I'm going to use megaparsec for parsing a programming language for university project. However, I searched for finding a way to report multiple errors.

I know about withRecovery and I saw this issue but I didn't find about the case where errors happen on different positions.

for example in this java code :

class A
{ 
    public get() // line 3 column 10
    {
        return x // line 5 column 22
    }
}

There are error1 "expected type at line 3 column 10" and error2 "missing semicolon at line 5 column 22"

I know I can combine error messages with failure but how about multiple positions ? How do I do that ?

Auroreaurous answered 23/9, 2016 at 18:43 Comment(2)
Here's a blog post about the introduction of withRecovery.Espinosa
@Espinosa thanks , I saw it but it makes ParseError part of the result of the parser, when you call runParser it will return Either (ParseError ...) (Either (ParseError ...) a) which seems kind of ugly to me ?!!Auroreaurous
H
0

If you're sure about Alec's suggestion, but don't want to have Either (ParseError ...) (Either (ParseError ...) a), you can just use Control.Monad.join on that value to turn it into an Either (ParseError ...) a. Sorry if this wasn't too helpful

Homopolar answered 26/9, 2016 at 3:21 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.