phaser-1.0.1.0: Incremental multiple pass parser library.

CopyrightJeremy List
LicenseBSD-3
Maintainerquick.dudley@gmail.com
Safe HaskellNone
LanguageHaskell2010

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 

class PhaserType s where Source #

Class for types which consume and produce incremental input and output.

Methods

toAutomaton :: Monoid p => s p i o a -> Automaton p i o a Source #

fromAutomaton :: Monoid p => Automaton p i o a -> s p i o a Source #

toPhase :: Monoid p => s p i o a -> Phase p i o a Source #

fromPhase :: Monoid p => Phase p i o a -> s p i o a Source #

($#$) :: Monoid p => s p b c x -> (c -> t) -> s p b t x infixl 5 Source #

Instances
PhaserType Phase Source # 
Instance details

Defined in Codec.Phaser.Core

Methods

toAutomaton :: Monoid p => Phase p i o a -> Automaton p i o a Source #

fromAutomaton :: Monoid p => Automaton p i o a -> Phase p i o a Source #

toPhase :: Monoid p => Phase p i o a -> Phase p i o a Source #

fromPhase :: Monoid p => Phase p i o a -> Phase p i o a Source #

($#$) :: Monoid p => Phase p b c x -> (c -> t) -> Phase p b t x Source #

PhaserType Automaton Source # 
Instance details

Defined in Codec.Phaser.Core

Methods

toAutomaton :: Monoid p => Automaton p i o a -> Automaton p i o a Source #

fromAutomaton :: Monoid p => Automaton p i o a -> Automaton p i o a Source #

toPhase :: Monoid p => Automaton p i o a -> Phase p i o a Source #

fromPhase :: Monoid p => Phase p i o a -> Automaton p i o a Source #

($#$) :: Monoid p => Automaton p b c x -> (c -> t) -> Automaton p b t x Source #

class Standardized r a where Source #

Class for types which have standardized or otherwise unambiguous representations. Implementations of regular may be more permissive than the corresponding Read instance (if any).

Methods

regular :: Monoid p => Phase p r o a Source #

Instances
Standardized Char Bool Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Bool Source #

Standardized Char Double Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Double Source #

Standardized Char Float Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Float Source #

Standardized Char Int Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Int Source #

Standardized Char Int8 Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Int8 Source #

Standardized Char Int16 Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Int16 Source #

Standardized Char Int32 Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Int32 Source #

Standardized Char Int64 Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Int64 Source #

Standardized Char Integer Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Integer Source #

Standardized Char Word Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Word Source #

Standardized Char Word8 Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Word8 Source #

Standardized Char Word16 Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Word16 Source #

Standardized Char Word32 Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Word32 Source #

Standardized Char Word64 Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o Word64 Source #

(Integral a, Standardized Char a) => Standardized Char (Ratio a) Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

regular :: Monoid p => Phase p Char o (Ratio a) Source #

data Trie c a Source #

Tries in this module can be used for creating more efficient parsers when several of the recognized strings begin with the same few characters

Instances
Ord c => Semigroup (Trie c a) Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

(<>) :: Trie c a -> Trie c a -> Trie c a #

sconcat :: NonEmpty (Trie c a) -> Trie c a #

stimes :: Integral b => b -> Trie c a -> Trie c a #

Ord c => Monoid (Trie c a) Source # 
Instance details

Defined in Codec.Phaser.Common

Methods

mempty :: Trie c a #

mappend :: Trie c a -> Trie c a -> Trie c a #

mconcat :: [Trie c a] -> Trie c a #

newTrie :: Ord c => [c] -> a -> Trie c a Source #

Create a trie which maps a single string to an object. Analogous to singleton.

fromTrie :: (Monoid p, PhaserType s, Ord c) => Trie c a -> s p c o a Source #

Create a Phase or Automaton from a Trie

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

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

match :: (Eq i, Monoid p) => i -> Phase p i o i Source #

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

char :: Monoid p => Char -> Phase p Char o Char Source #

match specialized to Char

iChar :: Monoid p => Char -> Phase p Char o Char Source #

Case insensitive version of char

string :: (Eq i, Monoid p) => [i] -> Phase p i o [i] Source #

Match a list of input values

iString :: Monoid p => String -> Phase p Char o String Source #

Match a string (case insensitive)

(<#>) :: (PhaserType d, PhaserType s, Monoid p) => s p b c (a -> z) -> d p c t a -> Automaton p b t z infixl 5 Source #

integerDecimal :: (Num a, Monoid p) => Phase p Char o a Source #

Parse a standard base 10 integer

positiveIntegerDecimal :: (Num a, Monoid p) => Phase p Char o a Source #

Parse a standard positive base 10 integer

decimal :: (Fractional a, Monoid p) => Phase p Char o a Source #

Parse a number from decimal digits, "-", and "."

scientificNotation :: (Fractional a, Monoid p) => Phase p Char o a Source #

Parse a number from standard decimal format or from scientific notation.

directHex :: (Num a, Monoid p) => Phase p Char o a Source #

Take some hexadecimal digits and parse a number from hexadecimal

hex :: (Num a, Monoid p) => Phase p Char o a Source #

Parse a hexadecimal number prefixed with Ox

positiveInteger :: (Num a, Monoid p) => Phase p Char o a Source #

Parse a positive integer from either decimal or hexadecimal format

integer :: (Num a, Monoid p) => 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

trackPosition :: Phase Position Char Char () Source #

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. Unix, Windows, Mac-OS Classic, and Acorn newline formats are all recognized.

normalizeNewlines :: Monoid p => Phase p Char Char () Source #

Converts all line separators into Unix format.

parse :: PhaserType s => s 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 :: Monoid p => 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 :: Monoid p => 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 :: Monoid p => (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 :: Monoid p => (i -> Bool) -> Phase p i o [i] Source #

Parses the first one or more values satisfying the predicate. Succeeds if at least one value matches, having consumed all the characters Hence NOT the same as (some (satisfy p))

parseFile :: PhaserType s => s 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.

parseHandle :: PhaserType s => s Position Word8 o a -> Handle -> IO (Either [(Position, [String])] [a]) Source #

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

latin1 :: Monoid p => Phase p Word8 Char () Source #

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