phaser-0.2.0.0: Incremental multiple pass parser library.

Codec.Phaser.Common

Description

Common functions which do not need to be in Core, mostly for using Phases and Automatons as parsers.

Synopsis

# Documentation

data Position Source #

A data type for describing a position in a text file. Constructor arguments are row number and column number.

Constructors

 Position !Int !Int

Instances

 Source # Methods Source # Methods(<) :: Position -> Position -> Bool #(>) :: Position -> Position -> Bool # Source # Methods Source # MethodsshowList :: [Position] -> ShowS #

satisfy :: (i -> Bool) -> Phase p i o i Source #

Consume one input, return it if it matches the predicate, otherwise fail.

match :: Eq i => i -> Phase p i o i Source #

Consume one input, if it's equal to the parameter then return it, otherwise fail.

match specialized to Char

Case insensitive version of char

string :: Eq i => [i] -> Phase p i o [i] Source #

Match a list of input values

Match a string (case insensitive)

integerDecimal :: Num a => Phase p Char o a Source #

Parse a standard base 10 integer

Parse a standard positive base 10 integer

decimal :: Fractional a => Phase p Char o a Source #

Parse a number from decimal digits and "."

directHex :: Num a => Phase p Char o a Source #

hex :: Num a => Phase p Char o a Source #

Parse a hexadecimal number prefixed with Ox

positiveInteger :: Num a => Phase p Char o a Source #

Parse a positive integer from either decimal or hexadecimal format

integer :: Num a => Phase p Char o a Source #

Parse a number either from decimal digits or from hexadecimal prefixed with "0x"

countChar :: Phase Position i o () Source #

Move the position counter one character to the right

countLine :: Phase Position i o () Source #

Move the position counter to the next line

Count the lines and characters from the input before yielding them again. If the phase pipeline does not include this or similar: parsing errors will not report the correct position.

parse :: Phase Position i o a -> [i] -> Either [(Position, [String])] [a] Source #

Use a Phase as a parser. Note that unlike other parsers the reported position in the input when the parser fails is the position reached when all parsing options are exhausted, not the beginning of the failing token. Since the characters may be counted nondeterministically: if multiple errors are returned the reported error position may be different for each error report.

sepBy :: Phase p i o a -> Phase p i o s -> Phase p i o [a] Source #

sepBy p sep parses zero or more occurrences of p, separated by sep. Returns a list of values returned by p.

sepBy1 :: Phase p i o a -> Phase p i o s -> Phase p i o [a] Source #

sepBy1 p sep parses one or more occurrences of p, separated by sep. Returns a list of values returned by p.

munch :: (i -> Bool) -> Phase p i o [i] Source #

Parses the first zero or more values satisfying the predicate. Always succeds, exactly once, having consumed all the characters Hence NOT the same as (many (satisfy p))

munch1 :: (i -> Bool) -> Phase p i o [i] Source #

Parses the first one or more values satisfying the predicate. Always succeds, exactly once, having consumed all the characters Hence NOT the same as (some (satisfy p))

parseFile :: Phase Position Word8 o a -> FilePath -> IO (Either [(Position, [String])] [a]) Source #

Run a parser on input from a file. Input is provided as bytes, if characters are needed: a decoding phase such as utf8_stream or latin1 may be used

Decode bytes to characters using the Latin1 (ISO8859-1) encoding