1 package java_cup;
2 
3 /** This class represents a transition in an LALR viable prefix recognition
4  *  machine.  Transitions can be under terminals for non-terminals.  They are
5  *  internally linked together into singly linked lists containing all the
6  *  transitions out of a single state via the _next field.
7  *
8  * @see     java_cup.lalr_state
9  * @version last updated: 11/25/95
10  * @author  Scott Hudson
11  *
12  */
13 public class lalr_transition {
14 
15   /*-----------------------------------------------------------*/
16   /*--- Constructor(s) ----------------------------------------*/
17   /*-----------------------------------------------------------*/
18 
19   /** Full constructor.
20    * @param on_sym  symbol we are transitioning on.
21    * @param to_st   state we transition to.
22    * @param nxt     next transition in linked list.
23    */
lalr_transition(symbol on_sym, lalr_state to_st, lalr_transition nxt)24   public lalr_transition(symbol on_sym, lalr_state to_st, lalr_transition nxt)
25     throws internal_error
26     {
27       /* sanity checks */
28       if (on_sym == null)
29     throw new internal_error("Attempt to create transition on null symbol");
30       if (to_st == null)
31     throw new internal_error("Attempt to create transition to null state");
32 
33       /* initialize */
34       _on_symbol = on_sym;
35       _to_state  = to_st;
36       _next      = nxt;
37     }
38 
39   /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
40 
41   /** Constructor with null next.
42    * @param on_sym  symbol we are transitioning on.
43    * @param to_st   state we transition to.
44    */
lalr_transition(symbol on_sym, lalr_state to_st)45   public lalr_transition(symbol on_sym, lalr_state to_st) throws internal_error
46     {
47       this(on_sym, to_st, null);
48     }
49 
50   /*-----------------------------------------------------------*/
51   /*--- (Access to) Instance Variables ------------------------*/
52   /*-----------------------------------------------------------*/
53 
54   /** The symbol we make the transition on. */
55   protected symbol _on_symbol;
56 
57   /** The symbol we make the transition on. */
on_symbol()58   public symbol on_symbol() {return _on_symbol;}
59 
60   /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
61 
62   /** The state we transition to. */
63   protected lalr_state _to_state;
64 
65   /** The state we transition to. */
to_state()66   public lalr_state to_state() {return _to_state;}
67 
68   /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
69 
70   /** Next transition in linked list of transitions out of a state */
71   protected lalr_transition _next;
72 
73   /** Next transition in linked list of transitions out of a state */
next()74   public lalr_transition next() {return _next;}
75 
76   /*-----------------------------------------------------------*/
77   /*--- General Methods ---------------------------------------*/
78   /*-----------------------------------------------------------*/
79 
80   /** Convert to a string. */
toString()81   public String toString()
82     {
83       String result;
84 
85       result = "transition on " + on_symbol().name() + " to state [";
86       result += _to_state.index();
87       result += "]";
88 
89       return result;
90     }
91 
92   /*-----------------------------------------------------------*/
93 };
94