yapb-0.1.0: app/polyrpc/Lexer.hs
module Lexer(lexerSpec) where
import Prelude hiding (EQ)
import CommonParserUtil
import Token
mkFn :: Token -> (String -> Maybe Token)
mkFn tok = \text -> Just tok
skip :: String -> Maybe Token
skip = \text -> Nothing
lexerSpec :: LexerSpec Token
lexerSpec = LexerSpec
{
endOfToken = END_OF_TOKEN,
lexerSpecList =
[ ("[ \t\n]", skip),
("\\/\\/[^\n]*\n" , skip),
("\\(" , mkFn OPEN_PAREN_TOKEN),
("\\)" , mkFn CLOSE_PAREN_TOKEN),
("\\{" , mkFn OPEN_BRACE_TOKEN),
("\\}" , mkFn CLOSE_BRACE_TOKEN),
("\\[" , mkFn OPEN_BRACKET_TOKEN),
("\\]" , mkFn CLOSE_BRACKET_TOKEN),
("-[a-zA-Z][a-zA-Z0-9]*->", mkFn LOCFUN_TOKEN),
("\\." , mkFn DOT_TOKEN),
("\\," , mkFn COMMA_TOKEN),
("\\;" , mkFn SEMICOLON_TOKEN),
("\\:=" , mkFn ASSIGN_TOKEN),
("\\:" , mkFn COLON_TOKEN),
("==" , mkFn EQUAL_TOKEN),
("=>" , mkFn ALT_ARROW_TOKEN),
("=" , mkFn DEF_TOKEN),
("\\|" , mkFn BAR_TOKEN),
("\\\\" , mkFn BACKSLASH_TOKEN),
("\\@" , mkFn AT_TOKEN),
("!=" , mkFn NOTEQUAL_TOKEN),
("!" , mkFn NOT_TOKEN),
("<=" , mkFn LESSEQUAL_TOKEN),
("<" , mkFn LESSTHAN_TOKEN),
(">=" , mkFn GREATEREQUAL_TOKEN),
(">" , mkFn GREATERTHAN_TOKEN),
("\\+" , mkFn ADD_TOKEN),
("-" , mkFn SUB_TOKEN),
("\\*" , mkFn MUL_TOKEN),
("\\/" , mkFn DIV_TOKEN),
("[0-9]+" , mkFn INTEGER_TOKEN),
-- ("Unit" , mkFn UNIT_TYPE_TOKEN),
-- ("Int" , mkFn INTEGER_TYPE_TOKEN),
-- ("Bool" , mkFn BOOLEAN_TYPE_TOKEN),
-- ("String" , mkFn STRING_TYPE_TOKEN),
("(True|False)" , mkFn BOOLEAN_TOKEN),
("\"[^\"]*\"" , mkFn STRING_TOKEN),
("data" , mkFn KEYWORD_DATA_TOKEN),
("let" , mkFn KEYWORD_LET_TOKEN),
("end" , mkFn KEYWORD_END_TOKEN),
("if" , mkFn KEYWORD_IF_TOKEN),
("then" , mkFn KEYWORD_THEN_TOKEN),
("else" , mkFn KEYWORD_ELSE_TOKEN),
("case" , mkFn KEYWORD_CASE_TOKEN),
("or" , mkFn KEYWORD_OR_TOKEN),
("and" , mkFn KEYWORD_AND_TOKEN),
("[a-zA-Z_][a-zA-Z0-9_]*" , mkFn IDENTIFIER_TOKEN)
]
}