* src/derives.h: New file.

* src/main.c, src/derives.h: Use it.
Formatting changes.
* src/Makefile.am (noinst_HEADERS): Adjust.
This commit is contained in:
Akim Demaille
2000-09-20 13:14:11 +00:00
parent db5b3a89b4
commit cc84fd5dc7
12 changed files with 158 additions and 133 deletions

View File

@@ -1,3 +1,10 @@
2000-09-20 Akim Demaille <akim@epita.fr>
* src/derives.h: New file.
* src/main.c, src/derives.h: Use it.
Formatting changes.
* src/Makefile.am (noinst_HEADERS): Adjust.
2000-09-20 Akim Demaille <akim@epita.fr>
* tests/atgeneral.m4: Update from Autoconf.

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2000-09-19 20:18+0200\n"
"POT-Creation-Date: 2000-09-20 14:50+0200\n"
"PO-Revision-Date: 1996-10-10 17:54 MET DST\n"
"Last-Translator: Ulrich Drepper <drepper@gnu.ai.mit.edu>\n"
"Language-Team: German <de@li.org>\n"
@@ -112,7 +112,7 @@ msgstr " %-4s\treduziere mit Tegel %d (%s)\n"
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\treduziere mit Regel %d (%s)\n"
#: src/derives.c:108
#: src/derives.c:42
msgid ""
"\n"
"\n"
@@ -121,7 +121,7 @@ msgid ""
"\n"
msgstr ""
#: src/derives.c:112
#: src/derives.c:46
#, c-format
msgid "%s derives"
msgstr "%s leitet ab"
@@ -253,7 +253,7 @@ msgstr "unerwarteter Typname am Ende der Datei"
msgid "unterminated type name"
msgstr "unerwarteter Typname"
#: src/main.c:141
#: src/main.c:139
#, fuzzy, c-format
msgid "%s: internal error: %s\n"
msgstr "interner Fehler, %s\n"

View File

