module UHC.Light.Compiler.Scanner.Token
( module UU.Scanner.GenToken
, reserved, valueToken, errToken, tokTpIsInt
, Token, ValTokenVal
, EnumValToken (..)
, tokenVals, tokenVal, tokenMap
, tokTpIsId
, tokTpQual )
where
import UU.Scanner.Position
import UU.Scanner.GenToken
import qualified Data.Set as Set
type ValTokenVal = [String]
type Token = GenToken String EnumValToken ValTokenVal
data EnumValToken
= TkVarid
| TkConid
| TkOp
| TkConOp
| TkString
| TkChar
| TkInteger8
| TkInteger10
| TkInteger16
| TkFraction
| TkTextnm
| TkTextln
| TkQVarid
| TkQConid
| TkQOp
| TkQConOp
| TkError
deriving (Eq, Ord)
tokenVals :: Token -> [String]
tokenVals (ValToken _ v _) = v
tokenVals (Reserved v _) = [v]
tokenVal :: Token -> String
tokenVal = concat . tokenVals
tokenMap :: (String->String) -> Token -> Token
tokenMap f (ValToken t v p) = ValToken t (map f v) p
tokenMap f (Reserved k p) = Reserved (f k) p
reserved :: String -> Pos -> Token
reserved = Reserved
valueToken :: EnumValToken -> String -> Pos -> Token
valueToken t s p = ValToken t [s] p
errToken :: String -> Pos -> Token
errToken = valueToken TkError
tokTpIsInt :: EnumValToken -> Bool
tokTpIsInt tp = tp == TkInteger8 || tp == TkInteger10 || tp == TkInteger16
tokTpIsId :: EnumValToken -> Bool
tokTpIsId
= (`Set.member` ts)
where ts = Set.fromList
[TkVarid,TkConid,TkOp,TkConOp
,TkQVarid,TkQConid,TkQOp,TkQConOp
]
tokTpQual :: EnumValToken -> EnumValToken
tokTpQual TkVarid = TkQVarid
tokTpQual TkConid = TkQConid
tokTpQual TkOp = TkQOp
tokTpQual TkConOp = TkQConOp
tokTpQual t = t