Abbie's Haskell compiler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

140 lines
2.6 KiB

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)