|
|
- 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
- | 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 (TokUnqual _ x) = T.length x
- tokSize (TokQual _ x y) = T.length x + T.length y + 1
- 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)
|