Module SQLParserTypes

Defines datatypes and corresponding constructor functions, combinators and selectors used by the SQLParser

Author: Julia Krone

Version: 0.1

Summary of exported operations:

newSPM :: Pos -> a -> [Token] -> SPM a   
constructor function for SPM
newEmptySPM :: Pos -> [Token] -> EmptySPM   
constructor function for an EmptySPM
initializeSPM :: a -> EmptySPM -> SPM a   
initializes a SPM - return function of SPMParser Symboltable are passed from the EmptySPM
concatSPMs :: (a -> b -> c) -> SPM a -> SPM b -> SPM c   
hasToken :: EmptySPM -> Bool   
Returns whether the List of Token contained by the given EmptySPM is not empty
setToken :: [Token] -> EmptySPM -> EmptySPM   
Sets the List of Token.
token :: EmptySPM -> [Token]   
Returns the list of Token.
headToken :: EmptySPM -> Token   
Partially defined! Returns first token of the non-empty List of Token.
continue :: EmptySPM -> EmptySPM   
Cuts the first Token of the List without doing anything else.
liftSPM :: (a -> b) -> (EmptySPM -> SPM a) -> EmptySPM -> SPM b   
Lift: Applies a given function to the result of the given parser.
bindSPM :: (EmptySPM -> SPM a) -> (a -> EmptySPM -> SPM b) -> [Token] -> EmptySPM -> SPM b   
Bind-function for SPMParser.
bindDefSPM :: (EmptySPM -> SPM a) -> a -> (a -> EmptySPM -> SPM b) -> [Token] -> EmptySPM -> SPM b   
Bind-function for SPMParser with superior error menagement.
(.~>.) :: (EmptySPM -> Either EmptySPM (SPM a)) -> (EmptySPM -> SPM a) -> EmptySPM -> SPM a   
Concats a terminal-Parser to a SPMParser.
(.<~.) :: (EmptySPM -> SPM a) -> (EmptySPM -> Either EmptySPM (SPM a)) -> EmptySPM -> SPM a   
Concats a SPMParser to a following terminal-Parser.
combineSPMs :: (a -> b -> c) -> (EmptySPM -> SPM a) -> (EmptySPM -> SPM b) -> EmptySPM -> SPM c   
Combines two SPMParsers in an alternate manner: Both parsers are applied independently , the second one taking the list of token altered by the first one.
proceedWith :: Token -> EmptySPM -> EmptySPM   
Drop token until given token or Semi is reached.
proceedWithOneOf :: [Token] -> EmptySPM -> EmptySPM   
Drop Token until one of the token in the list or Semi is reached.
proceedAfter :: Token -> EmptySPM -> EmptySPM   
Drop Token including the given one.
terminal :: Token -> EmptySPM -> Either EmptySPM (SPM a)   
Parses a terminal.
terminalOrProc :: Token -> [Token] -> EmptySPM -> Either EmptySPM (SPM a)   
Alternate terminal-parser: Additionally takes token with which to proceed in case of an error.
terminalOrConsume :: Token -> EmptySPM -> Either EmptySPM (SPM a)   
alternative terminal parser which in case of error consumes all token including the given one
parseError :: String -> EmptySPM -> SPM a   
Returns Error with given message.
emptyTkErr :: EmptySPM -> SPM a   
Returns Standarderror in case the TokenList is empty.

Exported datatypes:


SPM

Datatype for organization of the parsing process used in the monadic structure SPMParser (therefore its name). Note that the SPM itself is not used as a monad here although corresponding functions (satisfying monadic laws) could easily be defined. Consists of the position of integrated Code, a PM which contains the result/errors and warnings that were calculated before and the list of SQLToken which to parse. It is parameterized over a, which represents the result type.

Constructors:


EmptySPM

Datatype for an Empty SQLParserMonad. Same as SPM but without a result.

Constructors:


SPMParser

Monadic structure which is the basic type for parsing process. Takes an EmptySPM and passes it down, parsing the Token and generating the result which is finally passed back. Returns the SPM with the result which is constructed bottom-up.

Type synonym: SPMParser a = EmptySPM -> SPM a


Exported operations:

newSPM :: Pos -> a -> [Token] -> SPM a   

constructor function for SPM

Example call:
(newSPM pos ele tks)
Parameters:
  • pos : position of the integrated Code
  • ele : a value of type a to initialize the PM
  • tks : list of Token which to parse
Returns:
an initialized SQLParserMonad with initialized PM

newEmptySPM :: Pos -> [Token] -> EmptySPM   

constructor function for an EmptySPM

Example call:
(newEmptySPM pos tks)
Parameters:
  • pos : position of the integrated code
  • tks : list of Token which to parse
Returns:
an EmptySPM
Further infos:
  • solution complete, i.e., able to compute all solutions

initializeSPM :: a -> EmptySPM -> SPM a   

initializes a SPM - return function of SPMParser Symboltable are passed from the EmptySPM