@@ -30,7 +30,7 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.25\n"
"POT-Creation-Date: 2000-09-19 20:18+0200\n"
"POT-Creation-Date: 2000-09-20 14:50+0200\n"
"PO-Revision-Date: 1998-09-21 10:19+0200\n"
"Last-Translator: Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>\n"
"Language-Team: Spanish <es@li.org>\n"
@@ -163,7 +163,7 @@ msgstr " %-4s\treduce usando la regla %d (%s)\n"
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\treduce usando la regla %d (%s)\n"
#: src/derives.c:108
#: src/derives.c:42
msgid ""
"\n"
"\n"
@@ -176,7 +176,7 @@ msgstr ""
"\n"
"DERIVACIONES\n"
#: src/derives.c:112
#: src/derives.c:46
#, c-format
msgid "%s derives"
msgstr "%s deriva"
@@ -313,7 +313,7 @@ msgstr "nombre de tipo sin terminar al final del fichero"
msgid "unterminated type name"
msgstr "nombre de tipo sin terminar"
#: src/main.c:141
#: src/main.c:139
#, fuzzy, c-format
msgid "%s: internal error: %s\n"
msgstr "error interno, %s\n"

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2000-09-19 20:18+0200\n"
"POT-Creation-Date: 2000-09-20 14:50+0200\n"
"PO-Revision-Date: 2000-04-11 22:19+02:00\n"
"Last-Translator: Toomas Soome <tsoome@ut.ee>\n"
"Language-Team: Estonian <et@li.org>\n"
@@ -112,7 +112,7 @@ msgstr " %-4s\tredutseerin kasutades reeglit %d (%s)\n"
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\tredutseerin kasutades reeglit %d (%s)\n"
#: src/derives.c:108
#: src/derives.c:42
msgid ""
"\n"
"\n"
@@ -126,7 +126,7 @@ msgstr ""
"DERIVES\n"
"\n"
#: src/derives.c:112
#: src/derives.c:46
#, c-format
msgid "%s derives"
msgstr "%s derives"
@@ -274,7 +274,7 @@ msgstr "l
msgid "unterminated type name"
msgstr "lõpetamata tüübinimi"
#: src/main.c:141
#: src/main.c:139
#, c-format
msgid "%s: internal error: %s\n"
msgstr "%s: sisemine viga: %s\n"

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2000-09-19 20:18+0200\n"
"POT-Creation-Date: 2000-09-20 14:50+0200\n"
"PO-Revision-Date: 1996-03-19 20:05 EST\n"
"Last-Translator: Dominique Boucher <boucherd@IRO.UMontreal.CA>\n"
"Language-Team: French <fr@li.org>\n"
@@ -113,7 +113,7 @@ msgstr " %-4s\tr
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $défaut\tréduction par la règle %d (%s)\n"
#: src/derives.c:108
#: src/derives.c:42
msgid ""
"\n"
"\n"
@@ -127,7 +127,7 @@ msgstr ""
"DERIVES\n"
"\n"
#: src/derives.c:112
#: src/derives.c:46
#, c-format
msgid "%s derives"
msgstr "%s dérive"
@@ -258,7 +258,7 @@ msgstr "le nom de type ne se termine pas avant la fin de fichier"
msgid "unterminated type name"
msgstr "le nom de type ne se termine pas"
#: src/main.c:141
#: src/main.c:139
#, fuzzy, c-format
msgid "%s: internal error: %s\n"
msgstr "erreur interne, %s\n"

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.28\n"
"POT-Creation-Date: 2000-09-19 20:18+0200\n"
"POT-Creation-Date: 2000-09-20 14:50+0200\n"
"PO-Revision-Date: 1999-09-28 21:10+0900\n"
"Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
"Language-Team: Japanese <ja@li.org>\n"
@@ -112,7 +112,7 @@ msgstr " %-4s\t
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\t規則 %d を利用して還元 (%s)\n"
#: src/derives.c:108
#: src/derives.c:42
msgid ""
"\n"
"\n"
@@ -126,7 +126,7 @@ msgstr ""
"DERIVES\n"
"\n"
#: src/derives.c:112
#: src/derives.c:46
#, c-format
msgid "%s derives"
msgstr "%s は以下から派生"
@@ -257,7 +257,7 @@ msgstr "
msgid "unterminated type name"
msgstr "閉じられていないタイプ名があります"
#: src/main.c:141
#: src/main.c:139
#, c-format
msgid "%s: internal error: %s\n"
msgstr "%s: 内部エラー: %s\n"

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2000-09-19 20:18+0200\n"
"POT-Creation-Date: 2000-09-20 14:50+0200\n"
"PO-Revision-Date: 1996-08-27 15:34 MET DST\n"
"Last-Translator: Erick Branderhorst <branderh@debian.org>\n"
"Language-Team: Dutch <nl@li.org>\n"
@@ -112,7 +112,7 @@ msgstr ""
msgid " $default\treduce using rule %d (%s)\n"
msgstr ""
#: src/derives.c:108
#: src/derives.c:42
msgid ""
"\n"
"\n"
@@ -126,7 +126,7 @@ msgstr ""
"AFGELEIDEN\n"
"\n"
#: src/derives.c:112
#: src/derives.c:46
#, c-format
msgid "%s derives"
msgstr "%s afgeleiden"
@@ -257,7 +257,7 @@ msgstr "niet getermineerd type naam aan het einde van bestand"
msgid "unterminated type name"
msgstr "niet getermineerd type naam"
#: src/main.c:141
#: src/main.c:139
#, fuzzy, c-format
msgid "%s: internal error: %s\n"
msgstr "interne fout, %s\n"

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.28a\n"
"POT-Creation-Date: 2000-09-19 20:18+0200\n"
"POT-Creation-Date: 2000-09-20 14:50+0200\n"
"PO-Revision-Date: 2000-04-12 13:16+04:00\n"
"Last-Translator: Dmitry S. Sivachenko <dima@Chg.RU>\n"
"Language-Team: Russian <ru@li.org>\n"
@@ -113,7 +113,7 @@ msgstr " %-4s\t
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\t×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)\n"
#: src/derives.c:108
#: src/derives.c:42
msgid ""
"\n"
"\n"
@@ -127,7 +127,7 @@ msgstr ""
"DERIVES\n"
"\n"
#: src/derives.c:112
#: src/derives.c:46
#, c-format
msgid "%s derives"
msgstr "%s ×Ù×ÏÄÉÔ"
@@ -276,7 +276,7 @@ msgstr "
msgid "unterminated type name"
msgstr "ÎÅÚÁËÏÎÞÅÎÎÏÅ ÉÍÑ ÔÉÐÁ"
#: src/main.c:141
#: src/main.c:139
#, c-format
msgid "%s: internal error: %s\n"
msgstr "%s: ×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: %s\n"

