* src/state.h (nstates, final_state, first_state, first_shift)

(first_reduction): Move their exportation from here...
* src/LR0.h: to here.
Adjust dependencies.
* src/getargs.c (statisticsflag): New variable.
Add support for `--statistics'.
Adjust dependencies.
Remove a lot of now useless `extern' statements in most files.
This commit is contained in:
Akim Demaille
2000-10-02 08:22:23 +00:00
parent 403b315bb1
commit b2ca4022ea
16 changed files with 120 additions and 109 deletions

View File

@@ -1,3 +1,16 @@
2000-10-02 Akim Demaille <akim@epita.fr>
* src/state.h (nstates, final_state, first_state, first_shift)
(first_reduction): Move their exportation from here...
* src/LR0.h: to here.
Adjust dependencies.
* src/getargs.c (statisticsflag): New variable.
Add support for `--statistics'.
Adjust dependencies.
Remove a lot of now useless `extern' statements in most files.
2000-10-02 Akim Demaille <akim@epita.fr> 2000-10-02 Akim Demaille <akim@epita.fr>
* src/LR0.h: New file. * src/LR0.h: New file.

View File

@@ -21,6 +21,14 @@
#ifndef LR0_H_ #ifndef LR0_H_
# define LR0_H_ # define LR0_H_
# include "state.h"
void generate_states PARAMS ((void)); void generate_states PARAMS ((void));
extern int nstates;
extern int final_state;
extern core *first_state;
extern shifts *first_shift;
extern reductions *first_reduction;
#endif /* !LR0_H_ */ #endif /* !LR0_H_ */

View File

@@ -25,7 +25,6 @@
#include "closure.h" #include "closure.h"
extern short **derives; extern short **derives;
extern char **tags;
extern void RTC PARAMS ((unsigned *, int)); extern void RTC PARAMS ((unsigned *, int));

View File

@@ -26,9 +26,8 @@
#include "state.h" #include "state.h"
#include "lalr.h" #include "lalr.h"
#include "conflicts.h" #include "conflicts.h"
#include "reader.h"
extern char **tags; #include "LR0.h"
extern int fixed_outfiles;
int any_conflicts = 0; int any_conflicts = 0;
errs **err_table; errs **err_table;

View File

@@ -31,7 +31,6 @@
#include "derives.h" #include "derives.h"
#if DEBUG #if DEBUG
extern char **tags;
static void static void
print_derives (void) print_derives (void)

View File

@@ -74,8 +74,6 @@ static char *tmpdefsfile;
extern char *mktemp (); /* So the compiler won't complain */ extern char *mktemp (); /* So the compiler won't complain */
extern char *getenv (); extern char *getenv ();
int fixed_outfiles = 0;
extern char *program_name; extern char *program_name;

View File

@@ -34,14 +34,11 @@ int noparserflag = 0;
int rawtoknumflag = 0; int rawtoknumflag = 0;
int toknumflag = 0; int toknumflag = 0;
int verboseflag = 0; int verboseflag = 0;
int statisticsflag = 0;
extern int fixed_outfiles;/* for -y */ int fixed_outfiles = 0;/* for -y */
extern char *program_name; extern char *program_name;
extern void warns PARAMS((char *, char *)); /* main.c */
extern void getargs PARAMS((int argc, char *[]));
static struct option longopts[] = static struct option longopts[] =
{ {
{"debug", 0, &debugflag, 1}, {"debug", 0, &debugflag, 1},
@@ -59,6 +56,7 @@ static struct option longopts[] =
{"verbose", 0, &verboseflag, 1}, {"verbose", 0, &verboseflag, 1},
{"version", 0, 0, 'V'}, {"version", 0, 0, 'V'},
{"yacc", 0, &fixed_outfiles, 1}, {"yacc", 0, &fixed_outfiles, 1},
{"statistics", 0, &statisticsflag, 1},
{0, 0, 0, 0} {0, 0, 0, 0}
}; };

View File

