1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
> module Lexer (module Terminal1, module Lexer) where
> import Char
> import Terminal1
>
> lexer :: String -> [Terminal]
> lexer [] = []
> lexer ('+' : cs) = Addop Plus : lexer cs
> lexer ('-' : cs) = Addop Minus : lexer cs
> lexer ('*' : cs) = Mulop Times : lexer cs
> lexer ('/' : cs) = Mulop Divide : lexer cs
> lexer ('=' : cs) = Equal : lexer cs
> lexer ('(' : cs) = LParen : lexer cs
> lexer (')' : cs) = RParen : lexer cs
> lexer (c : cs)
> | isAlpha c = let (s, cs') = span isAlphaNum cs in ident (c : s) : lexer cs'
> | isDigit c = let (s, cs') = span isDigit cs in numeral (c : s) : lexer cs'
> | otherwise = lexer cs
|