uhc-light-1.1.7.0: src/UHC/Light/Compiler/Scanner/Token.hs
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
{-# LINE 27 "src/ehc/Scanner/Token.chs" #-}
-- | The value of a Token is a [String], of length > 1 only when it encodes qualified identifiers
type ValTokenVal = [String]
type Token = GenToken String EnumValToken ValTokenVal
{-# LINE 33 "src/ehc/Scanner/Token.chs" #-}
-- | The kind of tokens
data EnumValToken
= TkVarid
| TkConid
| TkOp
| TkConOp
| TkString
| TkChar
| TkInteger8
| TkInteger10
| TkInteger16
| TkFraction
| TkTextnm
| TkTextln
| TkQVarid -- qualified variants
| TkQConid
| TkQOp
| TkQConOp
| TkError
deriving (Eq, Ord)
{-# LINE 64 "src/ehc/Scanner/Token.chs" #-}
-- | Extract the parts of a qualified identifier
tokenVals :: Token -> [String]
tokenVals (ValToken _ v _) = v
tokenVals (Reserved v _) = [v]
-- | Extract the value as a flattened string
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
{-# LINE 79 "src/ehc/Scanner/Token.chs" #-}
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
{-# LINE 90 "src/ehc/Scanner/Token.chs" #-}
tokTpIsInt :: EnumValToken -> Bool
tokTpIsInt tp = tp == TkInteger8 || tp == TkInteger10 || tp == TkInteger16
{-# LINE 95 "src/ehc/Scanner/Token.chs" #-}
tokTpIsId :: EnumValToken -> Bool
tokTpIsId
= (`Set.member` ts)
where ts = Set.fromList
[TkVarid,TkConid,TkOp,TkConOp
,TkQVarid,TkQConid,TkQOp,TkQConOp
]
{-# LINE 119 "src/ehc/Scanner/Token.chs" #-}
-- | Qualified equivalents of token kinds representing unqualified tokens
tokTpQual :: EnumValToken -> EnumValToken
tokTpQual TkVarid = TkQVarid
tokTpQual TkConid = TkQConid
tokTpQual TkOp = TkQOp
tokTpQual TkConOp = TkQConOp
tokTpQual t = t