mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
bison: factoring.
* src/output.c (token_definitions_output): Use symbol_id_get instead of duplicating its logic. * TODO (YYERRCODE): Extend.
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
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.
|
||||
|
||||
16
TODO
16
TODO
@@ -54,6 +54,22 @@ number for the error token, which POSIX wants to be 256, but which
|
||||
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:
|
||||
|
||||
33
src/output.c
33
src/output.c
@@ -469,37 +469,20 @@ token_definitions_output (FILE *out)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user