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.

93 lines
1.9 KiB

  1. module Frontend.Lexer.Tokens where
  2. import qualified Data.Text as T
  3. import Data.Text (Text)
  4. data IdClass = ConId | VarId
  5. deriving (Eq, Show, Ord)
  6. data TokenClass
  7. = TokUnqual IdClass Text
  8. | TokQual IdClass Text Text
  9. | TokString Text
  10. | TokEof
  11. | TokLambda
  12. | TokArrow
  13. | TokUnder
  14. | TokOParen
  15. | TokOBrace
  16. | TokOSquare
  17. | TokOPragma
  18. | TokCParen
  19. | TokCBrace
  20. | TokCSquare
  21. | TokCPragma
  22. | TokDoubleColon
  23. | TokEqual
  24. | TokComma
  25. | TokPipe
  26. | TokLet
  27. | TokIn
  28. | TokLStart
  29. | TokLEnd
  30. | TokModule
  31. | TokImport
  32. | TokQualified
  33. | TokAs
  34. | TokWhere
  35. | TokLambdaCase
  36. | TokCase
  37. | TokOf
  38. | TokData
  39. | TokSemi
  40. deriving (Eq, Show, Ord)
  41. tokSize :: TokenClass -> Int
  42. tokSize (TokUnqual _ x) = T.length x
  43. tokSize (TokQual _ x y) = T.length x + T.length y + 1
  44. tokSize TokEof = 0
  45. tokSize TokLambda = 1
  46. tokSize TokOParen = 1
  47. tokSize TokOBrace = 1
  48. tokSize TokOSquare = 1
  49. tokSize TokOPragma = 3
  50. tokSize TokCBrace = 1
  51. tokSize TokCParen = 1
  52. tokSize TokCSquare = 1
  53. tokSize TokCPragma = 3
  54. tokSize TokDoubleColon = 2
  55. tokSize TokEqual = 1
  56. tokSize TokComma = 1
  57. tokSize TokSemi = 1
  58. tokSize TokUnder = 1
  59. tokSize TokArrow = 2
  60. tokSize TokIn = 2
  61. tokSize TokLStart = 0
  62. tokSize TokLEnd = 0
  63. tokSize TokPipe = 1
  64. tokSize (TokString t) = 2 + T.length t
  65. tokSize TokLambdaCase = length "\\case"
  66. tokSize TokWhere = length "where"
  67. tokSize TokData = length "data"
  68. tokSize TokOf = length "of"
  69. tokSize TokCase = length "case"
  70. tokSize TokModule = length "module"
  71. tokSize TokQualified = length "qualified"
  72. tokSize TokImport = length "import"
  73. tokSize TokLet = 3
  74. tokSize TokAs = 2
  75. data Token
  76. = Token { tokenClass :: TokenClass
  77. , tokStartLine :: !Int
  78. , tokStartCol :: !Int
  79. }
  80. deriving (Eq, Show, Ord)