+2000-10-16 Akim Demaille <akim@epita.fr>
+
+ * src/output.c (output_short_or_char_table): New function.
+ (output_short_table, output_token_translations): Use it.
+ (goto_actions): Use output_short_table.
+
2000-10-16 Akim Demaille <akim@epita.fr>
* src/symtab.c (bucket_new): New function.
(output_gram): Use it.
(output_rule_data): Nicer output layout for YYTNAME.
-
+
2000-10-16 Akim Demaille <akim@epita.fr>
* src/lex.c (read_typename): New function.
(lex): Use it.
* src/reader.c (copy_dollar): Likewise.
-
+
2000-10-16 Akim Demaille <akim@epita.fr>
* src/reader.c (copy_comment2): Expect the input stream to be on
(copy_comment, copy_definition, parse_union_decl, copy_action)
(copy_guard): Adjust.
-
+
2000-10-16 Akim Demaille <akim@epita.fr>
* src/reader.c (parse_expect_decl): Use `skip_white_space' and
`read_signed_integer'.
-
+
2000-10-16 Akim Demaille <akim@epita.fr>
* src/reader.c (copy_dollar): New function.
(copy_guard, copy_action): Use it.
-
+
2000-10-16 Akim Demaille <akim@epita.fr>
* lib/quote.h, lib/quote.c, lib/quotearg.h, lib/quotearg.c:
/* Compute look-ahead criteria for bison,
- Copyright (C) 1984, 1986, 1989 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1986, 1989, 2000 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
/* lalr() builds these data structures. */
-/* goto_map, from_state and to_state --record each shift transition
+/* GOTO_MAP, FROM_STATE and TO_STATE -- record each shift transition
which accepts a variable (a nonterminal).
- from_state[t] is the state number which a transition leads from and
- to_state[t] is the state number it leads to. All the transitions
- that accept a particular variable are grouped together and
- goto_map[i - ntokens] is the index in from_state and to_state of
- the first of them. */
+ FROM_STATE[T] -- state number which a transition leads from.
+ TO_STATE[T] -- state number it leads to.
+
+ All the transitions that accept a particular variable are grouped
+ together and GOTO_MAP[I - NTOKENS] is the index in FROM_STATE and
+ TO_STATE of the first of them. */
extern short *goto_map;
extern short *from_state;
static inline void
-output_short_table (FILE *out,
- const char *comment,
- const char *table_name,
- short *short_table,
- short first_value,
- short begin, short end)
+output_short_or_char_table (FILE *out,
+ const char *comment,
+ const char *type,
+ const char *table_name,
+ short *short_table,
+ short first_value,
+ short begin, short end)
{
int i, j;
if (comment)
fprintf (out, "/* %s. */\n", comment);
- fprintf (out, "static const short %s[] =\n{\n %6d",
- table_name, first_value);
+ fprintf (out, "static const %s %s[] =\n{\n %6d",
+ type, table_name, first_value);
j = 1;
for (i = begin; i < end; i++)
}
+static inline void
+output_short_table (FILE *out,
+ const char *comment,
+ const char *table_name,
+ short *short_table,
+ short first_value,
+ short begin, short end)
+{
+ output_short_or_char_table (out, comment, "short", table_name, short_table,
+ first_value, begin, end);
+}
+
+
/*--------------------------------------------------------------.
| output_headers -- Output constant strings to the beginning of |
| certain files. |
static void
output_token_translations (void)
{
- int i, j;
-/* short *sp; JF unused */
-
+ fputs ("\
+\n\
+/* YYRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */\n",
+ ftable);
if (translations)
{
fprintf (ftable,
- "\n#define YYTRANSLATE(x) ((unsigned)(x) <= %d ? yytranslate[x] : %d)\n",
+ "#define YYTRANSLATE(x) ((unsigned)(x) <= %d ? yytranslate[x] : %d)\
+\n\
+\n",
max_user_token_number, nsyms);
- if (ntokens < 127) /* play it very safe; check maximum element value. */
- fprintf (ftable, "\nstatic const char yytranslate[] = { 0");
- else
- fprintf (ftable, "\nstatic const short yytranslate[] = { 0");
-
- j = 10;
- for (i = 1; i <= max_user_token_number; i++)
- {
- putc (',', ftable);
-
- if (j >= 10)
- {
- putc ('\n', ftable);
- j = 1;
- }
- else
- {
- j++;
- }
-
- fprintf (ftable, "%6d", token_translations[i]);
- }
-
- fprintf (ftable, "\n};\n");
+ output_short_or_char_table (ftable,
+ "YYRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX",
+ ntokens < 127 ? "char" : "short",
+ "yytranslate", token_translations,
+ 0, 1, max_user_token_number + 1);
}
else
{
}
XFREE (actrow);
- output_short_table (ftable, NULL, "yydefact", yydefact,
+ output_short_table (ftable,
+ "YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE\n\
+ doesn't specify something else to do. Zero means the default is an\n\
+ error",
+ "yydefact", yydefact,
yydefact[0], 1, nstates);
+ putc ('\n', ftable);
XFREE (yydefact);
}
save_column (int symbol, int default_state)
{
int i;
- int m;
- int n;
short *sp;
short *sp1;
short *sp2;
int count;
int symno;
- m = goto_map[symbol];
- n = goto_map[symbol + 1];
+ short begin = goto_map[symbol];
+ short end = goto_map[symbol + 1];
count = 0;
- for (i = m; i < n; i++)
+ for (i = begin; i < end; i++)
{
if (to_state[i] != default_state)
count++;
froms[symno] = sp1 = sp = XCALLOC (short, count);
tos[symno] = sp2 = XCALLOC (short, count);
- for (i = m; i < n; i++)
+ for (i = begin; i < end; i++)
{
if (to_state[i] != default_state)
{
static void
goto_actions (void)
{
- int i, j, k;
+ int i;
+ short *yydefgoto = XMALLOC (short, nsyms - ntokens);
state_count = XCALLOC (short, nstates);
- k = default_goto (ntokens);
- fprintf (ftable, "\nstatic const short yydefgoto[] = {%6d", k);
- save_column (ntokens, k);
-
- j = 10;
- for (i = ntokens + 1; i < nsyms; i++)
+ for (i = ntokens; i < nsyms; ++i)
{
- putc (',', ftable);
-
- if (j >= 10)
- {
- putc ('\n', ftable);
- j = 1;
- }
- else
- {
- j++;
- }
-
- k = default_goto (i);
- fprintf (ftable, "%6d", k);
- save_column (i, k);
+ int default_state = default_goto (i);
+ save_column (i, default_state);
+ yydefgoto[i - ntokens] = default_state;
}
- fprintf (ftable, "\n};\n");
+ output_short_table (ftable, NULL, "yydefgoto", yydefgoto,
+ yydefgoto[0], 1, nsyms - ntokens);
+
XFREE (state_count);
+ XFREE (yydefgoto);
}