token.hh 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #ifndef RUBY_PARSER_TOKEN_HH
  2. #define RUBY_PARSER_TOKEN_HH
  3. #include <cstddef>
  4. #include <memory>
  5. #include <string>
  6. // these token values are mirrored in src/grammars/*.y
  7. // any changes *must* be applied to the grammars as well.
  8. #define RUBY_PARSER_TOKEN_TYPES(XX) \
  9. XX(eof, 0) \
  10. XX(error, -1) \
  11. XX(kCLASS, 1001) \
  12. XX(kMODULE, 1002) \
  13. XX(kDEF, 1003) \
  14. XX(kUNDEF, 1004) \
  15. XX(kBEGIN, 1005) \
  16. XX(kRESCUE, 1006) \
  17. XX(kENSURE, 1007) \
  18. XX(kEND, 1008) \
  19. XX(kIF, 1009) \
  20. XX(kUNLESS, 1010) \
  21. XX(kTHEN, 1011) \
  22. XX(kELSIF, 1012) \
  23. XX(kELSE, 1013) \
  24. XX(kCASE, 1014) \
  25. XX(kWHEN, 1015) \
  26. XX(kWHILE, 1016) \
  27. XX(kUNTIL, 1017) \
  28. XX(kFOR, 1018) \
  29. XX(kBREAK, 1019) \
  30. XX(kNEXT, 1020) \
  31. XX(kREDO, 1021) \
  32. XX(kRETRY, 1022) \
  33. XX(kIN, 1023) \
  34. XX(kDO, 1024) \
  35. XX(kDO_COND, 1025) \
  36. XX(kDO_BLOCK, 1026) \
  37. XX(kDO_LAMBDA, 1027) \
  38. XX(kRETURN, 1028) \
  39. XX(kYIELD, 1029) \
  40. XX(kSUPER, 1030) \
  41. XX(kSELF, 1031) \
  42. XX(kNIL, 1032) \
  43. XX(kTRUE, 1033) \
  44. XX(kFALSE, 1034) \
  45. XX(kAND, 1035) \
  46. XX(kOR, 1036) \
  47. XX(kNOT, 1037) \
  48. XX(kIF_MOD, 1038) \
  49. XX(kUNLESS_MOD, 1039) \
  50. XX(kWHILE_MOD, 1040) \
  51. XX(kUNTIL_MOD, 1041) \
  52. XX(kRESCUE_MOD, 1042) \
  53. XX(kALIAS, 1043) \
  54. XX(kDEFINED, 1044) \
  55. XX(klBEGIN, 1045) \
  56. XX(klEND, 1046) \
  57. XX(k__LINE__, 1047) \
  58. XX(k__FILE__, 1048) \
  59. XX(k__ENCODING__, 1049) \
  60. XX(tIDENTIFIER, 1050) \
  61. XX(tFID, 1051) \
  62. XX(tGVAR, 1052) \
  63. XX(tIVAR, 1053) \
  64. XX(tCONSTANT, 1054) \
  65. XX(tLABEL, 1055) \
  66. XX(tCVAR, 1056) \
  67. XX(tNTH_REF, 1057) \
  68. XX(tBACK_REF, 1058) \
  69. XX(tSTRING_CONTENT, 1059) \
  70. XX(tINTEGER, 1060) \
  71. XX(tFLOAT, 1061) \
  72. XX(tUPLUS, 1062) \
  73. XX(tUMINUS, 1063) \
  74. XX(tUNARY_NUM, 1064) \
  75. XX(tPOW, 1065) \
  76. XX(tCMP, 1066) \
  77. XX(tEQ, 1067) \
  78. XX(tEQQ, 1068) \
  79. XX(tNEQ, 1069) \
  80. XX(tEQL, 1070) \
  81. XX(tGEQ, 1071) \
  82. XX(tLEQ, 1072) \
  83. XX(tANDOP, 1073) \
  84. XX(tOROP, 1074) \
  85. XX(tMATCH, 1075) \
  86. XX(tNMATCH, 1076) \
  87. XX(tDOT, 1077) \
  88. XX(tDOT2, 1078) \
  89. XX(tDOT3, 1079) \
  90. XX(tAREF, 1080) \
  91. XX(tASET, 1081) \
  92. XX(tLSHFT, 1082) \
  93. XX(tRSHFT, 1083) \
  94. XX(tCOLON2, 1084) \
  95. XX(tCOLON3, 1085) \
  96. XX(tOP_ASGN, 1086) \
  97. XX(tASSOC, 1087) \
  98. XX(tLPAREN, 1088) \
  99. XX(tLPAREN2, 1089) \
  100. XX(tRPAREN, 1090) \
  101. XX(tLPAREN_ARG, 1091) \
  102. XX(tLBRACK, 1092) \
  103. XX(tLBRACK2, 1093) \
  104. XX(tRBRACK, 1094) \
  105. XX(tLBRACE, 1095) \
  106. XX(tLBRACE_ARG, 1096) \
  107. XX(tSTAR, 1097) \
  108. XX(tSTAR2, 1098) \
  109. XX(tAMPER, 1099) \
  110. XX(tAMPER2, 1100) \
  111. XX(tTILDE, 1101) \
  112. XX(tPERCENT, 1102) \
  113. XX(tDIVIDE, 1103) \
  114. XX(tDSTAR, 1104) \
  115. XX(tPLUS, 1105) \
  116. XX(tMINUS, 1106) \
  117. XX(tLT, 1107) \
  118. XX(tGT, 1108) \
  119. XX(tPIPE, 1109) \
  120. XX(tBANG, 1110) \
  121. XX(tCARET, 1111) \
  122. XX(tLCURLY, 1112) \
  123. XX(tRCURLY, 1113) \
  124. XX(tBACK_REF2, 1114) \
  125. XX(tSYMBEG, 1115) \
  126. XX(tSTRING_BEG, 1116) \
  127. XX(tXSTRING_BEG, 1117) \
  128. XX(tREGEXP_BEG, 1118) \
  129. XX(tREGEXP_OPT, 1119) \
  130. XX(tWORDS_BEG, 1120) \
  131. XX(tQWORDS_BEG, 1121) \
  132. XX(tSYMBOLS_BEG, 1122) \
  133. XX(tQSYMBOLS_BEG, 1123) \
  134. XX(tSTRING_DBEG, 1124) \
  135. XX(tSTRING_DVAR, 1125) \
  136. XX(tSTRING_END, 1126) \
  137. XX(tSTRING_DEND, 1127) \
  138. XX(tSTRING, 1128) \
  139. XX(tSYMBOL, 1129) \
  140. XX(tNL, 1130) \
  141. XX(tEH, 1131) \
  142. XX(tCOLON, 1132) \
  143. XX(tCOMMA, 1133) \
  144. XX(tSPACE, 1134) \
  145. XX(tSEMI, 1135) \
  146. XX(tLAMBDA, 1136) \
  147. XX(tLAMBEG, 1137) \
  148. XX(tCHARACTER, 1138) \
  149. XX(tRATIONAL, 1139) \
  150. XX(tIMAGINARY, 1140) \
  151. XX(tLABEL_END, 1141) \
  152. XX(tANDDOT, 1142) \
  153. XX(tRATIONAL_IMAGINARY, 1143) \
  154. XX(tFLOAT_IMAGINARY, 1144)
  155. namespace ruby_parser {
  156. enum class token_type : int {
  157. #ifndef YYBISON
  158. #define XX(name, value) name = value,
  159. RUBY_PARSER_TOKEN_TYPES(XX)
  160. #undef XX
  161. #endif
  162. };
  163. class token {
  164. token_type _type;
  165. size_t _start;
  166. size_t _end;
  167. std::string _string;
  168. public:
  169. token(token_type type, size_t start, size_t end, const std::string &str);
  170. token_type type() const;
  171. size_t start() const;
  172. size_t end() const;
  173. const std::string &string() const;
  174. };
  175. using token_t = token *;
  176. } // namespace ruby_parser
  177. #endif