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.

140 lines
2.6 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. | TokUnqualOp IdClass Text
  10. | TokQualOp IdClass Text Text
  11. | TokString Text
  12. | TokEof
  13. | TokLambda
  14. | TokArrow
  15. | TokUnder
  16. | TokOParen
  17. | TokOBrace
  18. | TokOSquare
  19. | TokOPragma
  20. | TokCParen
  21. | TokCBrace
  22. | TokCSquare
  23. | TokCPragma
  24. | TokDoubleColon
  25. | TokTick
  26. | TokEqual
  27. | TokComma
  28. | TokPipe
  29. | TokLet
  30. | TokIn
  31. | TokLStart
  32. | TokLEnd
  33. | TokModule
  34. | TokImport
  35. | TokQualified
  36. | TokAs
  37. | TokWhere
  38. | TokCase
  39. | TokOf
  40. | TokForeign
  41. | TokExport
  42. | TokSafe
  43. | TokUnsafe
  44. | TokCCall
  45. | TokData
  46. | TokSemi
  47. deriving (Eq, Ord)
  48. instance Show TokenClass where
  49. show (TokUnqual _ id) = T.unpack id
  50. show (TokQual _ ns id) = T.unpack ns ++ '.':T.unpack id
  51. show (TokUnqualOp _ id) = T.unpack id
  52. show (TokQualOp _ ns id) = T.unpack ns ++ '.':T.unpack id
  53. show (TokString text) = show text
  54. show TokEof = "<EOF>"
  55. show TokLambda = "\\"
  56. show TokArrow = "->"
  57. show TokUnder = "_"
  58. show TokOParen = "("
  59. show TokOBrace = "{"
  60. show TokOSquare = "["
  61. show TokOPragma = "{-"
  62. show TokCParen = ")"
  63. show TokCBrace = "}"
  64. show TokCSquare = "]"
  65. show TokCPragma = "-}"
  66. show TokDoubleColon = "::"
  67. show TokTick = "`"
  68. show TokEqual = "="
  69. show TokComma = ","
  70. show TokPipe = "|"
  71. show TokSemi = ";"
  72. show TokLet = "let"
  73. show TokIn = "in"
  74. show TokLStart = ""
  75. show TokLEnd = ""
  76. show TokModule = "module"
  77. show TokImport = "import"
  78. show TokQualified = "qualified"
  79. show TokAs = "as"
  80. show TokWhere = "where"
  81. show TokCase = "case"
  82. show TokOf = "of"
  83. show TokData = "data"
  84. show TokForeign = "foreign"
  85. show TokExport = "export"
  86. show TokSafe = "safe"
  87. show TokUnsafe = "unsafe"
  88. show TokCCall = "ccall"
  89. isKeywordToken :: TokenClass -> Bool
  90. isKeywordToken TokLet = True
  91. isKeywordToken TokIn = True
  92. isKeywordToken TokModule = True
  93. isKeywordToken TokImport = True
  94. isKeywordToken TokQualified = True
  95. isKeywordToken TokAs = True
  96. isKeywordToken TokWhere = True
  97. isKeywordToken TokCase = True
  98. isKeywordToken TokOf = True
  99. isKeywordToken TokForeign = True
  100. isKeywordToken TokExport = True
  101. isKeywordToken TokSafe = True
  102. isKeywordToken TokUnsafe = True
  103. isKeywordToken TokCCall = True
  104. isKeywordToken TokData = True
  105. isKeywordToken _ = False
  106. tokSize :: TokenClass -> Int
  107. tokSize = length . show
  108. data Token
  109. = Token { tokenClass :: TokenClass
  110. , tokStartLine :: !Int
  111. , tokStartCol :: !Int
  112. }
  113. deriving (Eq, Show, Ord)