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

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