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.
 
 

90 lines
1.8 KiB

module Frontend.Lexer.Tokens where
import qualified Data.Text as T
import Data.Text (Text)
data TokenClass
= TokVar Text
| TokCon Text
| TokString Text
| TokEof
| TokLambda
| TokArrow
| TokUnder
| TokOParen
| TokOBrace
| TokOSquare
| TokOPragma
| TokCParen
| TokCBrace
| TokCSquare
| TokCPragma
| TokDoubleColon
| TokEqual
| TokComma
| TokPipe
| TokLet
| TokIn
| TokLStart
| TokLEnd
| TokModule
| TokImport
| TokQualified
| TokAs
| TokWhere
| TokLambdaCase
| TokCase
| TokOf
| TokData
| TokSemi
deriving (Eq, Show, Ord)
tokSize :: TokenClass -> Int
tokSize (TokVar x) = T.length x
tokSize (TokCon x) = T.length x
tokSize TokEof = 0
tokSize TokLambda = 1
tokSize TokOParen = 1
tokSize TokOBrace = 1
tokSize TokOSquare = 1
tokSize TokOPragma = 3
tokSize TokCBrace = 1
tokSize TokCParen = 1
tokSize TokCSquare = 1
tokSize TokCPragma = 3
tokSize TokDoubleColon = 2
tokSize TokEqual = 1
tokSize TokComma = 1
tokSize TokSemi = 1
tokSize TokUnder = 1
tokSize TokArrow = 2
tokSize TokIn = 2
tokSize TokLStart = 0
tokSize TokLEnd = 0
tokSize TokPipe = 1
tokSize (TokString t) = 2 + T.length t
tokSize TokLambdaCase = length "\\case"
tokSize TokWhere = length "where"
tokSize TokData = length "data"
tokSize TokOf = length "of"
tokSize TokCase = length "case"
tokSize TokModule = length "module"
tokSize TokQualified = length "qualified"
tokSize TokImport = length "import"
tokSize TokLet = 3
tokSize TokAs = 2
data Token
= Token { tokenClass :: TokenClass
, tokStartLine :: !Int
, tokStartCol :: !Int
}
deriving (Eq, Show, Ord)