mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 17:53:02 +00:00
More information about the symbols.
* src/output.c (type_names_output): Document all the symbols, including those that don't have a type-name. (symbol_definitions_output): Define "is_token" and "has_type_name". * data/lalr1.cc (b4_type_action_): Skip symbols that have an empty type-name, now that they are defined too in b4_type_names.
This commit is contained in:
10
ChangeLog
10
ChangeLog
@@ -1,3 +1,13 @@
|
|||||||
|
2008-11-10 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
|
More information about the symbols.
|
||||||
|
* src/output.c (type_names_output): Document all the symbols,
|
||||||
|
including those that don't have a type-name.
|
||||||
|
(symbol_definitions_output): Define "is_token" and
|
||||||
|
"has_type_name".
|
||||||
|
* data/lalr1.cc (b4_type_action_): Skip symbols that have an empty
|
||||||
|
type-name, now that they are defined too in b4_type_names.
|
||||||
|
|
||||||
2008-11-10 Akim Demaille <demaille@gostai.com>
|
2008-11-10 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
Regen.
|
Regen.
|
||||||
|
|||||||
@@ -113,6 +113,17 @@ m4_define([b4_symbol],
|
|||||||
[m4_indir([b4_symbol($1, $2)])])
|
[m4_indir([b4_symbol($1, $2)])])
|
||||||
|
|
||||||
|
|
||||||
|
# b4_symbol_if(NUM, FIELD, IF-TRUE, IF-FALSE)
|
||||||
|
# -------------------------------------------
|
||||||
|
# If FIELD about symbol #NUM is 1 expand IF-TRUE, if is 0, expand IF-FALSE.
|
||||||
|
# Otherwise an error.
|
||||||
|
m4_define([b4_symbol_if],
|
||||||
|
[m4_case(b4_symbol([$1], [$2]),
|
||||||
|
[1], [$3],
|
||||||
|
[0], [$4],
|
||||||
|
[m4_fatal([$0: field $2 of $1 is not a Boolean:] b4_symbol([$1], [$2]))])])
|
||||||
|
|
||||||
|
|
||||||
# b4_symbol_actions(FILENAME, LINENO,
|
# b4_symbol_actions(FILENAME, LINENO,
|
||||||
# SYMBOL-TAG, SYMBOL-NUM,
|
# SYMBOL-TAG, SYMBOL-NUM,
|
||||||
# SYMBOL-ACTION, SYMBOL-TYPENAME)
|
# SYMBOL-ACTION, SYMBOL-TYPENAME)
|
||||||
@@ -143,14 +154,16 @@ m4_define([b4_symbol_case_],
|
|||||||
# b4_type_action_(NUMS)
|
# b4_type_action_(NUMS)
|
||||||
# ---------------------
|
# ---------------------
|
||||||
# Run actions for the symbol NUMS that all have the same type-name.
|
# Run actions for the symbol NUMS that all have the same type-name.
|
||||||
|
# Skip NUMS that have no type-name.
|
||||||
m4_define([b4_type_action_],
|
m4_define([b4_type_action_],
|
||||||
|
[b4_symbol_if([$1], [has_type_name],
|
||||||
[m4_map([b4_symbol_case_], [$@])[]dnl
|
[m4_map([b4_symbol_case_], [$@])[]dnl
|
||||||
b4_dollar_dollar([b4_symbol([$1], [number])],
|
b4_dollar_dollar([b4_symbol([$1], [number])],
|
||||||
[b4_symbol([$1], [tag])],
|
[b4_symbol([$1], [tag])],
|
||||||
[b4_symbol([$1], [type_name])]);
|
[b4_symbol([$1], [type_name])]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
])
|
])])
|
||||||
|
|
||||||
|
|
||||||
# b4_symbol_variant(YYTYPE, YYVAL, ACTION, [ARGS])
|
# b4_symbol_variant(YYTYPE, YYVAL, ACTION, [ARGS])
|
||||||
|
|||||||
36
src/output.c
36
src/output.c
@@ -320,28 +320,17 @@ static void
|
|||||||
type_names_output (FILE *out)
|
type_names_output (FILE *out)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const char *isep = "";
|
|
||||||
symbol **syms = symbols_by_type_name ();
|
symbol **syms = symbols_by_type_name ();
|
||||||
fputs ("m4_define([b4_type_names],\n[", out);
|
fputs ("m4_define([b4_type_names],\n[", out);
|
||||||
for (i = 0; i < nsyms; )
|
for (i = 0; i < nsyms; /* nothing */)
|
||||||
if (syms[i]->type_name)
|
{
|
||||||
{
|
// The index of the first symbol of the current type-name.
|
||||||
int j;
|
int i0 = i;
|
||||||
const char *jsep = "";
|
fputs (i ? ",\n[" : "[", out);
|
||||||
fprintf (out, "%s[", isep);
|
for (; i < nsyms && syms[i]->type_name == syms[i0]->type_name; ++i)
|
||||||
isep = ",\n";
|
fprintf (out, "%s%d", i != i0 ? ", " : "", syms[i]->number);
|
||||||
for (j = i; j < nsyms; ++j)
|
fputs ("]", out);
|
||||||
{
|
}
|
||||||
if (syms[i]->type_name != syms[j]->type_name)
|
|
||||||
break;
|
|
||||||
fprintf (out, "%s%d", jsep, syms[j]->number);
|
|
||||||
jsep = ", ";
|
|
||||||
}
|
|
||||||
fputs ("]", out);
|
|
||||||
i = j;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
++i;
|
|
||||||
fputs ("])\n\n", out);
|
fputs ("])\n\n", out);
|
||||||
free (syms);
|
free (syms);
|
||||||
}
|
}
|
||||||
@@ -431,9 +420,16 @@ symbol_definitions_output (FILE *out)
|
|||||||
SET_KEY("user_number");
|
SET_KEY("user_number");
|
||||||
MUSCLE_INSERT_INT (key, sym->user_token_number);
|
MUSCLE_INSERT_INT (key, sym->user_token_number);
|
||||||
|
|
||||||
|
SET_KEY("is_token");
|
||||||
|
MUSCLE_INSERT_INT (key,
|
||||||
|
i < ntokens && sym != errtoken && sym != undeftoken);
|
||||||
|
|
||||||
SET_KEY("number");
|
SET_KEY("number");
|
||||||
MUSCLE_INSERT_INT (key, sym->number);
|
MUSCLE_INSERT_INT (key, sym->number);
|
||||||
|
|
||||||
|
SET_KEY("has_type_name");
|
||||||
|
MUSCLE_INSERT_INT (key, !!sym->type_name);
|
||||||
|
|
||||||
SET_KEY("type_name");
|
SET_KEY("type_name");
|
||||||
MUSCLE_INSERT_STRING (key, sym->type_name ? sym->type_name : "");
|
MUSCLE_INSERT_STRING (key, sym->type_name ? sym->type_name : "");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user