@hackage uu-tc-error0.4.0.1

Haskell 98 parser combintors for INFOB3TC at Utrecht University

  • Installation

  • Dependencies (2)

    • base ^>=4.12.0.0 || ^>=4.13.0.0 || ^>=4.14.0.0 || ^>=4.15.0.0 || ^>=4.16.0.0 || ^>=4.17.0.0 || ^>=4.18.0.0 || ^>=4.19.0.0 || ^>=4.20.0.0
    • uu-tc-error-error ^>=0.3.0.0
    • Show all…
  • Dependents (0)

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 p.rednaz@googlemail.com, 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 importing ParseLib.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 as ParseLib.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.