{
module Tokens_posn (Token(..), AlexPosn(..), alexScanTokens, token_posn) where
}
%wrapper "posn"
$digit = 0-9 -- digits
$alpha = [a-zA-Z] -- alphabetic characters
tokens :-
$white+ ;
"--".* ;
let { tok (\p s -> Let p) }
in { tok (\p s -> In p) }
$digit+ { tok (\p s -> Int p (read s)) }
[\=\+\-\*\/\(\)] { tok (\p s -> Sym p (head s)) }
$alpha [$alpha $digit \_ \']* { tok (\p s -> Var p s) }
{
-- Each right-hand side has type :: AlexPosn -> String -> Token
-- Some action helpers:
tok f p s = f p s
-- The token type:
data Token =
Let AlexPosn |
In AlexPosn |
Sym AlexPosn Char |
Var AlexPosn String |
Int AlexPosn Int
deriving (Eq,Show)
token_posn (Let p) = p
token_posn (In p) = p
token_posn (Sym p _) = p
token_posn (Var p _) = p
token_posn (Int p _) = p
}