+2009-04-20 Akim Demaille <demaille@gostai.com>
+
+ bison: factoring.
+ * src/output.c (token_definitions_output): Use symbol_id_get
+ instead of duplicating its logic.
+ * TODO (YYERRCODE): Extend.
+
2009-04-20 Akim Demaille <demaille@gostai.com>
variables: prefer error-verbose to error_verbose.
Bison might renumber if the user used number 256. Keep fix and doc?
Throw away?
+Also, why don't we output the token name of the error token in the
+output? It is explicitly skipped:
+
+ /* Skip error token and tokens without identifier. */
+ if (sym != errtoken && id)
+
+Of course there are issues with name spaces, but if we disable we have
+something which seems to be more simpler and more consistent instead
+of the special case YYERRCODE.
+
+ enum yytokentype {
+ error = 256,
+ // ...
+ };
+
+
We could (should?) also treat the case of the undef_token, which is
numbered 257 for yylex, and 2 internal. Both appear for instance in
toknum:
{
symbol *sym = symbols[i];
int number = sym->user_token_number;
+ uniqstr id = symbol_id_get (sym);
/* At this stage, if there are literal aliases, they are part of
SYMBOLS, so we should not find symbols which are the aliases
here. */
aver (number != USER_NUMBER_ALIAS);
- /* Skip error token. */
- if (sym == errtoken)
- continue;
-
- /* If this string has an alias, then it is necessarily the alias
- which is to be output. */
- if (sym->alias)
- sym = sym->alias;
-
- /* Don't output literal chars or strings (when defined only as a
- string). Note that must be done after the alias resolution:
- think about `%token 'f' "f"'. */
- if (sym->tag[0] == '\'' || sym->tag[0] == '\"')
- continue;
-
- /* Don't #define nonliteral tokens whose names contain periods,
- dashes or '$' (as does the default value of the EOF token). */
- if (strchr (sym->tag, '.')
- || strchr (sym->tag, '-')
- || strchr (sym->tag, '$'))
- continue;
-
- fprintf (out, "%s[[[%s]], %d]",
- sep, sym->tag, number);
- sep = ",\n";
+ /* Skip error token and tokens without identifier. */
+ if (sym != errtoken && id)
+ {
+ fprintf (out, "%s[[[%s]], %d]",
+ sep, id, number);
+ sep = ",\n";
+ }
}
fputs ("])\n\n", out);
}