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.
 
 

107 lines
1.9 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
| 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"
tokSize :: TokenClass -> Int
tokSize = length . show
data Token
= Token { tokenClass :: TokenClass
, tokStartLine :: !Int
, tokStartCol :: !Int
}
deriving (Eq, Show, Ord)