]> git.saurik.com Git - bison.git/commitdiff
entered into RCS
authorDavid MacKenzie <djm@djmnet.org>
Sun, 3 Nov 1991 02:39:18 +0000 (02:39 +0000)
committerDavid MacKenzie <djm@djmnet.org>
Sun, 3 Nov 1991 02:39:18 +0000 (02:39 +0000)
src/files.h [new file with mode: 0644]
src/gram.c [new file with mode: 0644]
src/gram.h [new file with mode: 0644]
src/lex.h [new file with mode: 0644]
src/symtab.h [new file with mode: 0644]
src/types.h [new file with mode: 0644]
src/warshall.c [new file with mode: 0644]

diff --git a/src/files.h b/src/files.h
new file mode 100644 (file)
index 0000000..8d24890
--- /dev/null
@@ -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 (file)
index 0000000..cc1418d
--- /dev/null
@@ -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 (file)
index 0000000..1f3c950
--- /dev/null
@@ -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 (file)
index 0000000..fc03adc
--- /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 (file)
index 0000000..9f2cb56
--- /dev/null
@@ -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 (file)
index 0000000..a4aa0a7
--- /dev/null
@@ -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 (file)
index 0000000..65487cb
--- /dev/null
@@ -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);
+    }
+}