From: David MacKenzie Date: Sun, 3 Nov 1991 02:39:18 +0000 (+0000) Subject: entered into RCS X-Git-Tag: GNU_ORIG~126 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/f7d4d87ac96c21df87b67b211c57cfba849602d0?hp=f791019c55156fd153b122859381dd3151332cdf entered into RCS --- diff --git a/src/files.h b/src/files.h new file mode 100644 index 00000000..8d24890e --- /dev/null +++ b/src/files.h @@ -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; diff --git a/src/gram.c b/src/gram.c new file mode 100644 index 00000000..cc1418d9 --- /dev/null +++ b/src/gram.c @@ -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() +{ +} diff --git a/src/gram.h b/src/gram.h new file mode 100644 index 00000000..1f3c950d --- /dev/null +++ b/src/gram.h @@ -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; diff --git a/src/lex.h b/src/lex.h new file mode 100644 index 00000000..fc03adc7 --- /dev/null +++ b/src/lex.h @@ -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 diff --git a/src/symtab.h b/src/symtab.h new file mode 100644 index 00000000..9f2cb564 --- /dev/null +++ b/src/symtab.h @@ -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(); diff --git a/src/types.h b/src/types.h new file mode 100644 index 00000000..a4aa0a75 --- /dev/null +++ b/src/types.h @@ -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; diff --git a/src/warshall.c b/src/warshall.c new file mode 100644 index 00000000..65487cbf --- /dev/null +++ b/src/warshall.c @@ -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 +#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); + } +}