#define TOKEN_TYPE(TYPE) case T_##TYPE: return #TYPE;
TOKEN_TYPES
#undef TOKEN_TYPE
- case TOKEN_N_TYPES:
default:
return "unknown token type";
}
case T_RBRACK:
return "]";
+ case T_LCURLY:
+ return "{";
+
+ case T_RCURLY:
+ return "}";
+
case T_COMMA:
return ",";
+ case T_SEMICOLON:
+ return ";";
+
+ case T_COLON:
+ return ":";
+
case T_AND:
return "AND";
case T_EXP:
return "**";
-
- case TOKEN_N_TYPES:
- NOT_REACHED ();
}
NOT_REACHED ();
{ T_TO, SS_LITERAL_INITIALIZER ("TO") },
{ T_WITH, SS_LITERAL_INITIALIZER ("WITH") },
};
-static const size_t keyword_cnt = sizeof keywords / sizeof *keywords;
+static const size_t n_keywords = sizeof keywords / sizeof *keywords;
/* Returns true if TOKEN is representable as a keyword. */
bool
lex_is_keyword (enum token_type token)
{
const struct keyword *kw;
- for (kw = keywords; kw < &keywords[keyword_cnt]; kw++)
+ for (kw = keywords; kw < &keywords[n_keywords]; kw++)
if (kw->token == token)
return true;
return false;
if (ss_length (id) >= 2 && ss_length (id) <= 4)
{
const struct keyword *kw;
- for (kw = keywords; kw < &keywords[keyword_cnt]; kw++)
+ for (kw = keywords; kw < &keywords[n_keywords]; kw++)
if (ss_equals_case (kw->identifier, id))
return kw->token;
}