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 input
Here 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
ParseLib
or 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.