/* Generated by JTB 1.5.1 */
package EDU.purdue.jtb.parser.syntaxtree;

import EDU.purdue.jtb.parser.Token;
import EDU.purdue.jtb.parser.visitor.IIntVisitor;
import EDU.purdue.jtb.parser.visitor.IVoidVisitor;


/**
 * JTB node class for the production BNFProduction:<br>
 * Corresponding grammar:<br>
 * f0 -> AccessModifier()<br>
 * f1 -> ResultType()<br>
 * f2 -> IdentifierAsString()<br>
 * f3 -> FormalParameters()<br>
 * f4 -> [ #0 "throws" #1 Name()<br>
 * .. .. . #2 ( $0 "," $1 Name() )* ]<br>
 * f5 -> [ "!" ]<br>
 * f6 -> ":"<br>
 * f7 -> Block()<br>
 * f8 -> "{"<br>
 * f9 -> ExpansionChoices()<br>
 * f10 -> "}"<br>
 * s: 1323482450<br>
 */
public class BNFProduction implements INode {

  /** Child node 0 */
  public AccessModifier f0;

  /** Child node 1 */
  public ResultType f1;

  /** Child node 2 */
  public IdentifierAsString f2;

  /** Child node 3 */
  public FormalParameters f3;

  /** Child node 4 */
  public NodeOptional f4;

  /** Child node 5 */
  public NodeOptional f5;

  /** Child node 6 */
  public Token f6;

  /** Child node 7 */
  public Block f7;

  /** Child node 8 */
  public Token f8;

  /** Child node 9 */
  public ExpansionChoices f9;

  /** Child node 10 */
  public Token f10;

  /** The serial version UID */
  private static final long serialVersionUID = 151L;

  /**
   * Constructs the node with all its children nodes.
   *
   * @param n0 - first child node
   * @param n1 - next child node
   * @param n2 - next child node
   * @param n3 - next child node
   * @param n4 - next child node
   * @param n5 - next child node
   * @param n6 - next child node
   * @param n7 - next child node
   * @param n8 - next child node
   * @param n9 - next child node
   * @param n10 - next child node
   */
  public BNFProduction(final AccessModifier n0, final ResultType n1, final IdentifierAsString n2, final FormalParameters n3, final NodeOptional n4, final NodeOptional n5, final Token n6, final Block n7, final Token n8, final ExpansionChoices n9, final Token n10) {
    f0 = n0;
    f1 = n1;
    f2 = n2;
    f3 = n3;
    f4 = n4;
    f5 = n5;
    f6 = n6;
    f7 = n7;
    f8 = n8;
    f9 = n9;
    f10 = n10;
  }
  /*
   * Visitors accept methods (no -novis option, visitors specification : Void,void,None;Int,int,None)
   */

  /**
   * Accepts a {@link IIntVisitor} visitor with user return data.
   *
   * @param vis - the visitor
   * @return the user Return data
   */
  @Override
  public int accept(final IIntVisitor vis) {
    return vis.visit(this);
  }

  /**
   * Accepts a {@link IVoidVisitor} visitor} visitor with user return data.
   *
   * @param vis - the visitor
   */
  @Override
  public void accept(final IVoidVisitor vis) {
    vis.visit(this);
  }


}
