1 
2 package java_cup;
3 
4 
5 /** This class represents the complete "reduce-goto" table of the parser.
6  *  It has one row for each state in the parse machines, and a column for
7  *  each terminal symbol.  Each entry contains a state number to shift to
8  *  as the last step of a reduce.
9  *
10  * @see     java_cup.parse_reduce_row
11  * @version last updated: 11/25/95
12  * @author  Scott Hudson
13  */
14 public class parse_reduce_table {
15 
16   /*-----------------------------------------------------------*/
17   /*--- Constructor(s) ----------------------------------------*/
18   /*-----------------------------------------------------------*/
19 
20   /** Simple constructor.  Note: all terminals, non-terminals, and productions
21    *  must already have been entered, and the viable prefix recognizer should
22    *  have been constructed before this is called.
23    */
parse_reduce_table()24   public parse_reduce_table()
25     {
26       /* determine how many states we are working with */
27       _num_states = lalr_state.number();
28 
29       /* allocate the array and fill it in with empty rows */
30       under_state = new parse_reduce_row[_num_states];
31       for (int i=0; i<_num_states; i++)
32     under_state[i] = new parse_reduce_row();
33     }
34 
35 
36   /*-----------------------------------------------------------*/
37   /*--- (Access to) Instance Variables ------------------------*/
38   /*-----------------------------------------------------------*/
39 
40   /** How many rows/states in the machine/table. */
41   protected int _num_states;
42 
43   /** How many rows/states in the machine/table. */
num_states()44   public int num_states() {return _num_states;}
45 
46   /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
47 
48   /** Actual array of rows, one per state */
49   public  parse_reduce_row[] under_state;
50 
51   /*-----------------------------------------------------------*/
52   /*--- General Methods ---------------------------------------*/
53   /*-----------------------------------------------------------*/
54 
55   /** Convert to a string. */
toString()56   public String toString()
57     {
58       String result;
59       lalr_state goto_st;
60       int cnt;
61 
62       result = "-------- REDUCE_TABLE --------\n";
63       for (int row = 0; row < num_states(); row++)
64     {
65       result += "From state #" + row + "\n";
66       cnt = 0;
67       for (int col = 0; col < under_state[row].size(); col++)
68         {
69           /* pull out the table entry */
70           goto_st = under_state[row].under_non_term[col];
71 
72           /* if it has action in it, print it */
73           if (goto_st != null)
74         {
75           result += col + ":";
76           result += goto_st.index();
77 
78           /* end the line after the 3rd one */
79           cnt++;
80           if (cnt == 3)
81             {
82               result += "\n";
83               cnt = 0;
84             }
85         }
86         }
87           /* finish the line if we haven't just done that */
88       if (cnt != 0) result += "\n";
89     }
90       result += "-----------------------------";
91 
92       return result;
93     }
94 
95   /*-----------------------------------------------------------*/
96 
97 };
98 
99