View File

@@ -19,7 +19,7 @@ bison_SOURCES = LR0.c allocate.c closure.c complain.c conflicts.c \
EXTRA_bison_SOURCES = vmsgetargs.c
noinst_HEADERS = alloc.h complain.h files.h getargs.h gram.h lex.h \
state.h \
derives.h state.h \
symtab.h system.h types.h
data_DATA = bison.simple bison.hairy

View File

@@ -1,40 +1,59 @@
/* Match rules with nonterminals for bison,
Copyright (C) 1984, 1989 Free Software Foundation, Inc.
Copyright (C) 1984, 1989, 2000 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
This file is part of Bison, the GNU Compiler Compiler.
Bison is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Bison is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* set_derives finds, for each variable (nonterminal), which rules can derive it.
It sets up the value of derives so that
derives[i - ntokens] points to a vector of rule numbers,
terminated with -1. */
/* set_derives finds, for each variable (nonterminal), which rules can
derive it. It sets up the value of derives so that derives[i -
ntokens] points to a vector of rule numbers, terminated with -1.
*/
#include "system.h"
#include "alloc.h"
#include "types.h"
#include "gram.h"
extern void set_derives PARAMS((void));
extern void free_derives PARAMS((void));
#include "derives.h"
#if DEBUG
static void print_derives PARAMS((void));
extern char **tags;
static void
print_derives (void)
{
register int i;
register short *sp;
printf (_("\n\n\nDERIVES\n\n"));
for (i = ntokens; i < nsyms; i++)
{
printf (_("%s derives"), tags[i]);
for (sp = derives[i]; *sp > 0; sp++)
{
printf (" %d", *sp);
}
putchar ('\n');
}
putchar ('\n');
}
#endif
short **derives;
@@ -49,8 +68,8 @@ set_derives (void)
register shorts **dset;
register shorts *delts;
dset = NEW2(nvars, shorts *) - ntokens;
delts = NEW2(nrules + 1, shorts);
dset = NEW2 (nvars, shorts *) - ntokens;
delts = NEW2 (nrules + 1, shorts);
p = delts;
for (i = nrules; i > 0; i--)
@@ -65,8 +84,8 @@ set_derives (void)
}
}
derives = NEW2(nvars, short *) - ntokens;
q = NEW2(nvars + nrules, short);
derives = NEW2 (nvars, short *) - ntokens;
q = NEW2 (nvars + nrules, short);
for (i = ntokens; i < nsyms; i++)
{
@@ -80,44 +99,17 @@ set_derives (void)
*q++ = -1;
}
#ifdef DEBUG
print_derives();
#if DEBUG
print_derives ();
#endif
FREE(dset + ntokens);
FREE(delts);
FREE (dset + ntokens);
FREE (delts);
}
void
free_derives (void)
{
FREE(derives[ntokens]);
FREE(derives + ntokens);
FREE (derives[ntokens]);
FREE (derives + ntokens);
}
#ifdef DEBUG
static void
print_derives (void)
{
register int i;
register short *sp;
printf(_("\n\n\nDERIVES\n\n"));
for (i = ntokens; i < nsyms; i++)
{
printf(_("%s derives"), tags[i]);
for (sp = derives[i]; *sp > 0; sp++)
{
printf(" %d", *sp);
}
putchar('\n');
}
putchar('\n');
}
#endif

28
src/derives.h Normal file
View File

@@ -0,0 +1,28 @@
/* Match rules with nonterminals for bison,
Copyright (C) 1984, 1989, 2000 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
Bison is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* set_derives finds, for each variable (nonterminal), which rules can
derive it. It sets up the value of derives so that derives[i -
ntokens] points to a vector of rule numbers, terminated with -1.
*/
void set_derives PARAMS((void));
void free_derives PARAMS((void));

View File

