mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-27 05:03:07 +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>
|
2009-04-20 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
variables: prefer error-verbose to error_verbose.
|
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?
|
Bison might renumber if the user used number 256. Keep fix and doc?
|
||||||
Throw away?
|
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
|
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
|
numbered 257 for yylex, and 2 internal. Both appear for instance in
|
||||||
toknum:
|
toknum:
|
||||||
|
|||||||
33
src/output.c
33
src/output.c
@@ -469,37 +469,20 @@ token_definitions_output (FILE *out)
|
|||||||
{
|
{
|
||||||
symbol *sym = symbols[i];
|
symbol *sym = symbols[i];
|
||||||
int number = sym->user_token_number;
|
int number = sym->user_token_number;
|
||||||
|
uniqstr id = symbol_id_get (sym);
|
||||||
|
|
||||||
/* At this stage, if there are literal aliases, they are part of
|
/* At this stage, if there are literal aliases, they are part of
|
||||||
SYMBOLS, so we should not find symbols which are the aliases
|
SYMBOLS, so we should not find symbols which are the aliases
|
||||||
here. */
|
here. */
|
||||||
aver (number != USER_NUMBER_ALIAS);
|
aver (number != USER_NUMBER_ALIAS);
|
||||||
|
|
||||||
/* Skip error token. */
|
/* Skip error token and tokens without identifier. */
|
||||||
if (sym == errtoken)
|
if (sym != errtoken && id)
|
||||||
continue;
|
{
|
||||||
|
fprintf (out, "%s[[[%s]], %d]",
|
||||||
/* If this string has an alias, then it is necessarily the alias
|
sep, id, number);
|
||||||
which is to be output. */
|
sep = ",\n";
|
||||||
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";
|
|
||||||
}
|
}
|
||||||
fputs ("])\n\n", out);
|
fputs ("])\n\n", out);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user