Annotation of researchv10dc/cmd/bison/state.h, revision 1.1

1.1     ! root        1: /* Type definitions for nondeterministic finite state machine for bison,
        !             2:    Copyright (C) 1984 Bob Corbett and Free Software Foundation, Inc.
        !             3: 
        !             4: BISON is distributed in the hope that it will be useful, but WITHOUT ANY
        !             5: WARRANTY.  No author or distributor accepts responsibility to anyone
        !             6: for the consequences of using it or for whether it serves any
        !             7: particular purpose or works at all, unless he says so in writing.
        !             8: Refer to the BISON General Public License for full details.
        !             9: 
        !            10: Everyone is granted permission to copy, modify and redistribute BISON,
        !            11: but only under the conditions described in the BISON General Public
        !            12: License.  A copy of this license is supposed to have been given to you
        !            13: along with BISON so you can know your rights and responsibilities.  It
        !            14: should be in a file named COPYING.  Among other things, the copyright
        !            15: notice and this notice must be preserved on all copies.
        !            16: 
        !            17:  In other words, you are welcome to use, share and improve this program.
        !            18:  You are forbidden to forbid anyone else to use, share and improve
        !            19:  what you give them.   Help stamp out software-hoarding!  */
        !            20: 
        !            21: /* These type definitions are used to represent a nondeterministic
        !            22:    finite state machine that parses the specified grammar.
        !            23:    This information is generated by the function generate_states
        !            24:    in the file LR0.
        !            25: 
        !            26: Each state of the machine is described by a set of items --
        !            27: particular positions in particular rules -- that are the possible
        !            28: places where parsing could continue when the machine is in this state.
        !            29: These symbols at these items are the allowable inputs that can follow now.
        !            30: 
        !            31: A core represents one state.  States are numbered in the number field.
        !            32: When generate_states is finished, the starting state is state 0
        !            33: and nstates is the number of states.  (A transition to a state
        !            34: whose state number is nstates indicates termination.)  All the cores
        !            35: are chained together and first_state points to the first one (state 0).
        !            36: 
        !            37: For each state there is a particular symbol which must have been the
        !            38: last thing accepted to reach that state.  It is the accessing_symbol
        !            39: of the core.
        !            40: 
        !            41: Each core contains a vector of nitems items which are the indices
        !            42: in the ritems vector of the items that are selected in this state.
        !            43: 
        !            44: The link field is used for chaining buckets that hash states by
        !            45: their itemsets.  This is for recognizing equivalent states and
        !            46: combining them when the states are generated.
        !            47: 
        !            48: The two types of transitions are shifts (push the lookahead token
        !            49: and read another) and reductions (combine the last n things on the
        !            50: stack via a rule, replace them with the symbol that the rule derives,
        !            51: and leave the lookahead token alone).  When the states are generated,
        !            52: these transitions are represented in two other lists.
        !            53: 
        !            54: Each shifts structure describes the possible shift transitions out
        !            55: of one state, the state whose number is in the number field.
        !            56: The shifts structures are linked through next and first_shift points to them.
        !            57: Each contains a vector of numbers of the states that shift transitions
        !            58: can go to.  The accessing_symbol fields of those states' cores say what kind
        !            59: of input leads to them.
        !            60: 
        !            61: A shift to state zero should be ignored.  Conflict resolution
        !            62: deletes shifts by changing them to zero.
        !            63: 
        !            64: Each reductions structure describes the possible reductions at the state
        !            65: whose number is in the number field.  The data is a list of nreds rules,
        !            66: represented by their rule numbers.   first_reduction points to the list
        !            67: of these structures.
        !            68: 
        !            69: Conflict resolution can decide that certain tokens in certain
        !            70: states should explicitly be errors (for implementing %nonassoc).
        !            71: For each state, the tokens that are errors for this reason
        !            72: are recorded in an errs structure, which has the state number
        !            73: in its number field.  The rest of the errs structure is full
        !            74: of token numbers.
        !            75: 
        !            76: There is at least one shift transition present in state zero.
        !            77: It leads to a next-to-final state whose accessing_symbol is
        !            78: the grammar's start symbol.  The next-to-final state has one shift
        !            79: to the final state, whose accessing_symbol is zero (end of input).
        !            80: The final state has one shift, which goes to the termination state
        !            81: (whose number is nstates, and for which there is no core structure).
        !            82: The reason for the extra state at the end is to placate the parser's
        !            83: strategy of making all decisions one token ahead of its actions.  */
        !            84: 
        !            85: 
        !            86: typedef
        !            87:   struct core
        !            88:     {
        !            89:       struct core *next;
        !            90:       struct core *link;
        !            91:       short number;
        !            92:       short accessing_symbol;
        !            93:       short nitems;
        !            94:       short items[1];
        !            95:     }
        !            96:   core;
        !            97: 
        !            98: 
        !            99: 
        !           100: typedef
        !           101:   struct shifts
        !           102:     {
        !           103:       struct shifts *next;
        !           104:       short number;
        !           105:       short nshifts;
        !           106:       short shifts[1];
        !           107:     }
        !           108:   shifts;
        !           109: 
        !           110: 
        !           111: 
        !           112: typedef
        !           113:   struct errs
        !           114:     {
        !           115:       short nerrs;
        !           116:       short errs[1];
        !           117:     }
        !           118:   errs;
        !           119: 
        !           120: 
        !           121: 
        !           122: typedef
        !           123:   struct reductions
        !           124:     {
        !           125:       struct reductions *next;
        !           126:       short number;
        !           127:       short nreds;
        !           128:       short rules[1];
        !           129:     }
        !           130:   reductions;
        !           131: 
        !           132: 
        !           133: 
        !           134: extern int nstates;
        !           135: extern core *first_state;
        !           136: extern shifts *first_shift;
        !           137: extern reductions *first_reduction;

unix.superglobalmegacorp.com

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