mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
entered into RCS
This commit is contained in:
52
src/files.h
Normal file
52
src/files.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/* File names and variables for bison,
|
||||
Copyright (C) 1984, 1989 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
/* These two should be pathnames for opening the sample parser files.
|
||||
When bison is installed, they should be absolute pathnames.
|
||||
XPFILE1 and XPFILE2 normally come from the Makefile. */
|
||||
|
||||
#define PFILE XPFILE /* Simple parser */
|
||||
#define PFILE1 XPFILE1 /* Semantic parser */
|
||||
|
||||
extern FILE *finput; /* read grammar specifications */
|
||||
extern FILE *foutput; /* optionally output messages describing the actions taken */
|
||||
extern FILE *fdefines; /* optionally output #define's for token numbers. */
|
||||
extern FILE *ftable; /* output the tables and the parser */
|
||||
extern FILE *fattrs; /* if semantic parser, output a .h file that defines YYSTYPE */
|
||||
/* and also contains all the %{ ... %} definitions. */
|
||||
extern FILE *fguard; /* if semantic parser, output yyguard, containing all the guard code */
|
||||
extern FILE *faction; /* output all the action code; precise form depends on which parser */
|
||||
extern FILE *fparser; /* read the parser to copy into ftable */
|
||||
|
||||
/* File name specified with -o for the output file, or 0 if no -o. */
|
||||
extern char *spec_outfile;
|
||||
|
||||
extern char *spec_name_prefix; /* for -a, from getargs.c */
|
||||
|
||||
/* File name pfx specified with -b, or 0 if no -b. */
|
||||
extern char *spec_file_prefix;
|
||||
|
||||
extern char *infile;
|
||||
extern char *outfile;
|
||||
extern char *defsfile;
|
||||
extern char *tabfile;
|
||||
extern char *attrsfile;
|
||||
extern char *guardfile;
|
||||
extern char *actfile;
|
||||
58
src/gram.c
Normal file
58
src/gram.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/* Allocate input grammar variables for bison,
|
||||
Copyright (C) 1984, 1986, 1989 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
/* comments for these variables are in gram.h */
|
||||
|
||||
int nitems;
|
||||
int nrules;
|
||||
int nsyms;
|
||||
int ntokens;
|
||||
int nvars;
|
||||
|
||||
short *ritem;
|
||||
short *rlhs;
|
||||
short *rrhs;
|
||||
short *rprec;
|
||||
short *rprecsym;
|
||||
short *sprec;
|
||||
short *rassoc;
|
||||
short *sassoc;
|
||||
short *token_translations;
|
||||
short *rline;
|
||||
|
||||
int start_symbol;
|
||||
|
||||
int translations;
|
||||
|
||||
int max_user_token_number;
|
||||
|
||||
int semantic_parser;
|
||||
|
||||
int pure_parser;
|
||||
|
||||
int error_token_number;
|
||||
|
||||
/* This is to avoid linker problems which occur on VMS when using GCC,
|
||||
when the file in question contains data definitions only. */
|
||||
|
||||
void
|
||||
dummy()
|
||||
{
|
||||
}
|
||||
120
src/gram.h
Normal file
120
src/gram.h
Normal file
@@ -0,0 +1,120 @@
|
||||
/* Data definitions for internal representation of bison's input,
|
||||
Copyright (C) 1984, 1986, 1989 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
/* 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.
|
||||
|
||||
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 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.
|
||||
|
||||
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.
|
||||
|
||||
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 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. */
|
||||
|
||||
|
||||
#define ISTOKEN(s) ((s) < ntokens)
|
||||
#define ISVAR(s) ((s) >= ntokens)
|
||||
|
||||
|
||||
extern int nitems;
|
||||
extern int nrules;
|
||||
extern int nsyms;
|
||||
extern int ntokens;
|
||||
extern int nvars;
|
||||
|
||||
extern short *ritem;
|
||||
extern short *rlhs;
|
||||
extern short *rrhs;
|
||||
extern short *rprec;
|
||||
extern short *rprecsym;
|
||||
extern short *sprec;
|
||||
extern short *rassoc;
|
||||
extern short *sassoc;
|
||||
extern short *rline; /* Source line number of each rule */
|
||||
|
||||
extern int start_symbol;
|
||||
|
||||
|
||||
/* associativity values in elements of rassoc, sassoc. */
|
||||
|
||||
#define RIGHT_ASSOC 1
|
||||
#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. */
|
||||
|
||||
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. */
|
||||
|
||||
extern int semantic_parser;
|
||||
|
||||
/* 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. */
|
||||
|
||||
extern int error_token_number;
|
||||
47
src/lex.h
Normal file
47
src/lex.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/* Token type definitions for bison's input reader,
|
||||
Copyright (C) 1984, 1989 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
#define ENDFILE 0
|
||||
#define IDENTIFIER 1
|
||||
#define COMMA 2
|
||||
#define COLON 3
|
||||
#define SEMICOLON 4
|
||||
#define BAR 5
|
||||
#define LEFT_CURLY 6
|
||||
#define TWO_PERCENTS 7
|
||||
#define PERCENT_LEFT_CURLY 8
|
||||
#define TOKEN 9
|
||||
#define NTERM 10
|
||||
#define GUARD 11
|
||||
#define TYPE 12
|
||||
#define UNION 13
|
||||
#define START 14
|
||||
#define LEFT 15
|
||||
#define RIGHT 16
|
||||
#define NONASSOC 17
|
||||
#define PREC 18
|
||||
#define SEMANTIC_PARSER 19
|
||||
#define PURE_PARSER 20
|
||||
#define TYPENAME 21
|
||||
#define NUMBER 22
|
||||
#define EXPECT 23
|
||||
#define ILLEGAL 24
|
||||
|
||||
#define MAXTOKEN 1024
|
||||
50
src/symtab.h
Normal file
50
src/symtab.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/* Definitions for symtab.c and callers, part of bison,
|
||||
Copyright (C) 1984, 1989 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
#define TABSIZE 1009
|
||||
|
||||
|
||||
/* symbol classes */
|
||||
|
||||
#define SUNKNOWN 0
|
||||
#define STOKEN 1
|
||||
#define SNTERM 2
|
||||
|
||||
|
||||
typedef
|
||||
struct bucket
|
||||
{
|
||||
struct bucket *link;
|
||||
struct bucket *next;
|
||||
char *tag;
|
||||
char *type_name;
|
||||
short value;
|
||||
short prec;
|
||||
short assoc;
|
||||
short user_token_number;
|
||||
char class;
|
||||
}
|
||||
bucket;
|
||||
|
||||
|
||||
extern bucket **symtab;
|
||||
extern bucket *firstsymbol;
|
||||
|
||||
extern bucket *getsym();
|
||||
27
src/types.h
Normal file
27
src/types.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/* Define data type for representing bison's grammar input as it is parsed,
|
||||
Copyright (C) 1984, 1989 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
typedef
|
||||
struct shorts
|
||||
{
|
||||
struct shorts *next;
|
||||
short value;
|
||||
}
|
||||
shorts;
|
||||
119
src/warshall.c
Normal file
119
src/warshall.c
Normal file
@@ -0,0 +1,119 @@
|
||||
/* Generate transitive closure of a matrix,
|
||||
Copyright (C) 1984, 1989 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include "system.h"
|
||||
#include "machine.h"
|
||||
|
||||
|
||||
/* given n by n matrix of bits R, modify its contents
|
||||
to be the transive closure of what was given. */
|
||||
|
||||
void
|
||||
TC(R, n)
|
||||
unsigned *R;
|
||||
int n;
|
||||
{
|
||||
register int rowsize;
|
||||
register unsigned mask;
|
||||
register unsigned *rowj;
|
||||
register unsigned *rp;
|
||||
register unsigned *rend;
|
||||
register unsigned *ccol;
|
||||
|
||||
unsigned *relend;
|
||||
unsigned *cword;
|
||||
unsigned *rowi;
|
||||
|
||||
rowsize = WORDSIZE(n) * sizeof(unsigned);
|
||||
relend = (unsigned *) ((char *) R + (n * rowsize));
|
||||
|
||||
cword = R;
|
||||
mask = 1;
|
||||
rowi = R;
|
||||
while (rowi < relend)
|
||||
{
|
||||
ccol = cword;
|
||||
rowj = R;
|
||||
|
||||
while (rowj < relend)
|
||||
{
|
||||
if (*ccol & mask)
|
||||
{
|
||||
rp = rowi;
|
||||
rend = (unsigned *) ((char *) rowj + rowsize);
|
||||
|
||||
while (rowj < rend)
|
||||
*rowj++ |= *rp++;
|
||||
}
|
||||
else
|
||||
{
|
||||
rowj = (unsigned *) ((char *) rowj + rowsize);
|
||||
}
|
||||
|
||||
ccol = (unsigned *) ((char *) ccol + rowsize);
|
||||
}
|
||||
|
||||
mask <<= 1;
|
||||
if (mask == 0)
|
||||
{
|
||||
mask = 1;
|
||||
cword++;
|
||||
}
|
||||
|
||||
rowi = (unsigned *) ((char *) rowi + rowsize);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Reflexive Transitive Closure. Same as TC
|
||||
and then set all the bits on the diagonal of R. */
|
||||
|
||||
void
|
||||
RTC(R, n)
|
||||
unsigned *R;
|
||||
int n;
|
||||
{
|
||||
register int rowsize;
|
||||
register unsigned mask;
|
||||
register unsigned *rp;
|
||||
register unsigned *relend;
|
||||
|
||||
TC(R, n);
|
||||
|
||||
rowsize = WORDSIZE(n) * sizeof(unsigned);
|
||||
relend = (unsigned *) ((char *) R + n*rowsize);
|
||||
|
||||
mask = 1;
|
||||
rp = R;
|
||||
while (rp < relend)
|
||||
{
|
||||
*rp |= mask;
|
||||
|
||||
mask <<= 1;
|
||||
if (mask == 0)
|
||||
{
|
||||
mask = 1;
|
||||
rp++;
|
||||
}
|
||||
|
||||
rp = (unsigned *) ((char *) rp + rowsize);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user