mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-10 04:43:03 +00:00
* 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:
@@ -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_ */
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include "closure.h"
|
||||
|
||||
extern short **derives;
|
||||
extern char **tags;
|
||||
|
||||
extern void RTC PARAMS ((unsigned *, int));
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "derives.h"
|
||||
|
||||
#if DEBUG
|
||||
extern char **tags;
|
||||
|
||||
static void
|
||||
print_derives (void)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
@@ -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}
|
||||
};
|
||||
|
||||
|
||||
@@ -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_ */
|
||||
|
||||
128
src/gram.h
128
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_ */
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
27
src/reader.c
27
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. |
|
||||
`------------------------------------------------------------------*/
|
||||
|
||||
|
||||
10
src/reduce.c
10
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,
|
||||
|
||||
@@ -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_ */
|
||||
|
||||
Reference in New Issue
Block a user