module Frontend.Lexer.Tokens where import qualified Data.Text as T import Data.Text (Text) data IdClass = ConId | VarId deriving (Eq, Show, Ord) data TokenClass = TokUnqual IdClass Text | TokQual IdClass Text Text | TokUnqualOp IdClass Text | TokQualOp IdClass Text Text | TokString Text | TokEof | TokLambda | TokArrow | TokUnder | TokOParen | TokOBrace | TokOSquare | TokOPragma | TokCParen | TokCBrace | TokCSquare | TokCPragma | TokDoubleColon | TokTick | TokEqual | TokComma | TokPipe | TokLet | TokIn | TokLStart | TokLEnd | TokModule | TokImport | TokQualified | TokAs | TokWhere | TokCase | TokOf | TokForeign | TokExport | TokSafe | TokUnsafe | TokCCall | TokData | TokSemi deriving (Eq, Ord) instance Show TokenClass where show (TokUnqual _ id) = T.unpack id show (TokQual _ ns id) = T.unpack ns ++ '.':T.unpack id show (TokUnqualOp _ id) = T.unpack id show (TokQualOp _ ns id) = T.unpack ns ++ '.':T.unpack id show (TokString text) = show text show TokEof = "" show TokLambda = "\\" show TokArrow = "->" show TokUnder = "_" show TokOParen = "(" show TokOBrace = "{" show TokOSquare = "[" show TokOPragma = "{-" show TokCParen = ")" show TokCBrace = "}" show TokCSquare = "]" show TokCPragma = "-}" show TokDoubleColon = "::" show TokTick = "`" show TokEqual = "=" show TokComma = "," show TokPipe = "|" show TokSemi = ";" show TokLet = "let" show TokIn = "in" show TokLStart = "" show TokLEnd = "" show TokModule = "module" show TokImport = "import" show TokQualified = "qualified" show TokAs = "as" show TokWhere = "where" show TokCase = "case" show TokOf = "of" show TokData = "data" show TokForeign = "foreign" show TokExport = "export" show TokSafe = "safe" show TokUnsafe = "unsafe" show TokCCall = "ccall" isKeywordToken :: TokenClass -> Bool isKeywordToken TokLet = True isKeywordToken TokIn = True isKeywordToken TokModule = True isKeywordToken TokImport = True isKeywordToken TokQualified = True isKeywordToken TokAs = True isKeywordToken TokWhere = True isKeywordToken TokCase = True isKeywordToken TokOf = True isKeywordToken TokForeign = True isKeywordToken TokExport = True isKeywordToken TokSafe = True isKeywordToken TokUnsafe = True isKeywordToken TokCCall = True isKeywordToken TokData = True isKeywordToken _ = False tokSize :: TokenClass -> Int tokSize = length . show data Token = Token { tokenClass :: TokenClass , tokStartLine :: !Int , tokStartCol :: !Int } deriving (Eq, Show, Ord)