//Rule.java////////////////////////////////////////////////////////////////////////////////////////
package edu.montana.cs.fafnir.cs550.hw2;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**************************************************************************************************
 * A rule has a Nonterminal on the left, a list of Symbols on the right, and utilitarian methods
 * for accessing them. Nothing fancy.
 **************************************************************************************************/
 
final class Rule {
    private Nonterminal leftside;
    private ArrayList rightside;
    
    Rule(Nonterminal leftside, List rightside) {
        this.leftside = leftside;
        this.rightside = new ArrayList(rightside);
    }
    
    Nonterminal getLeftSide() {
        return leftside;
    }
    
    int rightSideSize() {
        return rightside.size();
    }
    
    Symbol getRightSide(int index) {
        return (Symbol)rightside.get(index);
    }
    
    Iterator getRightSideIterator() {
        return rightside.iterator();
    }
    
    public String toString() {
        StringBuffer result = new StringBuffer(leftside.toString() + " --> ");
        
        for (Iterator i = rightside.iterator(); i.hasNext(); ) {
            result.append(((Symbol)i.next()).toString() + ' ');
        }
        
        return result.toString();
    }
}