|
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)
|