@@ -18,6 +18,9 @@
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */ 02111-1307, USA. */
#ifndef GETARGS_H_
# define GETARGS_H_
/* flags set by % directives */ /* flags set by % directives */
extern char *spec_file_prefix; /* for -b */ extern char *spec_file_prefix; /* for -b */
extern char *spec_name_prefix; /* for -p */ extern char *spec_name_prefix; /* for -p */
@@ -30,5 +33,9 @@ extern int noparserflag; /* for -n */
extern int rawtoknumflag; /* for -r */ extern int rawtoknumflag; /* for -r */
extern int toknumflag; /* for -k */ extern int toknumflag; /* for -k */
extern int verboseflag; /* for -v */ extern int verboseflag; /* for -v */
extern int statisticsflag;
extern int fixed_outfiles; /* for -y */
void getargs PARAMS ((int argc, char *argv[])); void getargs PARAMS ((int argc, char *argv[]));
#endif /* !GETARGS_H_ */

View File

@@ -1,79 +1,82 @@
/* Data definitions for internal representation of bison's input, /* Data definitions for internal representation of bison's input,
Copyright (C) 1984, 1986, 1989, 1992 Free Software Foundation, Inc. Copyright (C) 1984, 1986, 1989, 1992 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 Bison is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option) the Free Software Foundation; either version 2, or (at your option)
any later version. any later version.
Bison is distributed in the hope that it will be useful, Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#ifndef GRAM_H_
# define GRAM_H_
/* representation of the grammar rules: /* representation of the grammar rules:
ntokens is the number of tokens, and nvars is the number of variables ntokens is the number of tokens, and nvars is the number of
(nonterminals). nsyms is the total number, ntokens + nvars. variables (nonterminals). nsyms is the total number, ntokens +
nvars.
(the true number of token values assigned is ntokens (the true number of token values assigned is ntokens reduced by one
reduced by one for each alias declaration) for each alias declaration)
Each symbol (either token or variable) receives a symbol number. Each symbol (either token or variable) receives a symbol number.
Numbers 0 to ntokens-1 are for tokens, and ntokens to nsyms-1 are for Numbers 0 to ntokens-1 are for tokens, and ntokens to nsyms-1 are
variables. Symbol number zero is the end-of-input token. This token for variables. Symbol number zero is the end-of-input token. This
is counted in ntokens. token is counted in ntokens.
The rules receive rule numbers 1 to nrules in the order they are written. The rules receive rule numbers 1 to nrules in the order they are
Actions and guards are accessed via the rule number. written. Actions and guards are accessed via the rule number.
The rules themselves are described by three arrays: rrhs, rlhs and The rules themselves are described by three arrays: rrhs, rlhs and
ritem. rlhs[R] is the symbol number of the left hand side of rule R. ritem. rlhs[R] is the symbol number of the left hand side of rule
The right hand side is stored as symbol numbers in a portion of R. The right hand side is stored as symbol numbers in a portion of
ritem. rrhs[R] contains the index in ritem of the beginning of the ritem. rrhs[R] contains the index in ritem of the beginning of the
portion for rule R. portion for rule R.
If rlhs[R] is -1, the rule has been thrown out by reduce.c If rlhs[R] is -1, the rule has been thrown out by reduce.c and
and should be ignored. should be ignored.
The length of the portion is one greater The length of the portion is one greater than the number of symbols
than the number of symbols in the rule's right hand side. in the rule's right hand side. The last element in the portion
The last element in the portion contains minus R, which contains minus R, which identifies it as the end of a portion and
identifies it as the end of a portion and says which rule it is for. says which rule it is for.
The portions of ritem come in order of increasing rule number and are The portions of ritem come in order of increasing rule number and
followed by an element which is zero to mark the end. nitems is the are followed by an element which is zero to mark the end. nitems
total length of ritem, not counting the final zero. Each element of is the total length of ritem, not counting the final zero. Each
ritem is called an "item" and its index in ritem is an item number. element of ritem is called an "item" and its index in ritem is an
item number.
Item numbers are used in the finite state machine to represent Item numbers are used in the finite state machine to represent
places that parsing can get to. places that parsing can get to.
Precedence levels are recorded in the vectors sprec and rprec. Precedence levels are recorded in the vectors sprec and rprec.
sprec records the precedence level of each symbol, sprec records the precedence level of each symbol, rprec the
rprec the precedence level of each rule. precedence level of each rule. rprecsym is the symbol-number of
rprecsym is the symbol-number of the symbol in %prec for this rule (if any). the symbol in %prec for this rule (if any).
Precedence levels are assigned in increasing order starting with 1 so Precedence levels are assigned in increasing order starting with 1
that numerically higher precedence values mean tighter binding as they so that numerically higher precedence values mean tighter binding
ought to. Zero as a symbol or rule's precedence means none is as they ought to. Zero as a symbol or rule's precedence means none
assigned. is assigned.
Associativities are recorded similarly in rassoc and sassoc. */ Associativities are recorded similarly in rassoc and sassoc. */
#define ISTOKEN(s) ((s) < ntokens) #define ISTOKEN(s) ((s) < ntokens)
#define ISVAR(s) ((s) >= ntokens) #define ISVAR(s) ((s) >= ntokens)
extern int nitems; extern int nitems;
extern int nrules; extern int nrules;
extern int nsyms; extern int nsyms;
@@ -99,28 +102,29 @@ extern int start_symbol;
#define LEFT_ASSOC 2 #define LEFT_ASSOC 2
#define NON_ASSOC 3 #define NON_ASSOC 3
/* token translation table: /* token translation table: indexed by a token number as returned by
indexed by a token number as returned by the user's yylex routine, the user's yylex routine, it yields the internal token number used
it yields the internal token number used by the parser and throughout bison. by the parser and throughout bison. If translations is zero, the
If translations is zero, the translation table is not used because translation table is not used because the two kinds of token
the two kinds of token numbers are the same. numbers are the same. (It is noted in reader.c that "Nowadays
(It is noted in reader.c that "Nowadays translations is always set to 1...") translations is always set to 1...") */
*/
extern short *token_translations; extern short *token_translations;
extern int translations; extern int translations;
extern int max_user_token_number; extern int max_user_token_number;
/* semantic_parser is nonzero if the input file says to use the hairy parser /* SEMANTIC_PARSER is nonzero if the input file says to use the hairy
that provides for semantic error recovery. If it is zero, the yacc-compatible parser that provides for semantic error recovery. If it is zero,
simplified parser is used. */ the yacc-compatible simplified parser is used. */
extern int semantic_parser; extern int semantic_parser;
/* pure_parser is nonzero if should generate a parser that is all pure and reentrant. */ /* PURE_PARSER is nonzero if should generate a parser that is all pure
and reentrant. */
extern int pure_parser; extern int pure_parser;
/* error_token_number is the token number of the error token. */ /* ERROR_TOKEN_NUMBER is the token number of the error token. */
extern int error_token_number; extern int error_token_number;
#endif /* !GRAM_H_ */

