From b2ca4022ea6c61e10ac87a0a92bb0f998ecf8b48 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 2 Oct 2000 08:22:23 +0000 Subject: [PATCH] * 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. --- ChangeLog | 13 ++++++ src/LR0.h | 8 ++++ src/closure.c | 1 - src/conflicts.c | 5 +-- src/derives.c | 1 - src/files.c | 2 - src/getargs.c | 8 ++-- src/getargs.h | 7 ++++ src/gram.h | 128 +++++++++++++++++++++++++++++--------------------------- src/lalr.c | 2 +- src/lex.c | 2 +- src/output.c | 5 +-- src/print.c | 5 +-- src/reader.c | 27 ++++++------ src/reduce.c | 10 ++--- src/state.h | 5 --- 16 files changed, 120 insertions(+), 109 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7181319..9edf818 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 2000-10-02 Akim Demaille + * 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 + * src/LR0.h: New file. Propagate its use. diff --git a/src/LR0.h b/src/LR0.h index 3010952..3ad8b68 100644 --- a/src/LR0.h +++ b/src/LR0.h @@ -21,6 +21,14 @@ #ifndef LR0_H_ # define LR0_H_ +# include "state.h" + 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_ */ diff --git a/src/closure.c b/src/closure.c index 3107325..87ad8c5 100644 --- a/src/closure.c +++ b/src/closure.c @@ -25,7 +25,6 @@ #include "closure.h" extern short **derives; -extern char **tags; extern void RTC PARAMS ((unsigned *, int)); diff --git a/src/conflicts.c b/src/conflicts.c index 2ade63d..d6c31ef 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -26,9 +26,8 @@ #include "state.h" #include "lalr.h" #include "conflicts.h" - -extern char **tags; -extern int fixed_outfiles; +#include "reader.h" +#include "LR0.h" int any_conflicts = 0; errs **err_table; diff --git a/src/derives.c b/src/derives.c index 5f8637c..3c1d3f6 100644 --- a/src/derives.c +++ b/src/derives.c @@ -31,7 +31,6 @@ #include "derives.h" #if DEBUG -extern char **tags; static void print_derives (void) diff --git a/src/files.c b/src/files.c index dc15733..3dc9ca5 100644 --- a/src/files.c +++ b/src/files.c @@ -74,8 +74,6 @@ static char *tmpdefsfile; extern char *mktemp (); /* So the compiler won't complain */ extern char *getenv (); -int fixed_outfiles = 0; - extern char *program_name; diff --git a/src/getargs.c b/src/getargs.c index de9880b..fd26b78 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -34,14 +34,11 @@ int noparserflag = 0; int rawtoknumflag = 0; int toknumflag = 0; int verboseflag = 0; - -extern int fixed_outfiles;/* for -y */ +int statisticsflag = 0; +int fixed_outfiles = 0;/* for -y */ extern char *program_name; -extern void warns PARAMS((char *, char *)); /* main.c */ -extern void getargs PARAMS((int argc, char *[])); - static struct option longopts[] = { {"debug", 0, &debugflag, 1}, @@ -59,6 +56,7 @@ static struct option longopts[] = {"verbose", 0, &verboseflag, 1}, {"version", 0, 0, 'V'}, {"yacc", 0, &fixed_outfiles, 1}, + {"statistics", 0, &statisticsflag, 1}, {0, 0, 0, 0} }; diff --git a/src/getargs.h b/src/getargs.h index 3b9e299..ae2b04e 100644 --- a/src/getargs.h +++ b/src/getargs.h @@ -18,6 +18,9 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#ifndef GETARGS_H_ +# define GETARGS_H_ + /* flags set by % directives */ extern char *spec_file_prefix; /* for -b */ extern char *spec_name_prefix; /* for -p */ @@ -30,5 +33,9 @@ extern int noparserflag; /* for -n */ extern int rawtoknumflag; /* for -r */ extern int toknumflag; /* for -k */ extern int verboseflag; /* for -v */ +extern int statisticsflag; +extern int fixed_outfiles; /* for -y */ void getargs PARAMS ((int argc, char *argv[])); + +#endif /* !GETARGS_H_ */ diff --git a/src/gram.h b/src/gram.h index a83dd36..1b18232 100644 --- a/src/gram.h +++ b/src/gram.h @@ -1,79 +1,82 @@ /* Data definitions for internal representation of bison's input, 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 -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. */ +#ifndef GRAM_H_ +# define GRAM_H_ /* representation of the grammar rules: -ntokens is the number of tokens, and nvars is the number of variables -(nonterminals). nsyms is the total number, ntokens + nvars. + ntokens is the number of tokens, and nvars is the number of + variables (nonterminals). nsyms is the total number, ntokens + + nvars. - (the true number of token values assigned is ntokens - reduced by one for each alias declaration) + (the true number of token values assigned is ntokens reduced by one + for each alias declaration) -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 -variables. Symbol number zero is the end-of-input token. This token -is counted in ntokens. + 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 variables. Symbol number zero is the end-of-input token. This + token is counted in ntokens. -The rules receive rule numbers 1 to nrules in the order they are written. -Actions and guards are accessed via the rule number. + The rules receive rule numbers 1 to nrules in the order they are + written. Actions and guards are accessed via the rule number. -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. -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 -portion for rule R. + 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. 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 + portion for rule R. -If rlhs[R] is -1, the rule has been thrown out by reduce.c -and should be ignored. + If rlhs[R] is -1, the rule has been thrown out by reduce.c and + should be ignored. -The length of the portion is one greater - than the number of symbols in the rule's right hand side. -The last element in the portion contains minus R, which -identifies it as the end of a portion and says which rule it is for. + The length of the portion is one greater than the number of symbols + in the rule's right hand side. The last element in the portion + contains minus R, which identifies it as the end of a portion and + says which rule it is for. -The portions of ritem come in order of increasing rule number and are -followed by an element which is zero to mark the end. nitems is the -total length of ritem, not counting the final zero. Each element of -ritem is called an "item" and its index in ritem is an item number. + The portions of ritem come in order of increasing rule number and + are followed by an element which is zero to mark the end. nitems + is the total length of ritem, not counting the final zero. Each + 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 -places that parsing can get to. + Item numbers are used in the finite state machine to represent + places that parsing can get to. -Precedence levels are recorded in the vectors sprec and rprec. -sprec records the precedence level of each symbol, -rprec the precedence level of each rule. -rprecsym is the symbol-number of the symbol in %prec for this rule (if any). + Precedence levels are recorded in the vectors sprec and rprec. + sprec records the precedence level of each symbol, rprec the + precedence level of each rule. rprecsym is the symbol-number of + the symbol in %prec for this rule (if any). -Precedence levels are assigned in increasing order starting with 1 so -that numerically higher precedence values mean tighter binding as they -ought to. Zero as a symbol or rule's precedence means none is -assigned. + Precedence levels are assigned in increasing order starting with 1 + so that numerically higher precedence values mean tighter binding + as they ought to. Zero as a symbol or rule's precedence means none + is assigned. -Associativities are recorded similarly in rassoc and sassoc. */ + Associativities are recorded similarly in rassoc and sassoc. */ #define ISTOKEN(s) ((s) < ntokens) #define ISVAR(s) ((s) >= ntokens) - extern int nitems; extern int nrules; extern int nsyms; @@ -99,28 +102,29 @@ extern int start_symbol; #define LEFT_ASSOC 2 #define NON_ASSOC 3 -/* token translation table: -indexed by a token number as returned by the user's yylex routine, -it yields the internal token number used by the parser and throughout bison. -If translations is zero, the translation table is not used because -the two kinds of token numbers are the same. -(It is noted in reader.c that "Nowadays translations is always set to 1...") -*/ +/* token translation table: indexed by a token number as returned by + the user's yylex routine, it yields the internal token number used + by the parser and throughout bison. If translations is zero, the + translation table is not used because the two kinds of token + numbers are the same. (It is noted in reader.c that "Nowadays + translations is always set to 1...") */ extern short *token_translations; extern int translations; extern int max_user_token_number; -/* semantic_parser is nonzero if the input file says to use the hairy parser -that provides for semantic error recovery. If it is zero, the yacc-compatible -simplified parser is used. */ +/* SEMANTIC_PARSER is nonzero if the input file says to use the hairy + parser that provides for semantic error recovery. If it is zero, + the yacc-compatible simplified parser is used. */ 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; -/* 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; +#endif /* !GRAM_H_ */ diff --git a/src/lalr.c b/src/lalr.c index 8e83de9..742ff60 100644 --- a/src/lalr.c +++ b/src/lalr.c @@ -25,7 +25,7 @@ Boston, MA 02111-1307, USA. */ #include "system.h" #include "types.h" -#include "state.h" +#include "LR0.h" #include "alloc.h" #include "gram.h" #include "complain.h" diff --git a/src/lex.c b/src/lex.c index a10c872..27df7f1 100644 --- a/src/lex.c +++ b/src/lex.c @@ -26,10 +26,10 @@ #include "lex.h" #include "alloc.h" #include "complain.h" +#include "gram.h" /*spec_outfile is declared in files.h, for -o */ -extern int translations; /* functions from main.c */ extern char *printable_version PARAMS ((int)); diff --git a/src/output.c b/src/output.c index 54955b6..214300d 100644 --- a/src/output.c +++ b/src/output.c @@ -95,7 +95,7 @@ #include "alloc.h" #include "files.h" #include "gram.h" -#include "state.h" +#include "LR0.h" #include "complain.h" #include "output.h" #include "lalr.h" @@ -104,9 +104,6 @@ extern void berror PARAMS((const char *)); -extern char **tags; -extern short *user_toknums; -extern int final_state; static int nvectors; diff --git a/src/print.c b/src/print.c index bf3fce8..9a84853 100644 --- a/src/print.c +++ b/src/print.c @@ -23,14 +23,13 @@ #include "alloc.h" #include "files.h" #include "gram.h" -#include "state.h" +#include "LR0.h" #include "lalr.h" #include "conflicts.h" #include "getargs.h" #include "state.h" +#include "reader.h" -extern char **tags; -extern int final_state; #if 0 static void diff --git a/src/reader.c b/src/reader.c index cb297c4..c89313e 100644 --- a/src/reader.c +++ b/src/reader.c @@ -29,6 +29,17 @@ #include "gram.h" #include "complain.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 "\ \n\ @@ -55,16 +66,6 @@ typedef\n\ /* Number of slots allocated (but not necessarily used yet) in `rline' */ 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 { struct symbol_list *next; @@ -73,10 +74,6 @@ typedef struct symbol_list } symbol_list; - -extern void reader PARAMS ((void)); -extern void reader_output_yylsp PARAMS ((FILE *)); - int lineno; char **tags; short *user_toknums; @@ -1667,7 +1664,7 @@ output_token_defines (FILE *file) /*------------------------------------------------------------------. | 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. | `------------------------------------------------------------------*/ diff --git a/src/reduce.c b/src/reduce.c index d160f9d..8175f29 100644 --- a/src/reduce.c +++ b/src/reduce.c @@ -32,10 +32,8 @@ #include "alloc.h" #include "complain.h" #include "reduce.h" - -extern char **tags; /* reader.c */ -static int statisticsflag; /* XXXXXXX */ -extern int fixed_outfiles; +#include "reader.h" +#include "getargs.h" typedef unsigned *BSet; typedef short *rule; @@ -545,8 +543,8 @@ reduce_grammar (void) dump_grammar (); } #endif - statisticsflag = FALSE; /* someday getopts should handle this */ - if (statisticsflag == TRUE) + + if (statisticsflag) fprintf (stderr, _("reduced %s defines %d terminal%s, %d nonterminal%s\ , and %d production%s.\n"), infile, diff --git a/src/state.h b/src/state.h index 43e6809..615c7d5 100644 --- a/src/state.h +++ b/src/state.h @@ -130,9 +130,4 @@ typedef struct reductions } reductions; -extern int nstates; -extern core *first_state; -extern shifts *first_shift; -extern reductions *first_reduction; - #endif /* !STATE_H_ */ -- 2.7.4