(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.
16 files changed:
+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>
* src/LR0.h: New file.
2000-10-02 Akim Demaille <akim@epita.fr>
* src/LR0.h: New file.
#ifndef LR0_H_
# define LR0_H_
#ifndef LR0_H_
# define LR0_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;
+
#include "closure.h"
extern short **derives;
#include "closure.h"
extern short **derives;
extern void RTC PARAMS ((unsigned *, int));
extern void RTC PARAMS ((unsigned *, int));
#include "state.h"
#include "lalr.h"
#include "conflicts.h"
#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;
int any_conflicts = 0;
errs **err_table;
#include "derives.h"
#if DEBUG
#include "derives.h"
#if DEBUG
static void
print_derives (void)
static void
print_derives (void)
extern char *mktemp (); /* So the compiler won't complain */
extern char *getenv ();
extern char *mktemp (); /* So the compiler won't complain */
extern char *getenv ();
-int fixed_outfiles = 0;
-
extern char *program_name;
\f
extern char *program_name;
\f
int rawtoknumflag = 0;
int toknumflag = 0;
int verboseflag = 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 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},
static struct option longopts[] =
{
{"debug", 0, &debugflag, 1},
{"verbose", 0, &verboseflag, 1},
{"version", 0, 0, 'V'},
{"yacc", 0, &fixed_outfiles, 1},
{"verbose", 0, &verboseflag, 1},
{"version", 0, 0, 'V'},
{"yacc", 0, &fixed_outfiles, 1},
+ {"statistics", 0, &statisticsflag, 1},
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
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 */
/* flags set by % directives */
extern char *spec_file_prefix; /* for -b */
extern char *spec_name_prefix; /* for -p */
extern int rawtoknumflag; /* for -r */
extern int toknumflag; /* for -k */
extern int verboseflag; /* for -v */
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[]));
void getargs PARAMS ((int argc, char *argv[]));
+
+#endif /* !GETARGS_H_ */
/* Data definitions for internal representation of bison's input,
Copyright (C) 1984, 1986, 1989, 1992 Free Software Foundation, Inc.
/* 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:
/* 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)
#define ISTOKEN(s) ((s) < ntokens)
#define ISVAR(s) ((s) >= ntokens)
extern int nitems;
extern int nrules;
extern int nsyms;
extern int nitems;
extern int nrules;
extern int nsyms;
#define LEFT_ASSOC 2
#define NON_ASSOC 3
#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;
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;
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. */
-/* 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;
#include "system.h"
#include "types.h"
#include "system.h"
#include "types.h"
#include "alloc.h"
#include "gram.h"
#include "complain.h"
#include "alloc.h"
#include "gram.h"
#include "complain.h"
#include "lex.h"
#include "alloc.h"
#include "complain.h"
#include "lex.h"
#include "alloc.h"
#include "complain.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 */
extern char *printable_version PARAMS ((int));
/* functions from main.c */
extern char *printable_version PARAMS ((int));
#include "alloc.h"
#include "files.h"
#include "gram.h"
#include "alloc.h"
#include "files.h"
#include "gram.h"
#include "complain.h"
#include "output.h"
#include "lalr.h"
#include "complain.h"
#include "output.h"
#include "lalr.h"
extern void berror PARAMS((const char *));
extern void berror PARAMS((const char *));
-extern char **tags;
-extern short *user_toknums;
-extern int final_state;
#include "alloc.h"
#include "files.h"
#include "gram.h"
#include "alloc.h"
#include "files.h"
#include "gram.h"
#include "lalr.h"
#include "conflicts.h"
#include "getargs.h"
#include "state.h"
#include "lalr.h"
#include "conflicts.h"
#include "getargs.h"
#include "state.h"
-extern char **tags;
-extern int final_state;
#include "gram.h"
#include "complain.h"
#include "output.h"
#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));
/* Number of slots allocated (but not necessarily used yet) in `rline' */
static int rline_allocated;
/* 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;
typedef struct symbol_list
{
struct symbol_list *next;
-
-extern void reader PARAMS ((void));
-extern void reader_output_yylsp PARAMS ((FILE *));
-
int lineno;
char **tags;
short *user_toknums;
int lineno;
char **tags;
short *user_toknums;
/*------------------------------------------------------------------.
| 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. |
`------------------------------------------------------------------*/
#include "alloc.h"
#include "complain.h"
#include "reduce.h"
#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;
typedef unsigned *BSet;
typedef short *rule;
dump_grammar ();
}
#endif
dump_grammar ();
}
#endif
- statisticsflag = FALSE; /* someday getopts should handle this */
- if (statisticsflag == TRUE)
fprintf (stderr, _("reduced %s defines %d terminal%s, %d nonterminal%s\
, and %d production%s.\n"),
infile,
fprintf (stderr, _("reduced %s defines %d terminal%s, %d nonterminal%s\
, and %d production%s.\n"),
infile,
-extern int nstates;
-extern core *first_state;
-extern shifts *first_shift;
-extern reductions *first_reduction;
-