View File

@@ -25,7 +25,7 @@ Boston, MA 02111-1307, USA. */
#include "system.h" #include "system.h"
#include "types.h" #include "types.h"
#include "state.h" #include "LR0.h"
#include "alloc.h" #include "alloc.h"
#include "gram.h" #include "gram.h"
#include "complain.h" #include "complain.h"

View File

@@ -26,10 +26,10 @@
#include "lex.h" #include "lex.h"
#include "alloc.h" #include "alloc.h"
#include "complain.h" #include "complain.h"
#include "gram.h"
/*spec_outfile is declared in files.h, for -o */ /*spec_outfile is declared in files.h, for -o */
extern int translations;
/* functions from main.c */ /* functions from main.c */
extern char *printable_version PARAMS ((int)); extern char *printable_version PARAMS ((int));

View File

@@ -95,7 +95,7 @@
#include "alloc.h" #include "alloc.h"
#include "files.h" #include "files.h"
#include "gram.h" #include "gram.h"
#include "state.h" #include "LR0.h"
#include "complain.h" #include "complain.h"
#include "output.h" #include "output.h"
#include "lalr.h" #include "lalr.h"
@@ -104,9 +104,6 @@
extern void berror PARAMS((const char *)); extern void berror PARAMS((const char *));
extern char **tags;
extern short *user_toknums;
extern int final_state;
static int nvectors; static int nvectors;

