+#ifndef TS
+#define TS(x,str,val)
+#endif
+
+TS(HEADERNAME, "header name", = 256)
+TS(IDENTIFIER, "identifier",)
+TS(NUMBER, "number",)
+TS(CHARACTER_CONSTANT, "character constant",)
+TS(WIDE_CHARACTER_CONSTANT, "character constant",)
+TS(STRING_LITERAL, "string literal",)
+TS(WIDE_STRING_LITERAL, "wide string literal",)
+TS(PUNCTUATOR, "punctuator",)
+TS(NEWLINE, "newline", = '\n')
+
+#define ALTERNATE(name, val) T(_CXX, name, #name, val)
+#define PUNCTUATOR(name, string, val) T(_ALL, name, string, val)
+#include "tokens_punctuator.inc"
+#undef PUNCTUATOR
+#undef ALTERNATE
+
#define S(x) T(_ALL,x,#x,)
S(if)
S(error)
S(pragma)
-#undef S
+S(defined)
+T(_ALL, va_args, "__VA_ARGS__",)
+T(_MS, __COUNTER__, "__COUNTER__",)
+T(_MS, __TIMESTAMP__, "__TIMESTAMP__",)
+
+S(STDC)
+S(ON)
+S(OFF)
+S(DEFAULT)
+S(FP_CONTRACT)
+S(FENV_ACCESS)
+S(CX_LIMITED_RANGE)
-#define TP_LAST_TOKEN (TP_pragma + 1)
+#undef S