concatSPMs :: (a -> b -> c) -> SPM a -> SPM b -> SPM c   

hasToken :: EmptySPM -> Bool   

Returns whether the List of Token contained by the given EmptySPM is not empty

Example call:
(hasToken espm)
Parameters:
  • espm : the EmptySPM
Returns:
False if list is empty, true otherwise

setToken :: [Token] -> EmptySPM -> EmptySPM   

Sets the List of Token.

Example call:
(setToken tks espm)
Parameters:
  • tks : the list of Token
  • espm : the EmptySPM
Returns:
the altered EmptySPM
Further infos:
  • solution complete, i.e., able to compute all solutions

token :: EmptySPM -> [Token]   

Returns the list of Token.

Example call:
(token espm)
Parameters:
  • espm : the EmptySPM
Further infos:
  • solution complete, i.e., able to compute all solutions

headToken :: EmptySPM -> Token   

Partially defined! Returns first token of the non-empty List of Token.

Further infos:
  • partially defined
  • solution complete, i.e., able to compute all solutions

continue :: EmptySPM -> EmptySPM   

Cuts the first Token of the List without doing anything else. Does Nothing if List of Token is empty.

Further infos:
  • solution complete, i.e., able to compute all solutions

liftSPM :: (a -> b) -> (EmptySPM -> SPM a) -> EmptySPM -> SPM b   

Lift: Applies a given function to the result of the given parser.

bindSPM :: (EmptySPM -> SPM a) -> (a -> EmptySPM -> SPM b) -> [Token] -> EmptySPM -> SPM b   

Bind-function for SPMParser. The additional list of Token is for error recovery, normally the follow set of the piece of code that is parsed by the first parser. In case the first parser fails the second one is never invoked, the list of remaining tokes is cut until the first token that is member of the follow set.

bindDefSPM :: (EmptySPM -> SPM a) -> a -> (a -> EmptySPM -> SPM b) -> [Token] -> EmptySPM -> SPM b   

Bind-function for SPMParser with superior error menagement. In case the first parser fails, the second one is invoked with a default value and the tokens set to the next one that is element of the given list (typically the follow-set).

Example call:
(bindDefSPM parserA defEle f toks)
Parameters:
  • parserA : first parser with result type a
  • defEle : default value of type a that is used if first parser fails
  • f : second parser binding the result of the first one
  • toks : list of token to follow with if first parser fails
Returns:
SPM - result of second parser

(.~>.) :: (EmptySPM -> Either EmptySPM (SPM a)) -> (EmptySPM -> SPM a) -> EmptySPM -> SPM a   

Concats a terminal-Parser to a SPMParser. Invokes the second one just if the first one did not fail.

Further infos:
  • defined as non-associative infix operator with precedence 2

(.<~.) :: (EmptySPM -> SPM a) -> (EmptySPM -> Either EmptySPM (SPM a)) -> EmptySPM -> SPM a   

Concats a SPMParser to a following terminal-Parser. If the terminal-Parser fails, the errors are concatenated to the former otherwise the result of the SPMParser is returned.

Further infos:
  • defined as non-associative infix operator with precedence 2

combineSPMs :: (a -> b -> c) -> (EmptySPM -> SPM a) -> (EmptySPM -> SPM b) -> EmptySPM -> SPM c   

Combines two SPMParsers in an alternate manner: Both parsers are applied independently , the second one taking the list of token altered by the first one. The resulting PMs are combined afterwards.

Example call:
(combineSPMs f)
Parameters:
  • f : function to combine results
Returns:
The resulting SPM

proceedWith :: Token -> EmptySPM -> EmptySPM   

Drop token until given token or Semi is reached.

proceedWithOneOf :: [Token] -> EmptySPM -> EmptySPM   

Drop Token until one of the token in the list or Semi is reached. Tokens are tried in given order. As soon as one token is found, the remaining ones are not tried anymore.

proceedAfter :: Token -> EmptySPM -> EmptySPM   

Drop Token including the given one.

terminal :: Token -> EmptySPM -> Either EmptySPM (SPM a)   

Parses a terminal.

Returns:
EmptySPM with corresponding token consumed if there was no error. A SPM containing the error message otherwise.

terminalOrProc :: Token -> [Token] -> EmptySPM -> Either EmptySPM (SPM a)   

Alternate terminal-parser: Additionally takes token with which to proceed in case of an error.

terminalOrConsume :: Token -> EmptySPM -> Either EmptySPM (SPM a)   

alternative terminal parser which in case of error consumes all token including the given one

parseError :: String -> EmptySPM -> SPM a   

Returns Error with given message.

Example call:
(parseError errMsg espm)
Parameters:
  • errMsg : the error message
  • espm : the EmptySPM
Further infos:
  • solution complete, i.e., able to compute all solutions

emptyTkErr :: EmptySPM -> SPM a   

Returns Standarderror in case the TokenList is empty. Inserts a single semicolon as Tokenlist to avoid subsequent errors.

Further infos:
  • solution complete, i.e., able to compute all solutions