|
module Presyntax.Tokens where
|
|
|
|
import qualified Data.Text as T
|
|
import Data.Text (Text)
|
|
|
|
data TokenClass
|
|
= TokVar Text
|
|
| TokEof
|
|
|
|
| TokLambda
|
|
| TokArrow
|
|
| TokUnder
|
|
|
|
| TokOParen
|
|
| TokOBrace
|
|
| TokOSquare
|
|
|
|
| TokCParen
|
|
| TokCBrace
|
|
| TokCSquare
|
|
|
|
-- {-# #-}
|
|
| TokOPragma
|
|
| TokCPragma
|
|
|
|
| TokPrim
|
|
|
|
| TokReplLet
|
|
| TokReplT Text
|
|
|
|
| TokStar
|
|
| TokColon
|
|
| TokEqual
|
|
| TokComma
|
|
|
|
| TokPi1
|
|
| TokPi2
|
|
| TokLet
|
|
| TokIn
|
|
| TokLStart
|
|
| TokLEnd
|
|
|
|
| TokAnd
|
|
| TokOr
|
|
|
|
| TokAs
|
|
| TokWhere
|
|
| TokCase
|
|
|
|
| TokPostulate
|
|
| TokData
|
|
|
|
| TokSemi
|
|
deriving (Eq, Show, Ord)
|
|
|
|
tokSize :: TokenClass -> Int
|
|
tokSize (TokVar x) = T.length x
|
|
tokSize TokEof = 0
|
|
tokSize TokLambda = 1
|
|
tokSize TokOParen = 1
|
|
tokSize TokOBrace = 1
|
|
tokSize TokOSquare = 1
|
|
tokSize TokCBrace = 1
|
|
tokSize TokCParen = 1
|
|
tokSize TokCSquare = 1
|
|
tokSize TokCPragma = 3
|
|
tokSize TokOPragma = 3
|
|
tokSize TokPrim = length "PRIMITIVE"
|
|
tokSize TokStar = 1
|
|
tokSize TokColon = 1
|
|
tokSize TokEqual = 1
|
|
tokSize TokComma = 1
|
|
tokSize TokSemi = 1
|
|
tokSize TokUnder = 1
|
|
tokSize TokArrow = 2
|
|
tokSize TokPi1 = 2
|
|
tokSize TokPi2 = 2
|
|
tokSize TokReplLet = 4
|
|
tokSize TokAnd = 2
|
|
tokSize TokOr = 2
|
|
tokSize TokAs = 2
|
|
tokSize (TokReplT s) = T.length s
|
|
tokSize TokLet = 3
|
|
tokSize TokIn = 2
|
|
tokSize TokLStart = 0
|
|
tokSize TokLEnd = 0
|
|
tokSize TokWhere = length "where"
|
|
tokSize TokData = length "data"
|
|
tokSize TokCase = length "case"
|
|
tokSize TokPostulate = length "postulate"
|
|
|
|
data Token
|
|
= Token { tokenClass :: TokenClass
|
|
, tokStartLine :: !Int
|
|
, tokStartCol :: !Int
|
|
}
|
|
deriving (Eq, Show, Ord)
|