-- LexerExpr.hs -- -- Lexer Module for the 15 minute example. -- module LexerExpr where -- needed for isChar, isAlpha, isSpace, isDigit import Data.Char -- Token datatype. data Token = TokenPlus | TokenMult | TokenMinus | TokenAnd | TokenNot | TokenNUM Int | UnknownChar Char deriving (Show,Eq) ----------------------------------------------------------------- -- Function that performs lexical analysis. lexer :: String -> [Token] lexer [] = [] lexer ('+':cs) = TokenPlus : lexer cs lexer ('-':cs) = TokenMinus : lexer cs lexer ('*':cs) = TokenMult : lexer cs lexer ('!':cs) = TokenNot : lexer cs lexer ('&':'&':cs) = TokenAnd : lexer cs lexer (c:cs) | isSpace c = lexer cs | isDigit c = lexNum (c:cs) | True = UnknownChar c : lexer cs lexNum cs = TokenNUM (read num) : lexer rest where (num,rest) = span isDigit cs