View File

@@ -23,14 +23,13 @@
#include "alloc.h" #include "alloc.h"
#include "files.h" #include "files.h"
#include "gram.h" #include "gram.h"
#include "state.h" #include "LR0.h"
#include "lalr.h" #include "lalr.h"
#include "conflicts.h" #include "conflicts.h"
#include "getargs.h" #include "getargs.h"
#include "state.h" #include "state.h"
#include "reader.h"
extern char **tags;
extern int final_state;
#if 0 #if 0
static void static void

View File

@@ -29,6 +29,17 @@
#include "gram.h" #include "gram.h"
#include "complain.h" #include "complain.h"
#include "output.h" #include "output.h"
#include "reader.h"
extern bucket *symval;
extern int numval;
extern int expected_conflicts;
extern char *token_buffer;
extern int maxtoken;
extern void tabinit PARAMS ((void));
extern void free_symtab PARAMS ((void));
extern char *printable_version PARAMS ((int));
#define LTYPESTR "\ #define LTYPESTR "\
\n\ \n\
@@ -55,16 +66,6 @@ typedef\n\
/* Number of slots allocated (but not necessarily used yet) in `rline' */ /* Number of slots allocated (but not necessarily used yet) in `rline' */
static int rline_allocated; static int rline_allocated;
extern bucket *symval;
extern int numval;
extern int expected_conflicts;
extern char *token_buffer;
extern int maxtoken;
extern void tabinit PARAMS ((void));
extern void free_symtab PARAMS ((void));
extern char *printable_version PARAMS ((int));
typedef struct symbol_list typedef struct symbol_list
{ {
struct symbol_list *next; struct symbol_list *next;
@@ -73,10 +74,6 @@ typedef struct symbol_list
} }
symbol_list; symbol_list;
extern void reader PARAMS ((void));
extern void reader_output_yylsp PARAMS ((FILE *));
int lineno; int lineno;
char **tags; char **tags;
short *user_toknums; short *user_toknums;
@@ -1667,7 +1664,7 @@ output_token_defines (FILE *file)
/*------------------------------------------------------------------. /*------------------------------------------------------------------.
| Assign symbol numbers, and write definition of token names into | | Assign symbol numbers, and write definition of token names into |
| fdefines. Set up vectors tags and sprec of names and precedences | | FDEFINES. Set up vectors TAGS and SPREC of names and precedences |
| of symbols. | | of symbols. |
`------------------------------------------------------------------*/ `------------------------------------------------------------------*/

View File

@@ -32,10 +32,8 @@
#include "alloc.h" #include "alloc.h"
#include "complain.h" #include "complain.h"
#include "reduce.h" #include "reduce.h"
#include "reader.h"
extern char **tags; /* reader.c */ #include "getargs.h"
static int statisticsflag; /* XXXXXXX */
extern int fixed_outfiles;
typedef unsigned *BSet; typedef unsigned *BSet;
typedef short *rule; typedef short *rule;
@@ -545,8 +543,8 @@ reduce_grammar (void)
dump_grammar (); dump_grammar ();
} }
#endif #endif
statisticsflag = FALSE; /* someday getopts should handle this */
if (statisticsflag == TRUE) if (statisticsflag)
fprintf (stderr, _("reduced %s defines %d terminal%s, %d nonterminal%s\ fprintf (stderr, _("reduced %s defines %d terminal%s, %d nonterminal%s\
, and %d production%s.\n"), , and %d production%s.\n"),
infile, infile,

View File

@@ -130,9 +130,4 @@ typedef struct reductions
} }
reductions; reductions;
extern int nstates;
extern core *first_state;
extern shifts *first_shift;
extern reductions *first_reduction;
#endif /* !STATE_H_ */ #endif /* !STATE_H_ */