@@ -24,8 +24,9 @@
#include "getargs.h"
#include "files.h"
#include "complain.h"
#include "derives.h"
#if 0 /* XXX currently unused. */
#if 0 /* XXX currently unused. */
/* Nonzero means failure has been detected; don't write a parser file. */
static int failure;
#endif
@@ -33,23 +34,21 @@ static int failure;
/* The name this program was run with, for messages. */
char *program_name;
extern char *printable_version PARAMS((int));
extern void berror PARAMS((const char *));
extern char *printable_version PARAMS ((int));
extern void berror PARAMS ((const char *));
extern void openfiles PARAMS((void));
extern void reader PARAMS((void));
extern void reduce_grammar PARAMS((void));
extern void set_derives PARAMS((void));
extern void free_derives PARAMS((void));
extern void set_nullable PARAMS((void));
extern void free_nullable PARAMS((void));
extern void generate_states PARAMS((void));
extern void lalr PARAMS((void));
extern void initialize_conflicts PARAMS((void));
extern void finalize_conflicts PARAMS((void));
extern void verbose PARAMS((void));
extern void terse PARAMS((void));
extern void output PARAMS((void));
extern void openfiles PARAMS ((void));
extern void reader PARAMS ((void));
extern void reduce_grammar PARAMS ((void));
extern void set_nullable PARAMS ((void));
extern void free_nullable PARAMS ((void));
extern void generate_states PARAMS ((void));
extern void lalr PARAMS ((void));
extern void initialize_conflicts PARAMS ((void));
extern void finalize_conflicts PARAMS ((void));
extern void verbose PARAMS ((void));
extern void terse PARAMS ((void));
extern void output PARAMS ((void));
/* VMS complained about using `int'. */
@@ -63,59 +62,58 @@ main (int argc, char *argv[])
textdomain (PACKAGE);
lineno = 0;
getargs(argc, argv);
getargs (argc, argv);
/* Be ready to clean up if we exit.*/
/* Be ready to clean up if we exit. */
atexit (done);
openfiles();
openfiles ();
/* read the input. Copy some parts of it to fguard, faction, ftable and fattrs.
In file reader.c.
The other parts are recorded in the grammar; see gram.h. */
/* Read the input. Copy some parts of it to FGUARD, FACTION, FTABLE
and FATTRS. In file reader.c. The other parts are recorded in
the grammar; see gram.h. */
reader ();
if (complain_message_count)
exit (1);
/* find useless nonterminals and productions and reduce the grammar. In
file reduce.c */
reduce_grammar();
reduce_grammar ();
/* record other info about the grammar. In files derives and nullable. */
set_derives();
set_nullable();
set_derives ();
set_nullable ();
/* convert to nondeterministic finite state machine. In file LR0.
See state.h for more info. */
generate_states();
generate_states ();
/* make it deterministic. In file lalr. */
lalr();
lalr ();
/* Find and record any conflicts: places where one token of lookahead is not
enough to disambiguate the parsing. In file conflicts.
Also resolve s/r conflicts based on precedence declarations. */
initialize_conflicts();
/* Find and record any conflicts: places where one token of
lookahead is not enough to disambiguate the parsing. In file
conflicts. Also resolve s/r conflicts based on precedence
declarations. */
initialize_conflicts ();
/* print information about results, if requested. In file print. */
/* Print information about results, if requested. In file print.
*/
if (verboseflag)
verbose();
verbose ();
else
terse();
terse ();
/* output the tables and the parser to ftable. In file output. */
output();
/* Output the tables and the parser to ftable. In file output. */
output ();
finalize_conflicts();
free_nullable();
free_derives();
finalize_conflicts ();
free_nullable ();
free_derives ();
exit (complain_message_count ? 1 : 0);
}
/* functions to report errors which prevent a parser from being generated */
/* Return a string containing a printable version of C:
either C itself, or the corresponding \DDD code. */
@@ -124,7 +122,7 @@ printable_version (int c)
{
static char buf[10];
if (c < ' ' || c >= '\177')
sprintf(buf, "\\%o", c);
sprintf (buf, "\\%o", c);
else
{
buf[0] = c;
@@ -139,5 +137,5 @@ void
berror (const char *s)
{
fprintf (stderr, _("%s: internal error: %s\n"), program_name, s);
abort();
abort ();
}