Annotation of GNUtools/bison/gram.h, revision 1.1.1.1

1.1       root        1: /* Data definitions for internal representation of bison's input,
                      2:    Copyright (C) 1984, 1986, 1989 Free Software Foundation, Inc.
                      3: 
                      4: This file is part of Bison, the GNU Compiler Compiler.
                      5: 
                      6: Bison is free software; you can redistribute it and/or modify
                      7: it under the terms of the GNU General Public License as published by
                      8: the Free Software Foundation; either version 2, or (at your option)
                      9: any later version.
                     10: 
                     11: Bison is distributed in the hope that it will be useful,
                     12: but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     14: GNU General Public License for more details.
                     15: 
                     16: You should have received a copy of the GNU General Public License
                     17: along with Bison; see the file COPYING.  If not, write to
                     18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
                     19: 
                     20: 
                     21: /* representation of the grammar rules:
                     22: 
                     23: ntokens is the number of tokens, and nvars is the number of variables
                     24: (nonterminals).  nsyms is the total number, ntokens + nvars.
                     25: 
                     26: Each symbol (either token or variable) receives a symbol number.
                     27: Numbers 0 to ntokens-1 are for tokens, and ntokens to nsyms-1 are for
                     28: variables.  Symbol number zero is the end-of-input token.  This token
                     29: is counted in ntokens.
                     30: 
                     31: The rules receive rule numbers 1 to nrules in the order they are written.
                     32: Actions and guards are accessed via the rule number.
                     33: 
                     34: The rules themselves are described by three arrays: rrhs, rlhs and
                     35: ritem.  rlhs[R] is the symbol number of the left hand side of rule R.
                     36: The right hand side is stored as symbol numbers in a portion of
                     37: ritem.  rrhs[R] contains the index in ritem of the beginning of the
                     38: portion for rule R.
                     39: 
                     40: If rlhs[R] is -1, the rule has been thrown out by reduce.c
                     41: and should be ignored.
                     42: 
                     43: The length of the portion is one greater
                     44:  than the number of symbols in the rule's right hand side.
                     45: The last element in the portion contains minus R, which
                     46: identifies it as the end of a portion and says which rule it is for.
                     47: 
                     48: The portions of ritem come in order of increasing rule number and are
                     49: followed by an element which is zero to mark the end.  nitems is the
                     50: total length of ritem, not counting the final zero.  Each element of
                     51: ritem is called an "item" and its index in ritem is an item number.
                     52: 
                     53: Item numbers are used in the finite state machine to represent
                     54: places that parsing can get to.
                     55: 
                     56: Precedence levels are recorded in the vectors sprec and rprec.
                     57: sprec records the precedence level of each symbol,
                     58: rprec the precedence level of each rule.
                     59: rprecsym is the symbol-number of the symbol in %prec for this rule (if any).
                     60: 
                     61: Precedence levels are assigned in increasing order starting with 1 so
                     62: that numerically higher precedence values mean tighter binding as they
                     63: ought to.  Zero as a symbol or rule's precedence means none is
                     64: assigned.
                     65: 
                     66: Associativities are recorded similarly in rassoc and sassoc.  */
                     67: 
                     68: 
                     69: #define        ISTOKEN(s)      ((s) < ntokens)
                     70: #define        ISVAR(s)        ((s) >= ntokens)
                     71: 
                     72: 
                     73: extern int nitems;
                     74: extern int nrules;
                     75: extern int nsyms;
                     76: extern int ntokens;
                     77: extern int nvars;
                     78: 
                     79: extern short *ritem;
                     80: extern short *rlhs;
                     81: extern short *rrhs;
                     82: extern short *rprec;
                     83: extern short *rprecsym;
                     84: extern short *sprec;
                     85: extern short *rassoc;
                     86: extern short *sassoc;
                     87: extern short *rline;           /* Source line number of each rule */
                     88: 
                     89: extern int start_symbol;
                     90: 
                     91: 
                     92: /* associativity values in elements of rassoc, sassoc.  */
                     93: 
                     94: #define RIGHT_ASSOC 1
                     95: #define LEFT_ASSOC 2
                     96: #define NON_ASSOC 3
                     97: 
                     98: /* token translation table:
                     99: indexed by a token number as returned by the user's yylex routine,
                    100: it yields the internal token number used by the parser and throughout bison.
                    101: If translations is zero, the translation table is not used because
                    102: the two kinds of token numbers are the same.  */
                    103: 
                    104: extern short *token_translations;
                    105: extern int translations;
                    106: extern int max_user_token_number;
                    107: 
                    108: /* semantic_parser is nonzero if the input file says to use the hairy parser
                    109: that provides for semantic error recovery.  If it is zero, the yacc-compatible
                    110: simplified parser is used.  */
                    111: 
                    112: extern int semantic_parser;
                    113: 
                    114: /* pure_parser is nonzero if should generate a parser that is all pure and reentrant. */
                    115: 
                    116: extern int pure_parser;
                    117: 
                    118: /* error_token_number is the token number of the error token.  */
                    119: 
                    120: extern int error_token_number;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.