Haskell 98 parser combintors for INFOB3TC at Utrecht University.
This library tries to be a drop in replacement for uu-tc that provides error messages. However, we could not avoid additional type class constraints on parse. Notice that you might need to add Ord and ErrorsPretty constraints to your own functions and ensure your own data types are deriving (Ord, Show). See parse's documentation in the ParseLib.Abstract.Core module too.
If you are only interested in full parses of some parser p, enforce full parses on the Parser level using the ParseLib.Abstract.Derived.eof combinator as in parse (p <* eof) input. This ensures error reporting.
Report bugs to gitlab or [email protected], please.
uu-tc generates no error messages at all. Here is an example of an error messages generated by this library when I made a mistake writing a lexer.
input:3:8:
|
3 | PRODID:-//hacksw/handcal//NONSGML v1.0//EN
| ^^^^^^^^^^^
unexpected "-//hacksw/h"
expecting "2.0", "BEGIN", "DESCRIPTION", "DTEND", "DTSTAMP", "DTSTART", "END", "LOCATION", "PRODID", "SUMMARY", "UID", "VCALENDAR", "VERSION", "VEVENT", ':', crlf newline, or end of inputHere is an example of an error messages generated by this library when I made a mistake writing a parser.
input:10:
KeyClass
UpperId "Hello"
COpen
KeyVoid
LowerId "main"
POpen
PClose
COpen
LowerId "print"
POpen
> ConstInt 97
PClose
Semicolon
CClose
CClose
unexpected '(ConstInt 97)'
expecting '(PClose)'Description of uu-tc
Course software for INFOB3TC (Languages & Compilers)
This library currently contains two Haskell 98 parser combinator libraries.
The default library, available as
ParseLibor more explicitly by importingParseLib.Simple, is the one described in the lecture notes, using a type synonym as the type for parsers.The second library can be chosen by importing
ParseLib.Abstract. It defines the same functions asParseLib.Simple, but keeps the parser type abstract.
In future versions of this package, more libraries with more advanced implementations of parser combinators may be added.