token_kind.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. #include "toolchain/lex/token_kind.h"
  5. namespace Carbon::Lex {
  6. CARBON_DEFINE_ENUM_CLASS_NAMES(TokenKind) {
  7. #define CARBON_TOKEN(TokenName) CARBON_ENUM_CLASS_NAME_STRING(TokenName)
  8. #include "toolchain/lex/token_kind.def"
  9. };
  10. constexpr bool TokenKind::IsSymbol[] = {
  11. #define CARBON_TOKEN(TokenName) false,
  12. #define CARBON_SYMBOL_TOKEN(TokenName, Spelling) true,
  13. #include "toolchain/lex/token_kind.def"
  14. };
  15. constexpr bool TokenKind::IsGroupingSymbol[] = {
  16. #define CARBON_TOKEN(TokenName) false,
  17. #define CARBON_OPENING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, ClosingName) \
  18. true,
  19. #define CARBON_CLOSING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, OpeningName) \
  20. true,
  21. #include "toolchain/lex/token_kind.def"
  22. };
  23. constexpr bool TokenKind::IsOpeningSymbol[] = {
  24. #define CARBON_TOKEN(TokenName) false,
  25. #define CARBON_OPENING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, ClosingName) \
  26. true,
  27. #include "toolchain/lex/token_kind.def"
  28. };
  29. constexpr TokenKind TokenKind::ClosingSymbol[] = {
  30. #define CARBON_TOKEN(TokenName) Error,
  31. #define CARBON_OPENING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, ClosingName) \
  32. ClosingName,
  33. #include "toolchain/lex/token_kind.def"
  34. };
  35. constexpr bool TokenKind::IsClosingSymbol[] = {
  36. #define CARBON_TOKEN(TokenName) false,
  37. #define CARBON_CLOSING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, OpeningName) \
  38. true,
  39. #include "toolchain/lex/token_kind.def"
  40. };
  41. constexpr TokenKind TokenKind::OpeningSymbol[] = {
  42. #define CARBON_TOKEN(TokenName) Error,
  43. #define CARBON_CLOSING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, OpeningName) \
  44. OpeningName,
  45. #include "toolchain/lex/token_kind.def"
  46. };
  47. constexpr bool TokenKind::IsOneCharSymbol[] = {
  48. #define CARBON_TOKEN(TokenName) false,
  49. #define CARBON_ONE_CHAR_SYMBOL_TOKEN(TokenName, Spelling) true,
  50. #include "toolchain/lex/token_kind.def"
  51. };
  52. constexpr bool TokenKind::IsKeyword[] = {
  53. #define CARBON_TOKEN(TokenName) false,
  54. #define CARBON_KEYWORD_TOKEN(TokenName, Spelling) true,
  55. #include "toolchain/lex/token_kind.def"
  56. };
  57. constexpr llvm::StringLiteral TokenKind::FixedSpelling[] = {
  58. #define CARBON_TOKEN(TokenName) "",
  59. #define CARBON_SYMBOL_TOKEN(TokenName, Spelling) Spelling,
  60. #define CARBON_KEYWORD_TOKEN(TokenName, Spelling) Spelling,
  61. #include "toolchain/lex/token_kind.def"
  62. };
  63. constexpr int8_t TokenKind::ExpectedParseTreeSize[] = {
  64. #define CARBON_TOKEN(Name) 1,
  65. #define CARBON_TOKEN_WITH_VIRTUAL_NODE(size) 2,
  66. #include "toolchain/lex/token_kind.def"
  67. };
  68. } // namespace Carbon::Lex