|
|
- 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 = "<EOF>"
-
- 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)
|