/* Generated by JTB 1.5.1 */
package grammars.b.syntaxtree;

import grammars.b.Token;
import grammars.b.visitor.IRetVisitor;
import grammars.b.visitor.IRetArguVisitor;
import grammars.b.visitor.IVoidVisitor;
import grammars.b.visitor.IVoidArguVisitor;


/**
 * JTB node class for the production Start:<br>
 * Corresponding grammar:<br>
 * f0 -> . %0 < EOF ><br>
 * .. .. | %1 #00 bp_v() #01 bp_v_()<br>
 * .. .. . .. #02 bp_w() #03 bp_w_() #04 bp_x()<br>
 * .. .. . .. #05 bp_x_() #06 bp_x__() #07 bp_y()<br>
 * .. .. . .. #08 bp_y_() #09 bp_z_() #10 bp_z__()<br>
 * .. .. . .. #11 bp_v_o() #12 bp_v_o() #13 bp_ui()<br>
 * .. .. . .. #14 bp_s() #15 bp_sa()<br>
 * .. .. . .. #16 bp_v1() #17 bp_v2() #18 bp_v3()<br>
 * .. .. . .. #19 bp_s1() #20 bp_s2() #21 bp_s3()<br>
 * .. .. . .. #22 bp_c() #23 bp_ca() #24 bp_h()<br>
 * .. .. . .. #25 bp_haa() #26 bp_l()<br>
 * .. .. . .. #27 bp_d() #28 bp_da() #29 bp_f()<br>
 * .. .. . .. #30 bp_jual() #31 bp_hm() #32 < EOF ><br>
 * .. .. | %2 #0 ";" #1 bp_tu_a() #2 bp_acc()<br>
 * .. .. . .. #3 bp_DoubleThrows()<br>
 * .. .. . .. :4 bp_DoubleThrows()<br>
 * .. .. . .. #5 jcp_DoubleThrows()<br>
 * .. .. . .. :6 jcp_DoubleThrows()<br>
 * .. .. . .. #7 skipButBuild() #8 < EOF ><br>
 * .. .. | %3 #0 "," #1 expch_a() #2 expch_b()<br>
 * .. .. . .. #3 expch_c() #4 expch_c() #5 expch_c()<br>
 * .. .. . .. #6 expch_c() #7 expch_c() #8 expch_c()<br>
 * .. .. | %4 #0 "." #1 expch_em_lxac() #2 expch_em_lxac()<br>
 * .. .. . .. #3 expch_em_lxac() #4 expch_em_lxac()<br>
 * .. .. . .. #5 expch_wnsn() #6 expch_wnsn() #7 expch_2ch()<br>
 * s: 1245641368<br>
 */
public class Start implements INode {

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

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

  /**
   * Constructs the node with its child node.
   *
   * @param n0 - the child node
   */
  public Start(final NodeChoice n0) {
    f0 = n0;
  }
  /*
   * Visitors accept methods (no -novis option, visitors specification : Void,void,None;VoidArgu,void,A;Ret,R,None;RetArgu,R,A)
   */

  /**
   * Accepts a {@link IRetVisitor} visitor with user return data.
   *
   * @param <R> - the return type parameter
   * @param vis - the visitor
   * @return the user Return data
   */
  @Override
  public <R> R accept(final IRetVisitor<R> vis) {
    return vis.visit(this);
  }

  /**
   * Accepts a {@link IRetArguVisitor} visitor with user return and argument data.
   *
   * @param <R> - the return type parameter
   * @param <A> - The argument 0 type parameter
   * @param vis - the visitor
   * @param argu - the user Argument data
   * @return the user Return data
   */
  @Override
  public <R, A> R accept(final IRetArguVisitor<R, A> vis, final A argu) {
    return vis.visit(this, argu);
  }

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

  /**
   * Accepts a {@link IVoidArguVisitor} visitor with user argument data.
   *
   * @param <A> - The argument 0 type parameter
   * @param vis - the visitor
   * @param argu - the user Argument data
   */
  @Override
  public <A> void accept(final IVoidArguVisitor<A> vis, final A argu) {
    vis.visit(this, argu);
  }


}
