-- scanner for a grammar with the following set of terminal symbols -- -- T = { "use" , "dcl" , ';' , '(' , ')' , var } -- -- where var is a peudo-terminal symbol defined by the regular expressionn -- -- var = [a-zA-Z]+ data Token = TokenUSE | TokenDCL | TokenSemiColon | TokenOB | TokenCB | TokenVar String deriving Show lexer :: String -> [Token] lexer [] = [] lexer (c:cs) | isSpace c = lexer cs | isAlpha c = lexSTR (c:cs) lexer (';':cs) = TokenSemiColon : lexer cs lexer ('(':cs) = TokenOB : lexer cs lexer (')':cs) = TokenCB : lexer cs lexSTR cs = case span isAlpha cs of ("use",rest) -> TokenUSE : lexer rest ("dcl",rest) -> TokenDCL : lexer rest (var,rest) -> TokenVar var : lexer rest -- runParser = parser . lexer