Package org.netbeans.modules.scala.core.rats

Source Code of org.netbeans.modules.scala.core.rats.ParserScala

// ===========================================================================
// This file has been generated by
// Rats! Parser Generator, version 1.14.3,
// (C) 2004-2009 Robert Grimm,
// on Tuesday, October 20, 2009 at 10:24:03 PM.
// Edit at your own risk.
// ===========================================================================

package org.netbeans.modules.scala.core.rats;

import java.io.Reader;
import java.io.IOException;

import java.util.HashSet;
import java.util.Set;

import xtc.util.Pair;

import xtc.tree.Node;
import xtc.tree.GNode;

import xtc.parser.ParserBase;
import xtc.parser.Column;
import xtc.parser.Result;
import xtc.parser.SemanticValue;
import xtc.parser.ParseError;

/**
* Packrat parser for grammar <code>org.netbeans.modules.scala.core.rats.ParserScala</code>.
*
* <p />This class has been generated by the <i>Rats!</i> parser
* generator, version 1.14.3, (C) 2004-2009 Robert Grimm.
*/
public final class ParserScala extends ParserBase {

  /** The SCALA_KEYWORDS set. */
  public static final Set<String> SCALA_KEYWORDS = new HashSet<String>();

  // =========================================================================

  /** Chunk 1 of memoized results. */
  static final class Chunk1 {
    Result fXmlElementP;
    Result fXmlElementP$$Star1;
    Result fLiteral;
    Result fPath;
    Result fStableId;
    Result fStableId$$Star1;
    Result fStableId$$Star2;
    Result fStableId$$Star3;
    Result fType;
    Result fInfixType;
  }

  /** Chunk 2 of memoized results. */
  static final class Chunk2 {
    Result fInfixType$$Star1;
    Result fCompoundType;
    Result fCompoundType$$Star1;
    Result fAnnotType;
    Result f$$Shared1;
    Result fRefineStat;
    Result fExpr;
    Result fNotFunExpr;
    Result f$$Shared2;
    Result fPostfixExpr;
  }

  /** Chunk 3 of memoized results. */
  static final class Chunk3 {
    Result fPrefixExpr;
    Result fSimpleExpr;
    Result fSimpleExpr$$Star1;
    Result fSimpleExpr$$Star2;
    Result fSimpleExpr$$Star3;
    Result fSimpleExpr$$Star4;
    Result fSimpleExpr$$Star5;
    Result fSimpleExpr$$Star6;
    Result fSimpleExpr$$Star7;
    Result fMember;
  }

  /** Chunk 4 of memoized results. */
  static final class Chunk4 {
    Result fArgumentExprs;
    Result fParenExpr;
    Result fBlockExpr;
    Result fBlock;
    Result fBlock$$Star1;
    Result fResultFunExpr;
    Result fCaseClause;
    Result fPattern;
    Result fPattern1;
    Result fNoTypedPattern;
  }

  /** Chunk 5 of memoized results. */
  static final class Chunk5 {
    Result fPattern3;
    Result fPattern3$$Star1;
    Result fSimplePattern;
    Result fModifier;
    Result fLocalModifier;
    Result fAnnotation;
    Result fNameValuePair;
    Result fTemplateBody;
    Result fTemplateBody$$Star1;
    Result fTemplateStat;
  }

  /** Chunk 6 of memoized results. */
  static final class Chunk6 {
    Result f$$Shared3;
    Result fDcl;
    Result fPatVarDef;
    Result fDef;
    Result fTypeDef;
    Result fTmplDef;
    Result fClassTemplateOpt;
    Result fExtends;
    Result fTopStat;
    Result fThisKey;
  }

  /** Chunk 7 of memoized results. */
  static final class Chunk7 {
    Result fWildKey;
    Result fkey;
    Result fkeyword;
    Result fsep;
    Result fseparator;
  }

  // =========================================================================

  /** Memoization table column. */
  static final class ParserScalaColumn extends Column {
    Chunk1 chunk1;
    Chunk2 chunk2;
    Chunk3 chunk3;
    Chunk4 chunk4;
    Chunk5 chunk5;
    Chunk6 chunk6;
    Chunk7 chunk7;
  }

  // =========================================================================

  /** The global state object. */
  protected final ParserState yyState;

  // =========================================================================

  /**
   * Create a new packrat parser.
   *
   * @param reader The reader.
   * @param file The file name.
   */
  public ParserScala(final Reader reader, final String file) {
    super(reader, file);
    yyState = new ParserState();
  }

  /**
   * Create a new packrat parser.
   *
   * @param reader The file reader.
   * @param file The file name.
   * @param size The file size.
   */
  public ParserScala(final Reader reader, final String file, final int size) {
    super(reader, file, size);
    yyState = new ParserState();
  }

  // =========================================================================

  protected Column newColumn() {
    return new ParserScalaColumn();
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlElement.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlElement(final int yyStart)
    throws IOException {

    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$XmlEmptyElemTag(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlElement", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pParserScala$XmlSTag(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pParserScala$XmlContent(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
          continue;
        }
        break;
      }
      { // Start scope for v$g$3.
        Pair<Node> v$g$3 = yyRepValue1.reverse();

        yyResult = pParserScala$XmlETag(yyRepetition1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$4 = yyResult.semanticValue();

          yyValue = GNode.create("XmlElement", v$g$2, v$g$3, v$g$4);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } // End scope for v$g$3.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.XmlLt.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlLt(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('<' == yyC) {
      yyIndex = yyStart + 1;
      String v$g$1 = "<";

      yyValue = GNode.create("XmlLt", v$g$1);
      yyValue.setLocation(location(yyStart));

      return new SemanticValue(yyValue, yyIndex, yyError);
    }

    // Done.
    yyError = yyError.select("xml lt expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.XmlGt.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlGt(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('>' == yyC) {
      yyIndex = yyStart + 1;
      String v$g$1 = ">";

      yyValue = GNode.create("XmlGt", v$g$1);
      yyValue.setLocation(location(yyStart));

      return new SemanticValue(yyValue, yyIndex, yyError);
    }

    // Done.
    yyError = yyError.select("xml gt expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlLtSlash.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlLtSlash(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('<' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('/' == yyC) {
        yyIndex = yyIndex + 1;
        String v$g$1 = "</";

        yyValue = GNode.create("XmlLtSlash", v$g$1);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("xml lt slash expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlSlashGt.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlSlashGt(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('/' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('>' == yyC) {
        yyIndex = yyIndex + 1;
        String v$g$1 = "/>";

        yyValue = GNode.create("XmlSlashGt", v$g$1);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("xml slash gt expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.XmlEq.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlEq(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('=' == yyC) {
      yyIndex = yyStart + 1;
      String v$g$1 = "=";

      yyValue = GNode.create("XmlEq", v$g$1);
      yyValue.setLocation(location(yyStart));

      return new SemanticValue(yyValue, yyIndex, yyError);
    }

    // Done.
    yyError = yyError.select("xml eq expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlEmptyElemTag.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlEmptyElemTag(final int yyStart)
    throws IOException {

    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$XmlLt(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pParserScala$XmlEmptyTagName(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyResult = pParserScala$XmlAttribute(yyRepetition1);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
          break;
        }
        { // Start scope for v$g$3.
          Pair<Node> v$g$3 = yyRepValue1.reverse();

          yyOption1  = yyRepetition1;
          yyOpValue1 = null;

          yyResult = pParserScala$xmlWs(yyOption1);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            String v$el$2 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$2;
          }
          { // Start scope for v$g$4.
            String v$g$4 = yyOpValue1;

            yyResult = pParserScala$XmlSlashGt(yyOption1);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {
              Node v$g$5 = yyResult.semanticValue();

              yyValue = GNode.create("XmlEmptyElemTag", v$g$1, v$g$2, v$g$3, v$g$4, v$g$5);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            }
          } // End scope for v$g$4.
        } // End scope for v$g$3.
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlSTag.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlSTag(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$XmlLt(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pParserScala$XmlSTagName(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyResult = pParserScala$XmlAttribute(yyRepetition1);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
          break;
        }
        { // Start scope for v$g$3.
          Pair<Node> v$g$3 = yyRepValue1.reverse();

          yyOption1  = yyRepetition1;
          yyOpValue1 = null;

          yyResult = pParserScala$xmlWs(yyOption1);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            String v$el$2 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$2;
          }
          { // Start scope for v$g$4.
            String v$g$4 = yyOpValue1;

            yyResult = pParserScala$XmlGt(yyOption1);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {
              Node v$g$5 = yyResult.semanticValue();

              yyValue = GNode.create("XmlSTag", v$g$1, v$g$2, v$g$3, v$g$4, v$g$5);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            }
          } // End scope for v$g$4.
        } // End scope for v$g$3.
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlETag.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlETag(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$XmlLtSlash(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pParserScala$XmlETagName(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pParserScala$xmlWs(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          String v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
        { // Start scope for v$g$3.
          String v$g$3 = yyOpValue1;

          yyResult = pParserScala$XmlGt(yyOption1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$4 = yyResult.semanticValue();

            yyValue = GNode.create("XmlETag", v$g$1, v$g$2, v$g$3, v$g$4);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        } // End scope for v$g$3.
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlAttribute.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlAttribute(final int yyStart)
    throws IOException {

    Result     yyResult;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$xmlWs(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyResult = pParserScala$XmlAttName(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pParserScala$xmlWs(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          String v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
        { // Start scope for v$g$3.
          String v$g$3 = yyOpValue1;

          yyResult = pParserScala$XmlEq(yyOption1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$4 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = null;

            yyResult = pParserScala$xmlWs(yyOption1);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {
              String v$el$2 = yyResult.semanticValue();

              yyOption1  = yyResult.index;
              yyOpValue1 = v$el$2;
            }
            { // Start scope for v$g$5.
              String v$g$5 = yyOpValue1;

              yyResult = pParserScala$XmlAttValue(yyOption1);
              yyError  = yyResult.select(yyError);
              if (yyResult.hasValue()) {
                Node v$g$6 = yyResult.semanticValue();

                yyValue = GNode.create("XmlAttribute", v$g$1, v$g$2, v$g$3, v$g$4, v$g$5, v$g$6);
                yyValue.setLocation(location(yyStart));

                return yyResult.createValue(yyValue, yyError);
              }
            } // End scope for v$g$5.
          }
        } // End scope for v$g$3.
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlContent.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlContent(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative <ScalaExpr>.

    yyResult = pScalaExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContent", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlCDSect>.

    yyResult = pParserScala$XmlCDSect(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContent", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlPI>.

    yyResult = pParserScala$XmlPI(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$3 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContent", v$g$3);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlCharData>.

    yyResult = pParserScala$XmlCharData(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$4 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContent", v$g$4);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlElement>.

    yyResult = pParserScala$XmlElement(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$5 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContent", v$g$5);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlReference>.

    yyResult = pParserScala$XmlReference(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$6 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContent", v$g$6);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlComment>.

    yyResult = pParserScala$XmlComment(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$7 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContent", v$g$7);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlEmptyTagName.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlEmptyTagName(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$xmlName(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlEmptyTagName", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlSTagName.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlSTagName(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$xmlName(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlSTagName", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlETagName.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlETagName(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$xmlName(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlETagName", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlAttName.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlAttName(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$xmlName(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlAttName", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlName.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlName(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$XmlNameStartChar(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyRepetition1 = yyResult.index;
      while (true) {

        yyResult = pParserScala$XmlNameChar(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {

          yyRepetition1 = yyResult.index;
          continue;
        }
        break;
      }

      yyValue = difference(yyStart, yyRepetition1);

      return new SemanticValue(yyValue, yyRepetition1, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlNameStartChar.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlNameStartChar(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (':' == yyC) {
      yyIndex = yyStart + 1;

      yyValue = null;

      return new SemanticValue(yyValue, yyIndex, yyError);
    }

    // Alternative 2.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('A' <= yyC) && (yyC <= 'Z')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 3.

    yyC = character(yyStart);
    if ('_' == yyC) {
      yyIndex = yyStart + 1;

      yyValue = null;

      return new SemanticValue(yyValue, yyIndex, yyError);
    }

    // Alternative 4.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('a' <= yyC) && (yyC <= 'z')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("xml name start char expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlNameChar.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlNameChar(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (':' == yyC) {
      yyIndex = yyStart + 1;

      yyValue = null;

      return new SemanticValue(yyValue, yyIndex, yyError);
    }

    // Alternative 2.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('A' <= yyC) && (yyC <= 'Z')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 3.

    yyC = character(yyStart);
    if ('_' == yyC) {
      yyIndex = yyStart + 1;

      yyValue = null;

      return new SemanticValue(yyValue, yyIndex, yyError);
    }

    // Alternative 4.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('a' <= yyC) && (yyC <= 'z')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 5.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '-':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case '.':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("xml name char expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlAttValue.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlAttValue(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative <XmlAttValue>.

    yyResult = pParserScala$xmlAttValue(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlAttValue", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <ScalaExpr>.

    yyResult = pScalaExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("XmlAttValue", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlAttValue.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlAttValue(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyRepetition1;
    int        yyRepetition2;
    boolean    yyRepeated2;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '\"':
        {
          yyRepetition1 = yyIndex;
          while (true) {

            final int yyChoice1 = yyRepetition1;

            // Nested alternative 1.

            yyC = character(yyChoice1);
            if (-1 != yyC) {
              yyIndex = yyChoice1 + 1;

              switch (yyC) {
              case '\"':
              case '&':
              case '<':
                /* No match. */
                break;

              default:
                {
                  yyRepetition1 = yyIndex;
                  continue;
                }
              }
            }

            // Nested alternative 2.

            yyC = character(yyChoice1);
            if (-1 != yyC) {
              yyIndex = yyChoice1 + 1;
              if ('&' == yyC) {

                final int yyChoice2 = yyIndex;

                // Nested alternative 1.

                yyResult = pParserScala$xmlName(yyChoice2);
                yyError  = yyResult.select(yyError, yyRepetition1);
                if (yyResult.hasValue()) {

                  yyC = character(yyResult.index);
                  if (';' == yyC) {
                    yyIndex = yyResult.index + 1;

                    yyRepetition1 = yyIndex;
                    continue;
                  }
                }

                // Nested alternative 2.

                yyC = character(yyChoice2);
                if (-1 != yyC) {
                  yyIndex = yyChoice2 + 1;
                  if ('#' == yyC) {

                    final int yyChoice3 = yyIndex;

                    // Nested alternative 1.

                    yyRepetition2 = yyChoice3;
                    yyRepeated2   = false;
                    while (true) {

                      yyC = character(yyRepetition2);
                      if (-1 != yyC) {
                        yyIndex = yyRepetition2 + 1;

                        switch (yyC) {
                        case '0':
                        case '1':
                        case '2':
                        case '3':
                        case '4':
                        case '5':
                        case '6':
                        case '7':
                        case '8':
                        case '9':
                          {
                            yyRepetition2 = yyIndex;
                            yyRepeated2   = true;
                            continue;
                          }

                        default:
                          /* No match. */
                        }
                      }
                      break;
                    }

                    if (yyRepeated2) {

                      yyC = character(yyRepetition2);
                      if (';' == yyC) {
                        yyIndex = yyRepetition2 + 1;

                        yyRepetition1 = yyIndex;
                        continue;
                      }
                    }

                    // Nested alternative 2.

                    yyC = character(yyChoice3);
                    if (-1 != yyC) {
                      yyIndex = yyChoice3 + 1;
                      if ('x' == yyC) {

                        yyRepetition2 = yyIndex;
                        yyRepeated2   = false;
                        while (true) {

                          yyC = character(yyRepetition2);
                          if (-1 != yyC) {
                            yyIndex = yyRepetition2 + 1;

                            switch (yyC) {
                            case '0':
                            case '1':
                            case '2':
                            case '3':
                            case '4':
                            case '5':
                            case '6':
                            case '7':
                            case '8':
                            case '9':
                            case 'A':
                            case 'B':
                            case 'C':
                            case 'D':
                            case 'E':
                            case 'F':
                            case 'a':
                            case 'b':
                            case 'c':
                            case 'd':
                            case 'e':
                            case 'f':
                              {
                                yyRepetition2 = yyIndex;
                                yyRepeated2   = true;
                                continue;
                              }

                            default:
                              /* No match. */
                            }
                          }
                          break;
                        }

                        if (yyRepeated2) {

                          yyC = character(yyRepetition2);
                          if (';' == yyC) {
                            yyIndex = yyRepetition2 + 1;

                            yyRepetition1 = yyIndex;
                            continue;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            break;
          }

          yyC = character(yyRepetition1);
          if ('\"' == yyC) {
            yyIndex = yyRepetition1 + 1;

            yyValue = difference(yyStart, yyIndex);

            return new SemanticValue(yyValue, yyIndex, yyError);
          }
        }
        break;

      case '\'':
        {
          yyRepetition1 = yyIndex;
          while (true) {

            final int yyChoice1 = yyRepetition1;

            // Nested alternative 1.

            yyC = character(yyChoice1);
            if (-1 != yyC) {
              yyIndex = yyChoice1 + 1;

              switch (yyC) {
              case '&':
              case '\'':
              case '<':
                /* No match. */
                break;

              default:
                {
                  yyRepetition1 = yyIndex;
                  continue;
                }
              }
            }

            // Nested alternative 2.

            yyC = character(yyChoice1);
            if (-1 != yyC) {
              yyIndex = yyChoice1 + 1;
              if ('&' == yyC) {

                final int yyChoice2 = yyIndex;

                // Nested alternative 1.

                yyResult = pParserScala$xmlName(yyChoice2);
                yyError  = yyResult.select(yyError, yyRepetition1);
                if (yyResult.hasValue()) {

                  yyC = character(yyResult.index);
                  if (';' == yyC) {
                    yyIndex = yyResult.index + 1;

                    yyRepetition1 = yyIndex;
                    continue;
                  }
                }

                // Nested alternative 2.

                yyC = character(yyChoice2);
                if (-1 != yyC) {
                  yyIndex = yyChoice2 + 1;
                  if ('#' == yyC) {

                    final int yyChoice3 = yyIndex;

                    // Nested alternative 1.

                    yyRepetition2 = yyChoice3;
                    yyRepeated2   = false;
                    while (true) {

                      yyC = character(yyRepetition2);
                      if (-1 != yyC) {
                        yyIndex = yyRepetition2 + 1;

                        switch (yyC) {
                        case '0':
                        case '1':
                        case '2':
                        case '3':
                        case '4':
                        case '5':
                        case '6':
                        case '7':
                        case '8':
                        case '9':
                          {
                            yyRepetition2 = yyIndex;
                            yyRepeated2   = true;
                            continue;
                          }

                        default:
                          /* No match. */
                        }
                      }
                      break;
                    }

                    if (yyRepeated2) {

                      yyC = character(yyRepetition2);
                      if (';' == yyC) {
                        yyIndex = yyRepetition2 + 1;

                        yyRepetition1 = yyIndex;
                        continue;
                      }
                    }

                    // Nested alternative 2.

                    yyC = character(yyChoice3);
                    if (-1 != yyC) {
                      yyIndex = yyChoice3 + 1;
                      if ('x' == yyC) {

                        yyRepetition2 = yyIndex;
                        yyRepeated2   = false;
                        while (true) {

                          yyC = character(yyRepetition2);
                          if (-1 != yyC) {
                            yyIndex = yyRepetition2 + 1;

                            switch (yyC) {
                            case '0':
                            case '1':
                            case '2':
                            case '3':
                            case '4':
                            case '5':
                            case '6':
                            case '7':
                            case '8':
                            case '9':
                            case 'A':
                            case 'B':
                            case 'C':
                            case 'D':
                            case 'E':
                            case 'F':
                            case 'a':
                            case 'b':
                            case 'c':
                            case 'd':
                            case 'e':
                            case 'f':
                              {
                                yyRepetition2 = yyIndex;
                                yyRepeated2   = true;
                                continue;
                              }

                            default:
                              /* No match. */
                            }
                          }
                          break;
                        }

                        if (yyRepeated2) {

                          yyC = character(yyRepetition2);
                          if (';' == yyC) {
                            yyIndex = yyRepetition2 + 1;

                            yyRepetition1 = yyIndex;
                            continue;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            break;
          }

          yyC = character(yyRepetition1);
          if ('\'' == yyC) {
            yyIndex = yyRepetition1 + 1;

            yyValue = difference(yyStart, yyIndex);

            return new SemanticValue(yyValue, yyIndex, yyError);
          }
        }
        break;

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("xml att value expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlCharData.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlCharData(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pxmlCharDataInScala(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlCharData", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlComment.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlComment(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$xmlComment(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlComment", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlComment.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlComment(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Result     yyResult;
    boolean    yyPredMatched;
    int        yyBase;
    int        yyRepetition1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('<' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('!' == yyC) {
        yyIndex = yyIndex + 1;

        yyC = character(yyIndex);
        if ('-' == yyC) {
          yyIndex = yyIndex + 1;

          yyC = character(yyIndex);
          if ('-' == yyC) {
            yyIndex = yyIndex + 1;

            yyRepetition1 = yyIndex;
            while (true) {

              final int yyChoice1 = yyRepetition1;

              // Nested alternative 1.

              yyC = character(yyChoice1);
              if ('-' == yyC) {
                yyIndex = yyChoice1 + 1;

                yyPredMatched = false;

                yyC = character(yyIndex);
                if ('-' == yyC) {

                  yyPredMatched = true;
                }

                if (! yyPredMatched) {

                  yyRepetition1 = yyIndex;
                  continue;
                } else {
                  yyError = yyError.select("xml comment expected", yyStart);
                }
              }

              // Nested alternative 2.

              yyPredMatched = false;

              yyC = character(yyChoice1);
              if ('-' == yyC) {

                yyPredMatched = true;
              }

              if (! yyPredMatched) {

                yyResult = pParserScala$xmlChar(yyChoice1);
                yyError  = yyResult.select(yyError, yyRepetition1);
                if (yyResult.hasValue()) {

                  yyRepetition1 = yyResult.index;
                  continue;
                }
              } else {
                yyError = yyError.select("xml comment expected", yyStart);
              }
              break;
            }

            yyBase = yyRepetition1;
            yyC    = character(yyBase);
            if ('-' == yyC) {
              yyIndex = yyRepetition1 + 1;

              yyC = character(yyIndex);
              if ('-' == yyC) {
                yyIndex = yyIndex + 1;

                yyC = character(yyIndex);
                if ('>' == yyC) {
                  yyIndex = yyIndex + 1;

                  yyValue = difference(yyStart, yyIndex);

                  return new SemanticValue(yyValue, yyIndex, yyError);
                } else {
                  yyError = yyError.select("'-->' expected", yyBase);
                }
              } else {
                yyError = yyError.select("'-->' expected", yyBase);
              }
            } else {
              yyError = yyError.select("'-->' expected", yyBase);
            }
          }
        }
      }
    }

    // Done.
    yyError = yyError.select("xml comment expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlReference.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlReference(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyRepetition1;
    boolean    yyRepeated1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if ('&' == yyC) {

        final int yyChoice1 = yyIndex;

        // Nested alternative 1.

        yyResult = pParserScala$xmlName(yyChoice1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyC = character(yyResult.index);
          if (';' == yyC) {
            yyIndex = yyResult.index + 1;

            yyValue = difference(yyStart, yyIndex);

            return new SemanticValue(yyValue, yyIndex, yyError);
          }
        }

        // Nested alternative 2.

        yyC = character(yyChoice1);
        if (-1 != yyC) {
          yyIndex = yyChoice1 + 1;
          if ('#' == yyC) {

            final int yyChoice2 = yyIndex;

            // Nested alternative 1.

            yyRepetition1 = yyChoice2;
            yyRepeated1   = false;
            while (true) {

              yyC = character(yyRepetition1);
              if (-1 != yyC) {
                yyIndex = yyRepetition1 + 1;

                switch (yyC) {
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                  {
                    yyRepetition1 = yyIndex;
                    yyRepeated1   = true;
                    continue;
                  }

                default:
                  /* No match. */
                }
              }
              break;
            }

            if (yyRepeated1) {

              yyC = character(yyRepetition1);
              if (';' == yyC) {
                yyIndex = yyRepetition1 + 1;

                yyValue = difference(yyStart, yyIndex);

                return new SemanticValue(yyValue, yyIndex, yyError);
              }
            }

            // Nested alternative 2.

            yyC = character(yyChoice2);
            if (-1 != yyC) {
              yyIndex = yyChoice2 + 1;
              if ('x' == yyC) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = false;
                while (true) {

                  yyC = character(yyRepetition1);
                  if (-1 != yyC) {
                    yyIndex = yyRepetition1 + 1;

                    switch (yyC) {
                    case '0':
                    case '1':
                    case '2':
                    case '3':
                    case '4':
                    case '5':
                    case '6':
                    case '7':
                    case '8':
                    case '9':
                    case 'A':
                    case 'B':
                    case 'C':
                    case 'D':
                    case 'E':
                    case 'F':
                    case 'a':
                    case 'b':
                    case 'c':
                    case 'd':
                    case 'e':
                    case 'f':
                      {
                        yyRepetition1 = yyIndex;
                        yyRepeated1   = true;
                        continue;
                      }

                    default:
                      /* No match. */
                    }
                  }
                  break;
                }

                if (yyRepeated1) {

                  yyC = character(yyRepetition1);
                  if (';' == yyC) {
                    yyIndex = yyRepetition1 + 1;

                    yyValue = difference(yyStart, yyIndex);

                    return new SemanticValue(yyValue, yyIndex, yyError);
                  }
                }
              }
            }
          }
        }
      }
    }

    // Done.
    yyError = yyError.select("xml reference expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlCDSect.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlCDSect(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$XmlCDStart(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pParserScala$XmlCData(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyResult = pParserScala$XmlCDEnd(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("XmlCDSect", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlCDStart.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlCDStart(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('<' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('!' == yyC) {
        yyIndex = yyIndex + 1;

        yyC = character(yyIndex);
        if ('[' == yyC) {
          yyIndex = yyIndex + 1;

          yyC = character(yyIndex);
          if ('C' == yyC) {
            yyIndex = yyIndex + 1;

            yyC = character(yyIndex);
            if ('D' == yyC) {
              yyIndex = yyIndex + 1;

              yyC = character(yyIndex);
              if ('A' == yyC) {
                yyIndex = yyIndex + 1;

                yyC = character(yyIndex);
                if ('T' == yyC) {
                  yyIndex = yyIndex + 1;

                  yyC = character(yyIndex);
                  if ('A' == yyC) {
                    yyIndex = yyIndex + 1;

                    yyC = character(yyIndex);
                    if ('[' == yyC) {
                      yyIndex = yyIndex + 1;
                      String v$g$1 = "<![CDATA[";

                      yyValue = GNode.create("XmlCDStart", v$g$1);
                      yyValue.setLocation(location(yyStart));

                      return new SemanticValue(yyValue, yyIndex, yyError);
                    }
                  }
                }
              }
            }
          }
        }
      }
    }

    // Done.
    yyError = yyError.select("xml c d start expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlCDEnd.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlCDEnd(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (']' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if (']' == yyC) {
        yyIndex = yyIndex + 1;

        yyC = character(yyIndex);
        if ('>' == yyC) {
          yyIndex = yyIndex + 1;
          String v$g$1 = "]]>";

          yyValue = GNode.create("XmlCDEnd", v$g$1);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyIndex, yyError);
        }
      }
    }

    // Done.
    yyError = yyError.select("xml c d end expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlCData.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlCData(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$xmlCDData(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlCData", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlCDData.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlCDData(final int yyStart)
    throws IOException {

    Result     yyResult;
    int        yyRepetition1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    while (true) {

      yyResult = pParserScala$xmlCDataChar(yyRepetition1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        continue;
      }
      break;
    }

    yyValue = difference(yyStart, yyRepetition1);

    return new SemanticValue(yyValue, yyRepetition1, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlCDataChar.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlCDataChar(final int yyStart)
    throws IOException {

    int        yyC;
    Result     yyResult;
    int        yyPredIndex;
    boolean    yyPredMatched;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyPredMatched = false;

    yyC = character(yyStart);
    if (']' == yyC) {
      yyPredIndex = yyStart + 1;

      yyC = character(yyPredIndex);
      if (']' == yyC) {
        yyPredIndex = yyPredIndex + 1;

        yyC = character(yyPredIndex);
        if ('>' == yyC) {

          yyPredMatched = true;
        }
      }
    }

    if (! yyPredMatched) {

      yyResult = pParserScala$xmlChar(yyStart);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyValue = null;

        return yyResult.createValue(yyValue, yyError);
      }
    } else {
      yyError = yyError.select("xml c data char expected", yyStart);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.XmlPI.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$XmlPI(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('<' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('?' == yyC) {
        yyIndex = yyIndex + 1;

        yyResult = pParserScala$xmlPITarget(yyIndex);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyRepetition1 = yyResult.index;
          while (true) {

            yyResult = pParserScala$xmlPIChar(yyRepetition1);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {

              yyRepetition1 = yyResult.index;
              continue;
            }
            break;
          }

          yyBase = yyRepetition1;
          yyC    = character(yyBase);
          if ('?' == yyC) {
            yyIndex = yyRepetition1 + 1;

            yyC = character(yyIndex);
            if ('>' == yyC) {
              yyIndex = yyIndex + 1;

              yyValue = difference(yyStart, yyIndex);

              return new SemanticValue(yyValue, yyIndex, yyError);
            } else {
              yyError = yyError.select("'?>' expected", yyBase);
            }
          } else {
            yyError = yyError.select("'?>' expected", yyBase);
          }
        }
      }
    }

    // Done.
    yyError = yyError.select("xml p i expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlPIChar.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlPIChar(final int yyStart)
    throws IOException {

    int        yyC;
    Result     yyResult;
    int        yyPredIndex;
    boolean    yyPredMatched;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyPredMatched = false;

    yyC = character(yyStart);
    if ('?' == yyC) {
      yyPredIndex = yyStart + 1;

      yyC = character(yyPredIndex);
      if ('>' == yyC) {

        yyPredMatched = true;
      }
    }

    if (! yyPredMatched) {

      yyResult = pParserScala$xmlChar(yyStart);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyValue = null;

        return yyResult.createValue(yyValue, yyError);
      }
    } else {
      yyError = yyError.select("xml p i char expected", yyStart);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlPITarget.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlPITarget(final int yyStart)
    throws IOException {

    Result     yyResult;
    Result     yyPredResult;
    boolean    yyPredMatched;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyPredMatched = false;

    yyPredResult = pParserScala$xmlPITarget$$Choice1(yyStart);
    if (yyPredResult.hasValue()) {

      yyPredMatched = true;
    }

    if (! yyPredMatched) {

      yyResult = pParserScala$xmlName(yyStart);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyValue = null;

        return yyResult.createValue(yyValue, yyError);
      }
    } else {
      yyError = yyError.select("xml p i target expected", yyStart);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal ParserScala.xmlPITarget$$Choice2.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlPITarget$$Choice2(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case 'X':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case 'x':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("xml p i target expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal ParserScala.xmlPITarget$$Choice3.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlPITarget$$Choice3(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case 'M':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case 'm':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("xml p i target expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal ParserScala.xmlPITarget$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlPITarget$$Choice1(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Result     yyResult;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$xmlPITarget$$Choice2(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = pParserScala$xmlPITarget$$Choice3(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        final int yyChoice1 = yyResult.index;

        // Nested alternative 1.

        yyC = character(yyChoice1);
        if (-1 != yyC) {
          yyIndex = yyChoice1 + 1;

          switch (yyC) {
          case 'L':
            {
              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }

          case 'l':
            {
              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }

          default:
            /* No match. */
          }
        }
      }
    }

    // Done.
    yyError = yyError.select("xml p i target expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlChar.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlChar(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('\u0001' <= yyC) && (yyC <= '\ud7ff')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 2.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('\ue000' <= yyC) && (yyC <= '\ufffd')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("xml char expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.xmlWs.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParserScala$xmlWs(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    int        yyRepetition1;
    boolean    yyRepeated1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepeated1   = false;
    while (true) {

      final int yyChoice1 = yyRepetition1;

      // Nested alternative 1.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case ' ':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        case '\f':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        case '\t':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        case '\r':
          {
            final int yyChoice2 = yyIndex;

            // Nested alternative 1.

            yyC = character(yyChoice2);
            if (-1 != yyC) {
              yyIndex = yyChoice2 + 1;
              if ('\n' == yyC) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }

            // Nested alternative 2.

            yyRepetition1 = yyChoice2;
            yyRepeated1   = true;
            continue;
          }

        case '\n':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        default:
          /* No match. */
        }
      }
      break;
    }

    if (yyRepeated1) {

      yyValue = difference(yyStart, yyRepetition1);

      return new SemanticValue(yyValue, yyRepetition1, yyError);
    }

    // Done.
    yyError = yyError.select("xml ws expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlCharDataInScala.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pxmlCharDataInScala(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    boolean    yyRepeated1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepeated1   = false;
    while (true) {

      yyResult = pxmlCharDataCharInScala(yyRepetition1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        yyRepeated1   = true;
        continue;
      }
      break;
    }

    if (yyRepeated1) {

      yyValue = difference(yyStart, yyRepetition1);

      return new SemanticValue(yyValue, yyRepetition1, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlCharDataCharInScala.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pxmlCharDataCharInScala(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Result     yyPredResult;
    boolean    yyPredMatched;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '{':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if ('{' == yyC) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      case '}':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if ('}' == yyC) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      default:
        /* No match. */
      }
    }

    // Alternative 2.

    yyPredMatched = false;

    yyPredResult = pxmlCharDataCharInScala$$Choice1(yyStart);
    if (yyPredResult.hasValue()) {

      yyPredMatched = true;
    }

    if (! yyPredMatched) {

      yyC = character(yyStart);
      if (-1 != yyC) {
        yyIndex = yyStart + 1;

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    } else {
      yyError = yyError.select("xml char data char in scala expected", yyStart);
    }

    // Done.
    yyError = yyError.select("xml char data char in scala expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.xmlCharDataCharInScala$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pxmlCharDataCharInScala$$Choice1(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '&':
      case '<':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case ']':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if (']' == yyC) {

              yyC = character(yyIndex);
              if (-1 != yyC) {
                yyIndex = yyIndex + 1;
                if ('>' == yyC) {

                  yyValue = null;

                  return new SemanticValue(yyValue, yyIndex, yyError);
                }
              }
            }
          }
        }
        break;

      case '{':
      case '}':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("xml char data char in scala expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pXmlExpr(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pw(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = pParserScala$XmlElement(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("XmlExpr", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("(")) {

      yyResult = pParserScala$XmlElement(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(")")) {

          yyValue = GNode.create("XmlExpr", v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      }
    }

    // Alternative 3.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("{")) {

      yyResult = pParserScala$XmlElement(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$3 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("}")) {

          yyValue = GNode.create("XmlExpr", v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("'}' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("xml expr expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlPattern.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pXmlPattern(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pw(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = pXmlElementP(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("XmlPattern", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("(")) {

      yyResult = pXmlElementP(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(")")) {

          yyValue = GNode.create("XmlPattern", v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      }
    }

    // Alternative 3.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("{")) {

      yyResult = pXmlElementP(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$3 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("}")) {

          yyValue = GNode.create("XmlPattern", v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("'}' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("xml pattern expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlContentP.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pXmlContentP(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative <ScalaPatterns>.

    yyResult = pScalaPatterns(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContentP", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlCDSect>.

    yyResult = pParserScala$XmlCDSect(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContentP", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlPI>.

    yyResult = pParserScala$XmlPI(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$3 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContentP", v$g$3);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlCharData>.

    yyResult = pParserScala$XmlCharData(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$4 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContentP", v$g$4);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlElement>.

    yyResult = pXmlElementP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$5 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContentP", v$g$5);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlReference>.

    yyResult = pParserScala$XmlReference(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$6 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContentP", v$g$6);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative <XmlComment>.

    yyResult = pParserScala$XmlComment(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$7 = yyResult.semanticValue();

      yyValue = GNode.create("XmlContentP", v$g$7);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlElementP.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pXmlElementP(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fXmlElementP)
      yyColumn.chunk1.fXmlElementP = pXmlElementP$1(yyStart);
    return yyColumn.chunk1.fXmlElementP;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.XmlElementP. */
  private Result pXmlElementP$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pXmlEmptyElemTagP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("XmlElementP", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pXmlSTagP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyResult = pXmlElementP$$Star1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$g$3 = yyResult.semanticValue();

        yyResult = pParserScala$XmlETag(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$4 = yyResult.semanticValue();

          yyValue = GNode.create("XmlElementP", v$g$2, v$g$3, v$g$4);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlElementP$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pXmlElementP$$Star1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fXmlElementP$$Star1)
      yyColumn.chunk1.fXmlElementP$$Star1 = pXmlElementP$$Star1$1(yyStart);
    return yyColumn.chunk1.fXmlElementP$$Star1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.XmlElementP$$Star1. */
  private Result pXmlElementP$$Star1$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pXmlContentP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$1 = yyResult.semanticValue();

      yyResult = pXmlElementP$$Star1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$2 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$1, v$2);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlEmptyElemTagP.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pXmlEmptyElemTagP(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$XmlLt(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pParserScala$XmlEmptyTagName(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pParserScala$xmlWs(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          String v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
        { // Start scope for v$g$3.
          String v$g$3 = yyOpValue1;

          yyResult = pParserScala$XmlSlashGt(yyOption1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$4 = yyResult.semanticValue();

            yyValue = GNode.create("XmlEmptyElemTagP", v$g$1, v$g$2, v$g$3, v$g$4);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        } // End scope for v$g$3.
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.XmlSTagP.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pXmlSTagP(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParserScala$XmlLt(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pParserScala$XmlSTagName(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pParserScala$xmlWs(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          String v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
        { // Start scope for v$g$3.
          String v$g$3 = yyOpValue1;

          yyResult = pParserScala$XmlGt(yyOption1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$4 = yyResult.semanticValue();

            yyValue = GNode.create("XmlSTagP", v$g$1, v$g$2, v$g$3, v$g$4);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        } // End scope for v$g$3.
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ScalaExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pScalaExpr(final int yyStart) throws IOException {
    Result     yyResult;
    Result     yyPredResult;
    boolean    yyPredMatched;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("{")) {

      yyPredMatched = false;

      yyPredResult = psep(yyResult.index);
      if (yyPredResult.hasValue("{")) {

        yyPredMatched = true;
      }

      if (! yyPredMatched) {

        yyResult = pBlock(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$1 = yyResult.semanticValue();

          yyBase   = yyResult.index;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("}")) {

            yyPredMatched = false;

            yyPredResult = psep(yyResult.index);
            if (yyPredResult.hasValue("}")) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyValue = GNode.create("ScalaExpr", v$g$1);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            } else {
              yyError = yyError.select("scala expr expected", yyStart);
            }
          } else {
            yyError = yyError.select("'}' expected", yyBase);
          }
        }
      } else {
        yyError = yyError.select("scala expr expected", yyStart);
      }
    }

    // Done.
    yyError = yyError.select("scala expr expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ScalaPatterns.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pScalaPatterns(final int yyStart) throws IOException {
    Result     yyResult;
    Result     yyPredResult;
    boolean    yyPredMatched;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("{")) {

      yyPredMatched = false;

      yyPredResult = psep(yyResult.index);
      if (yyPredResult.hasValue("{")) {

        yyPredMatched = true;
      }

      if (! yyPredMatched) {

        yyResult = pPatterns(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$1 = yyResult.semanticValue();

          yyBase   = yyResult.index;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("}")) {

            yyPredMatched = false;

            yyPredResult = psep(yyResult.index);
            if (yyPredResult.hasValue("}")) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyValue = GNode.create("ScalaPatterns", v$g$1);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            } else {
              yyError = yyError.select("scala patterns expected", yyStart);
            }
          } else {
            yyError = yyError.select("'}' expected", yyBase);
          }
        }
      } else {
        yyError = yyError.select("scala patterns expected", yyStart);
      }
    }

    // Done.
    yyError = yyError.select("scala patterns expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Literal.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pLiteral(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fLiteral)
      yyColumn.chunk1.fLiteral = pLiteral$1(yyStart);
    return yyColumn.chunk1.fLiteral;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Literal. */
  private Result pLiteral$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSKIP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyOption1  = yyChoice1;
      yyOpValue1 = null;

      yyBase   = yyOption1;
      yyResult = pop(yyBase);
      if (yyResult.hasValue("-")) {
        String v$el$1 = "-";

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      } else {
        yyError = yyError.select("'-' expected", yyBase);
      }
      { // Start scope for v$g$1.
        String v$g$1 = yyOpValue1;

        final int yyChoice2 = yyOption1;

        // Nested alternative 1.

        yyResult = pFloatingPointLiteral(yyChoice2);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyValue = GNode.create("Literal", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }

        // Nested alternative 2.

        yyResult = pIntegerLiteral(yyChoice2);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("Literal", v$g$1, v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } // End scope for v$g$1.

      // Nested alternative 2.

      yyResult = pBooleanLiteral(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$4 = yyResult.semanticValue();

        yyValue = GNode.create("Literal", v$g$4);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 3.

      yyResult = pNullLiteral(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$5 = yyResult.semanticValue();

        yyValue = GNode.create("Literal", v$g$5);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 4.

      yyResult = pCharacterLiteral(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$6 = yyResult.semanticValue();

        yyValue = GNode.create("Literal", v$g$6);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 5.

      yyResult = pStringLiteral(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$7 = yyResult.semanticValue();

        yyValue = GNode.create("Literal", v$g$7);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 6.

      yyResult = pSymbolLiteral(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$8 = yyResult.semanticValue();

        yyValue = GNode.create("Literal", v$g$8);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.BooleanLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBooleanLiteral(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("true")) {
      String v$g$1 = "true";

      yyValue = GNode.create("BooleanLiteral", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("false")) {
      String v$g$2 = "false";

      yyValue = GNode.create("BooleanLiteral", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("boolean literal expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.NullLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pNullLiteral(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('n' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('u' == yyC) {
        yyIndex = yyIndex + 1;

        yyC = character(yyIndex);
        if ('l' == yyC) {
          yyIndex = yyIndex + 1;

          yyC = character(yyIndex);
          if ('l' == yyC) {
            yyIndex = yyIndex + 1;
            String v$g$1 = "null";

            yyValue = GNode.create("NullLiteral", v$g$1);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyIndex, yyError);
          }
        }
      }
    }

    // Done.
    yyError = yyError.select("null literal expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.SEMI.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSEMI(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    boolean    yyRepeated1;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue(";")) {

      yyRepetition1 = yyResult.index;
      while (true) {

        yyResult = pN(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {

          yyRepetition1 = yyResult.index;
          continue;
        }
        break;
      }

      yyValue = null;

      return new SemanticValue(yyValue, yyRepetition1, yyError);
    }

    // Alternative 2.

    yyRepetition1 = yyStart;
    yyRepeated1   = false;
    while (true) {

      yyResult = pN(yyRepetition1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        yyRepeated1   = true;
        continue;
      }
      break;
    }

    if (yyRepeated1) {

      yyValue = null;

      return new SemanticValue(yyValue, yyRepetition1, yyError);
    }

    // Done.
    yyError = yyError.select("SEMI expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.QualId.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pQualId(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(".")) {

          yyResult = pId(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("'.' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("QualId", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Ids.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pIds(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(",")) {

          yyResult = pId(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("',' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("Ids", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Path.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPath(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fPath)
      yyColumn.chunk1.fPath = pPath$1(yyStart);
    return yyColumn.chunk1.fPath;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Path. */
  private Result pPath$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pStableId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("Path", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyResult = pId(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {
      Node v$el$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = psep(yyBase);
      if (yyResult.hasValue(".")) {

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      } else {
        yyError = yyError.select("'.' expected", yyBase);
      }
    }
    { // Start scope for v$g$2.
      Node v$g$2 = yyOpValue1;

      yyResult = pThisKey(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$3 = yyResult.semanticValue();

        yyValue = GNode.create("Path", v$g$2, v$g$3);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    } // End scope for v$g$2.

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.StableId.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pStableId(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fStableId)
      yyColumn.chunk1.fStableId = pStableId$1(yyStart);
    return yyColumn.chunk1.fStableId;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.StableId. */
  private Result pStableId$1(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyResult = pId(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {
      Node v$el$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = psep(yyBase);
      if (yyResult.hasValue(".")) {

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      } else {
        yyError = yyError.select("'.' expected", yyBase);
      }
    }
    { // Start scope for v$g$1.
      Node v$g$1 = yyOpValue1;

      final int yyChoice1 = yyOption1;

      // Nested alternative 1.

      yyResult = pThisKey(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyResult = pStableId$$Star1(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$g$3 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyBase = yyOption1;
          yyC    = character(yyBase);
          if ('.' == yyC) {
            yyIndex = yyOption1 + 1;

            yyResult = pSKIP(yyIndex);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {

              yyResult = pErrorIdExpected(yyResult.index);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$4 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$4;
              }
            }
          } else {
            yyError = yyError.select("'.' expected", yyBase);
          }
          { // Start scope for v$g$4.
            Node v$g$4 = yyOpValue1;

            yyValue = GNode.create("StableId", v$g$1, v$g$2, v$g$3, v$g$4);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$4.
        }
      }

      // Nested alternative 2.

      yyResult = pSuperKey(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$5 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pClassQualifier(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$5 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$5;
        }
        { // Start scope for v$g$6.
          Node v$g$6 = yyOpValue1;

          yyResult = pStableId$$Star2(yyOption1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Pair<Node> v$g$7 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = null;

            yyBase = yyOption1;
            yyC    = character(yyBase);
            if ('.' == yyC) {
              yyIndex = yyOption1 + 1;

              yyResult = pSKIP(yyIndex);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {

                yyResult = pErrorIdExpected(yyResult.index);
                yyError  = yyResult.select(yyError, yyOption1);
                if (yyResult.hasValue()) {
                  Node v$el$8 = yyResult.semanticValue();

                  yyOption1  = yyResult.index;
                  yyOpValue1 = v$el$8;
                }
              }
            } else {
              yyError = yyError.select("'.' expected", yyBase);
            }
            { // Start scope for v$g$8.
              Node v$g$8 = yyOpValue1;

              yyValue = GNode.create("StableId", v$g$1, v$g$5, v$g$6, v$g$7, v$g$8);
              yyValue.setLocation(location(yyStart));

              return new SemanticValue(yyValue, yyOption1, yyError);
            } // End scope for v$g$8.
          }
        } // End scope for v$g$6.
      }
    } // End scope for v$g$1.

    // Alternative 2.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$9 = yyResult.semanticValue();

      yyResult = pStableId$$Star3(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$g$10 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyBase = yyOption1;
        yyC    = character(yyBase);
        if ('.' == yyC) {
          yyIndex = yyOption1 + 1;

          yyResult = pSKIP(yyIndex);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {

            yyResult = pErrorIdExpected(yyResult.index);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {
              Node v$el$11 = yyResult.semanticValue();

              yyOption1  = yyResult.index;
              yyOpValue1 = v$el$11;
            }
          }
        } else {
          yyError = yyError.select("'.' expected", yyBase);
        }
        { // Start scope for v$g$11.
          Node v$g$11 = yyOpValue1;

          yyValue = GNode.create("StableId", v$g$9, v$g$10, v$g$11);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyOption1, yyError);
        } // End scope for v$g$11.
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.StableId$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pStableId$$Star1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fStableId$$Star1)
      yyColumn.chunk1.fStableId$$Star1 = pStableId$$Star1$1(yyStart);
    return yyColumn.chunk1.fStableId$$Star1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.StableId$$Star1. */
  private Result pStableId$$Star1$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue(".")) {

      yyResult = pId(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$el$2 = yyResult.semanticValue();

        yyResult = pStableId$$Star1(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$3 = yyResult.semanticValue();

          yyValue = new Pair<Node>(v$el$2, v$3);

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.StableId$$Star2.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pStableId$$Star2(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fStableId$$Star2)
      yyColumn.chunk1.fStableId$$Star2 = pStableId$$Star2$1(yyStart);
    return yyColumn.chunk1.fStableId$$Star2;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.StableId$$Star2. */
  private Result pStableId$$Star2$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue(".")) {

      yyResult = pId(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$el$6 = yyResult.semanticValue();

        yyResult = pStableId$$Star2(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$7 = yyResult.semanticValue();

          yyValue = new Pair<Node>(v$el$6, v$7);

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.StableId$$Star3.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pStableId$$Star3(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fStableId$$Star3)
      yyColumn.chunk1.fStableId$$Star3 = pStableId$$Star3$1(yyStart);
    return yyColumn.chunk1.fStableId$$Star3;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.StableId$$Star3. */
  private Result pStableId$$Star3$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue(".")) {

      yyResult = pId(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$el$9 = yyResult.semanticValue();

        yyResult = pStableId$$Star3(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$10 = yyResult.semanticValue();

          yyValue = new Pair<Node>(v$el$9, v$10);

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ErrorIdExpected.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pErrorIdExpected(final int yyStart) throws IOException {
    Result     yyPredResult;
    boolean    yyPredMatched;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyPredMatched = false;

    yyPredResult = pErrorIdExpected$$Choice1(yyStart);
    if (yyPredResult.hasValue()) {

      yyPredMatched = true;
    }

    if (! yyPredMatched) {

      yyValue = GNode.create("Error", "Id expected");

      setLocation(yyValue, yyStart);
      return new SemanticValue(yyValue, yyStart, yyError);
    } else {
      yyError = yyError.select("error id expected expected", yyStart);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ErrorIdExpected$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pErrorIdExpected$$Choice1(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Result     yyResult;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '_':
      case '{':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("type")) {

      yyValue = null;

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("error id expected expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassQualifier.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassQualifier(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("[")) {

      yyResult = pId(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("]")) {

          yyValue = GNode.create("ClassQualifier", v$g$1);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("']' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("class qualifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Type.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pType(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fType)
      yyColumn.chunk1.fType = pType$1(yyStart);
    return yyColumn.chunk1.fType;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Type. */
  private Result pType$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pFunType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("Type", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pNotFunType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("Type", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.FunType.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pFunType(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("(")) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyBase   = yyOption1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("=>")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
      } else {
        yyError = yyError.select("'=>' expected", yyBase);
      }
      { // Start scope for v$g$1.
        Node v$g$1 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(")")) {

          yyBase   = yyResult.index;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("=>")) {

            yyResult = pType(yyResult.index);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {
              Node v$g$2 = yyResult.semanticValue();

              yyValue = GNode.create("CallByNameFunType", v$g$1, v$g$2);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            }
          } else {
            yyError = yyError.select("'=>' expected", yyBase);
          }
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      } // End scope for v$g$1.
    }

    // Alternative 2.

    yyResult = pInfixType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$3 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("=>")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$4 = yyResult.semanticValue();

          yyValue = GNode.create("NormalFunType", v$g$3, v$g$4);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'=>' expected", yyBase);
      }
    }

    // Done.
    yyError = yyError.select("fun type expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.FunTypeInCaseClause.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pFunTypeInCaseClause(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("(")) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyBase   = yyOption1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("=>")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
      } else {
        yyError = yyError.select("'=>' expected", yyBase);
      }
      { // Start scope for v$g$1.
        Node v$g$1 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(")")) {

          yyBase   = yyResult.index;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("=>")) {

            yyRepetition1 = yyResult.index;
            yyRepValue1   = Pair.empty();
            while (true) {

              yyResult = pNotFunType(yyRepetition1);
              yyError  = yyResult.select(yyError, yyRepetition1);
              if (yyResult.hasValue()) {
                Node v$el$2 = yyResult.semanticValue();

                yyBase   = yyResult.index;
                yyResult = pkey(yyBase);
                if (yyResult.hasValue("=>")) {

                  yyRepetition1 = yyResult.index;
                  yyRepValue1   = new Pair<Node>(v$el$2, yyRepValue1);
                  continue;
                } else {
                  yyError = yyError.select("'=>' expected", yyBase);
                }
              }
              break;
            }
            { // Start scope for v$g$2.
              Pair<Node> v$g$2 = yyRepValue1.reverse();

              yyValue = GNode.create("FunTypeInCaseClause", v$g$1, v$g$2);
              yyValue.setLocation(location(yyStart));

              return new SemanticValue(yyValue, yyRepetition1, yyError);
            } // End scope for v$g$2.
          } else {
            yyError = yyError.select("'=>' expected", yyBase);
          }
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      } // End scope for v$g$1.
    }

    // Alternative 2.

    yyResult = pInfixType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$3 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("=>")) {

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyResult = pNotFunType(yyRepetition1);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$3 = yyResult.semanticValue();

            yyBase   = yyResult.index;
            yyResult = pkey(yyBase);
            if (yyResult.hasValue("=>")) {

              yyRepetition1 = yyResult.index;
              yyRepValue1   = new Pair<Node>(v$el$3, yyRepValue1);
              continue;
            } else {
              yyError = yyError.select("'=>' expected", yyBase);
            }
          }
          break;
        }
        { // Start scope for v$g$4.
          Pair<Node> v$g$4 = yyRepValue1.reverse();

          yyValue = GNode.create("FunTypeInCaseClause", v$g$3, v$g$4);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyRepetition1, yyError);
        } // End scope for v$g$4.
      } else {
        yyError = yyError.select("'=>' expected", yyBase);
      }
    }

    // Done.
    yyError = yyError.select("fun type in case clause expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.NotFunType.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pNotFunType(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pInfixType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pExistentialClause(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("NotFunType", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ExistentialClause.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pExistentialClause(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("forSome")) {
      String v$g$1 = "forSome";

      yyBase   = yyResult.index;
      yyResult = psep(yyBase);
      if (yyResult.hasValue("{")) {

        yyResult = pExistentialDcl(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = Pair.empty();
          while (true) {

            yyResult = pSEMI(yyRepetition1);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {

              yyResult = pExistentialDcl(yyResult.index);
              yyError  = yyResult.select(yyError, yyRepetition1);
              if (yyResult.hasValue()) {
                Node v$el$1 = yyResult.semanticValue();

                yyRepetition1 = yyResult.index;
                yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
                continue;
              }
            }
            break;
          }
          { // Start scope for v$g$3.
            Pair<Node> v$g$3 = yyRepValue1.reverse();

            yyBase   = yyRepetition1;
            yyResult = psep(yyBase);
            if (yyResult.hasValue("}")) {

              yyValue = GNode.create("ExistentialClause", v$g$1, v$g$2, v$g$3);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            } else {
              yyError = yyError.select("'}' expected", yyBase);
            }
          } // End scope for v$g$3.
        }
      } else {
        yyError = yyError.select("'{' expected", yyBase);
      }
    }

    // Done.
    yyError = yyError.select("existential clause expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ExistentialDcl.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pExistentialDcl(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("type")) {

      yyResult = pTypeDcl(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("ExistentialDcl", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("val")) {

      yyResult = pValDcl(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("ExistentialDcl", v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("existential dcl expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.InfixType.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pInfixType(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk1) yyColumn.chunk1 = new Chunk1();
    if (null == yyColumn.chunk1.fInfixType)
      yyColumn.chunk1.fInfixType = pInfixType$1(yyStart);
    return yyColumn.chunk1.fInfixType;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.InfixType. */
  private Result pInfixType$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pCompoundType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pInfixType$$Star1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("InfixType", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.InfixType$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pInfixType$$Star1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.fInfixType$$Star1)
      yyColumn.chunk2.fInfixType$$Star1 = pInfixType$$Star1$1(yyStart);
    return yyColumn.chunk2.fInfixType$$Star1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.InfixType$$Star1. */
  private Result pInfixType$$Star1$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pInfixTypeRest(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$1 = yyResult.semanticValue();

      yyResult = pInfixType$$Star1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$2 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$1, v$2);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.InfixTypeRest.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pInfixTypeRest(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;

      yyResult = pN(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;
      }

      yyResult = pCompoundType(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("InfixTypeRest", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.CompoundType.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pCompoundType(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.fCompoundType)
      yyColumn.chunk2.fCompoundType = pCompoundType$1(yyStart);
    return yyColumn.chunk2.fCompoundType;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.CompoundType. */
  private Result pCompoundType$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pAnnotType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pCompoundType$$Star1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$g$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pRefinement(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$3 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$3;
        }
        { // Start scope for v$g$3.
          Node v$g$3 = yyOpValue1;

          yyValue = GNode.create("CompoundType", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyOption1, yyError);
        } // End scope for v$g$3.
      }
    }

    // Alternative 2.

    yyResult = pRefinement(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$4 = yyResult.semanticValue();

      yyValue = GNode.create("CompoundType", v$g$4);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.CompoundType$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pCompoundType$$Star1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.fCompoundType$$Star1)
      yyColumn.chunk2.fCompoundType$$Star1 = pCompoundType$$Star1$1(yyStart);
    return yyColumn.chunk2.fCompoundType$$Star1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.CompoundType$$Star1. */
  private Result pCompoundType$$Star1$1(final int yyStart)
    throws IOException {

    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("with")) {

      yyResult = pAnnotType(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyResult = pCompoundType$$Star1(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$2 = yyResult.semanticValue();

          yyValue = new Pair<Node>(v$el$1, v$2);

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.AnnotType.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAnnotType(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.fAnnotType)
      yyColumn.chunk2.fAnnotType = pAnnotType$1(yyStart);
    return yyColumn.chunk2.fAnnotType;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.AnnotType. */
  private Result pAnnotType$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = p$$Shared1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Pair<Node> v$g$1 = yyResult.semanticValue();

      yyResult = pSimpleType(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("AnnotType", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.$$Shared1.
   * This nonterminal represents the duplicate productions
   * org.netbeans.modules.scala.core.rats.ParserScala.AnnotType$$Star1,
   * org.netbeans.modules.scala.core.rats.ParserScala.TemplateStat$$Star1,
   * and org.netbeans.modules.scala.core.rats.ParserScala.TopStat$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result p$$Shared1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.f$$Shared1)
      yyColumn.chunk2.f$$Shared1 = p$$Shared1$1(yyStart);
    return yyColumn.chunk2.f$$Shared1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.$$Shared1. */
  private Result p$$Shared1$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pAnnotation(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$1 = yyResult.semanticValue();

      yyResult = p$$Shared1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$2 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$1, v$2);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimpleType.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimpleType(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pPath(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = psep(yyBase);
      if (yyResult.hasValue(".")) {

        yyBase   = yyResult.index;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("type")) {

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyResult = pTypeArgs(yyOption1);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$1;
          }
          { // Start scope for v$g$2.
            Node v$g$2 = yyOpValue1;

            yyRepetition1 = yyOption1;
            yyRepValue1   = Pair.empty();
            while (true) {

              yyBase   = yyRepetition1;
              yyResult = pkey(yyBase);
              if (yyResult.hasValue("#")) {

                yyResult = pId(yyResult.index);
                yyError  = yyResult.select(yyError, yyRepetition1);
                if (yyResult.hasValue()) {
                  Node v$el$2 = yyResult.semanticValue();

                  yyRepetition1 = yyResult.index;
                  yyRepValue1   = new Pair<Node>(v$el$2, yyRepValue1);
                  continue;
                }
              } else {
                yyError = yyError.select("'#' expected", yyBase);
              }
              break;
            }
            { // Start scope for v$g$3.
              Pair<Node> v$g$3 = yyRepValue1.reverse();

              yyValue = GNode.create("SimpleSingletonType", v$g$1, v$g$2, v$g$3);
              yyValue.setLocation(location(yyStart));

              return new SemanticValue(yyValue, yyRepetition1, yyError);
            } // End scope for v$g$3.
          } // End scope for v$g$2.
        } else {
          yyError = yyError.select("'type' expected", yyBase);
        }
      } else {
        yyError = yyError.select("'.' expected", yyBase);
      }
    }

    // Alternative 2.

    yyResult = pStableId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$4 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeArgs(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$3 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$3;
      }
      { // Start scope for v$g$5.
        Node v$g$5 = yyOpValue1;

        yyRepetition1 = yyOption1;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyBase   = yyRepetition1;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("#")) {

            yyResult = pId(yyResult.index);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {
              Node v$el$4 = yyResult.semanticValue();

              yyRepetition1 = yyResult.index;
              yyRepValue1   = new Pair<Node>(v$el$4, yyRepValue1);
              continue;
            }
          } else {
            yyError = yyError.select("'#' expected", yyBase);
          }
          break;
        }
        { // Start scope for v$g$6.
          Pair<Node> v$g$6 = yyRepValue1.reverse();

          yyValue = GNode.create("SimpleIdType", v$g$4, v$g$5, v$g$6);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyRepetition1, yyError);
        } // End scope for v$g$6.
      } // End scope for v$g$5.
    }

    // Alternative 3.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("(")) {

      yyResult = pTypes(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$7 = yyResult.semanticValue();

        yyOption1  = yyResult.index;

        yyBase   = yyOption1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(",")) {

          yyOption1  = yyResult.index;
        } else {
          yyError = yyError.select("',' expected", yyBase);
        }

        yyBase   = yyOption1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(")")) {

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyResult = pTypeArgs(yyOption1);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$5 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$5;
          }
          { // Start scope for v$g$8.
            Node v$g$8 = yyOpValue1;

            yyRepetition1 = yyOption1;
            yyRepValue1   = Pair.empty();
            while (true) {

              yyBase   = yyRepetition1;
              yyResult = pkey(yyBase);
              if (yyResult.hasValue("#")) {

                yyResult = pId(yyResult.index);
                yyError  = yyResult.select(yyError, yyRepetition1);
                if (yyResult.hasValue()) {
                  Node v$el$6 = yyResult.semanticValue();

                  yyRepetition1 = yyResult.index;
                  yyRepValue1   = new Pair<Node>(v$el$6, yyRepValue1);
                  continue;
                }
              } else {
                yyError = yyError.select("'#' expected", yyBase);
              }
              break;
            }
            { // Start scope for v$g$9.
              Pair<Node> v$g$9 = yyRepValue1.reverse();

              yyValue = GNode.create("SimpleTupleType", v$g$7, v$g$8, v$g$9);
              yyValue.setLocation(location(yyStart));

              return new SemanticValue(yyValue, yyRepetition1, yyError);
            } // End scope for v$g$9.
          } // End scope for v$g$8.
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("simple type expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TypeArgs.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypeArgs(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("[")) {

      yyResult = pTypes(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("]")) {

          yyValue = GNode.create("TypeArgs", v$g$1);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("']' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("type args expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Types.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypes(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pTypes$$Choice1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pTypes$$Choice2(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          Node v$el$3 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = new Pair<Node>(v$el$3, yyRepValue1);
          continue;
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("Types", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Types$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypes$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pWildKey(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Types$$Choice2.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypes$$Choice2(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue(",")) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyResult = pType(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 2.

      yyResult = pWildKey(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("types expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Refinement.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pRefinement(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;

    yyResult = pN(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;
    }

    yyBase   = yyOption1;
    yyResult = psep(yyBase);
    if (yyResult.hasValue("{")) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pRefineStat(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$1.
        Node v$g$1 = yyOpValue1;

        yyRepetition1 = yyOption1;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyResult = pSEMI(yyRepetition1);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {

            yyOption1  = yyResult.index;
            yyOpValue1 = null;

            yyResult = pRefineStat(yyOption1);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {
              Node v$el$3 = yyResult.semanticValue();

              yyOption1  = yyResult.index;
              yyOpValue1 = v$el$3;
            }
            { // Start scope for v$el$2.
              Node v$el$2 = yyOpValue1;

              yyRepetition1 = yyOption1;
              yyRepValue1   = new Pair<Node>(v$el$2, yyRepValue1);
              continue;
            } // End scope for v$el$2.
          }
          break;
        }
        { // Start scope for v$g$2.
          Pair<Node> v$g$2 = yyRepValue1.reverse();

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("}")) {

            yyValue = GNode.create("Refinement", v$g$1, v$g$2);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          } else {
            yyError = yyError.select("'}' expected", yyBase);
          }
        } // End scope for v$g$2.
      } // End scope for v$g$1.
    } else {
      yyError = yyError.select("'{' expected", yyBase);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.RefineStat.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pRefineStat(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.fRefineStat)
      yyColumn.chunk2.fRefineStat = pRefineStat$1(yyStart);
    return yyColumn.chunk2.fRefineStat;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.RefineStat. */
  private Result pRefineStat$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("type")) {

      yyResult = pTypeDef(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("RefineStat", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyResult = pDcl(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("RefineStat", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("refine stat expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Ascription.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAscription(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue(":")) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyResult = pCompoundType(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("Ascription", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 2.

      yyResult = pAnnotation(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyResult = pAnnotation(yyRepetition1);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
          break;
        }
        { // Start scope for v$g$3.
          Pair<Node> v$g$3 = yyRepValue1.reverse();

          yyValue = GNode.create("Ascription", v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyRepetition1, yyError);
        } // End scope for v$g$3.
      }

      // Nested alternative 3.

      yyBase   = yyChoice1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("_")) {
        String v$g$4 = "_";

        yyBase   = yyResult.index;
        yyResult = pop(yyBase);
        if (yyResult.hasValue("*")) {
          String v$g$5 = "*";

          yyValue = GNode.create("Ascription", v$g$4, v$g$5);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("'*' expected", yyBase);
        }
      } else {
        yyError = yyError.select("'_' expected", yyBase);
      }
    }

    // Done.
    yyError = yyError.select("ascription expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Expr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pExpr(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.fExpr)
      yyColumn.chunk2.fExpr = pExpr$1(yyStart);
    return yyColumn.chunk2.fExpr;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Expr. */
  private Result pExpr$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pExpr$$Choice1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("=>")) {

        yyResult = pExpr(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyValue = GNode.create("Expr", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'=>' expected", yyBase);
      }
    }

    // Alternative 2.

    yyResult = pNotFunExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$3 = yyResult.semanticValue();

      yyValue = GNode.create("Expr", v$g$3);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Expr$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pExpr$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pBindings(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.NotFunExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pNotFunExpr(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.fNotFunExpr)
      yyColumn.chunk2.fNotFunExpr = pNotFunExpr$1(yyStart);
    return yyColumn.chunk2.fNotFunExpr;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.NotFunExpr. */
  private Result pNotFunExpr$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    int        yyOption2;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("if")) {

      yyBase   = yyResult.index;
      yyResult = psep(yyBase);
      if (yyResult.hasValue("(")) {

        yyResult = pENTER_NL_DISABLE(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyResult = pExpr(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$1 = yyResult.semanticValue();

            yyResult = pEXIT_NL_DISABLE(yyResult.index);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {

              yyBase   = yyResult.index;
              yyResult = psep(yyBase);
              if (yyResult.hasValue(")")) {

                yyResult = p$$Shared2(yyResult.index);
                yyError  = yyResult.select(yyError);
                if (yyResult.hasValue()) {

                  yyResult = pExpr(yyResult.index);
                  yyError  = yyResult.select(yyError);
                  if (yyResult.hasValue()) {
                    Node v$g$2 = yyResult.semanticValue();

                    yyOption1  = yyResult.index;
                    yyOpValue1 = null;

                    yyOption2  = yyOption1;

                    yyResult = pSEMI(yyOption2);
                    yyError  = yyResult.select(yyError, yyOption2);
                    if (yyResult.hasValue()) {

                      yyOption2  = yyResult.index;
                    }

                    yyBase   = yyOption2;
                    yyResult = pkey(yyBase);
                    if (yyResult.hasValue("else")) {

                      yyResult = pExpr(yyResult.index);
                      yyError  = yyResult.select(yyError, yyOption1);
                      if (yyResult.hasValue()) {
                        Node v$el$1 = yyResult.semanticValue();

                        yyOption1  = yyResult.index;
                        yyOpValue1 = v$el$1;
                      }
                    } else {
                      yyError = yyError.select("'else' expected", yyBase);
                    }
                    { // Start scope for v$g$3.
                      Node v$g$3 = yyOpValue1;

                      yyValue = GNode.create("IfExpr", v$g$1, v$g$2, v$g$3);
                      yyValue.setLocation(location(yyStart));

                      return new SemanticValue(yyValue, yyOption1, yyError);
                    } // End scope for v$g$3.
                  }
                }
              } else {
                yyError = yyError.select("')' expected", yyBase);
              }
            }
          }
        }
      } else {
        yyError = yyError.select("'(' expected", yyBase);
      }
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("while")) {

      yyBase   = yyResult.index;
      yyResult = psep(yyBase);
      if (yyResult.hasValue("(")) {

        yyResult = pENTER_NL_DISABLE(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyResult = pExpr(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$4 = yyResult.semanticValue();

            yyResult = pEXIT_NL_DISABLE(yyResult.index);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {

              yyBase   = yyResult.index;
              yyResult = psep(yyBase);
              if (yyResult.hasValue(")")) {

                yyResult = p$$Shared2(yyResult.index);
                yyError  = yyResult.select(yyError);
                if (yyResult.hasValue()) {

                  yyResult = pExpr(yyResult.index);
                  yyError  = yyResult.select(yyError);
                  if (yyResult.hasValue()) {
                    Node v$g$5 = yyResult.semanticValue();

                    yyValue = GNode.create("WhileExpr", v$g$4, v$g$5);
                    yyValue.setLocation(location(yyStart));

                    return yyResult.createValue(yyValue, yyError);
                  }
                }
              } else {
                yyError = yyError.select("')' expected", yyBase);
              }
            }
          }
        }
      } else {
        yyError = yyError.select("'(' expected", yyBase);
      }
    }

    // Alternative 3.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("try")) {

      yyBase   = yyResult.index;
      yyResult = psep(yyBase);
      if (yyResult.hasValue("{")) {

        yyResult = pBlock(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$6 = yyResult.semanticValue();

          yyBase   = yyResult.index;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("}")) {

            yyOption1  = yyResult.index;
            yyOpValue1 = null;

            yyBase   = yyOption1;
            yyResult = pkey(yyBase);
            if (yyResult.hasValue("catch")) {

              yyBase   = yyResult.index;
              yyResult = psep(yyBase);
              if (yyResult.hasValue("{")) {

                yyResult = pCaseClauses(yyResult.index);
                yyError  = yyResult.select(yyError, yyOption1);
                if (yyResult.hasValue()) {
                  Node v$el$2 = yyResult.semanticValue();

                  yyBase   = yyResult.index;
                  yyResult = psep(yyBase);
                  if (yyResult.hasValue("}")) {

                    yyOption1  = yyResult.index;
                    yyOpValue1 = v$el$2;
                  } else {
                    yyError = yyError.select("'}' expected", yyBase);
                  }
                }
              } else {
                yyError = yyError.select("'{' expected", yyBase);
              }
            } else {
              yyError = yyError.select("'catch' expected", yyBase);
            }
            { // Start scope for v$g$7.
              Node v$g$7 = yyOpValue1;

              yyOpValue1 = null;

              yyBase   = yyOption1;
              yyResult = pkey(yyBase);
              if (yyResult.hasValue("finally")) {

                yyResult = pExpr(yyResult.index);
                yyError  = yyResult.select(yyError, yyOption1);
                if (yyResult.hasValue()) {
                  Node v$el$3 = yyResult.semanticValue();

                  yyOption1  = yyResult.index;
                  yyOpValue1 = v$el$3;
                }
              } else {
                yyError = yyError.select("'finally' expected", yyBase);
              }
              { // Start scope for v$g$8.
                Node v$g$8 = yyOpValue1;

                yyValue = GNode.create("TryExpr", v$g$6, v$g$7, v$g$8);
                yyValue.setLocation(location(yyStart));

                return new SemanticValue(yyValue, yyOption1, yyError);
              } // End scope for v$g$8.
            } // End scope for v$g$7.
          } else {
            yyError = yyError.select("'}' expected", yyBase);
          }
        }
      } else {
        yyError = yyError.select("'{' expected", yyBase);
      }
    }

    // Alternative 4.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("do")) {

      yyResult = pExpr(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$9 = yyResult.semanticValue();

        yyOption1  = yyResult.index;

        yyResult = pSEMI(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {

          yyOption1  = yyResult.index;
        }

        yyBase   = yyOption1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("while")) {

          yyBase   = yyResult.index;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("(")) {

            yyResult = pENTER_NL_DISABLE(yyResult.index);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {

              yyResult = pExpr(yyResult.index);
              yyError  = yyResult.select(yyError);
              if (yyResult.hasValue()) {
                Node v$g$10 = yyResult.semanticValue();

                yyResult = pEXIT_NL_DISABLE(yyResult.index);
                yyError  = yyResult.select(yyError);
                if (yyResult.hasValue()) {

                  yyBase   = yyResult.index;
                  yyResult = psep(yyBase);
                  if (yyResult.hasValue(")")) {

                    yyValue = GNode.create("DoExpr", v$g$9, v$g$10);
                    yyValue.setLocation(location(yyStart));

                    return yyResult.createValue(yyValue, yyError);
                  } else {
                    yyError = yyError.select("')' expected", yyBase);
                  }
                }
              }
            }
          } else {
            yyError = yyError.select("'(' expected", yyBase);
          }
        } else {
          yyError = yyError.select("'while' expected", yyBase);
        }
      }
    }

    // Alternative 5.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("for")) {

      yyResult = pNotFunExpr$$Choice1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$11 = yyResult.semanticValue();

        yyResult = p$$Shared2(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyOption1  = yyResult.index;

          yyBase   = yyOption1;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("yield")) {

            yyOption1  = yyResult.index;
          } else {
            yyError = yyError.select("'yield' expected", yyBase);
          }

          yyResult = pExpr(yyOption1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$12 = yyResult.semanticValue();

            yyValue = GNode.create("ForExpr", v$g$11, v$g$12);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        }
      }
    }

    // Alternative 6.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("throw")) {

      yyResult = pExpr(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$13 = yyResult.semanticValue();

        yyValue = GNode.create("ThrowExpr", v$g$13);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 7.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("return")) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pExpr(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$6 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$6;
      }
      { // Start scope for v$g$14.
        Node v$g$14 = yyOpValue1;

        yyValue = GNode.create("ReturnExpr", v$g$14);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$14.
    }

    // Alternative 8.

    yyResult = pSimpleExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$15 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("=")) {

        yyResult = pExpr(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$16 = yyResult.semanticValue();

          yyValue = GNode.create("AssignmentExpr", v$g$15, v$g$16);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'=' expected", yyBase);
      }
    }

    // Alternative 9.

    yyResult = pPostfixExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$17 = yyResult.semanticValue();

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyResult = pAscription(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$18 = yyResult.semanticValue();

        yyValue = GNode.create("AscriptionExpr", v$g$17, v$g$18);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 2.

      yyBase   = yyChoice1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("match")) {

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("{")) {

          yyResult = pCaseClauses(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$19 = yyResult.semanticValue();

            yyBase   = yyResult.index;
            yyResult = psep(yyBase);
            if (yyResult.hasValue("}")) {

              yyValue = GNode.create("MatchExpr", v$g$17, v$g$19);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            } else {
              yyError = yyError.select("'}' expected", yyBase);
            }
          }
        } else {
          yyError = yyError.select("'{' expected", yyBase);
        }
      } else {
        yyError = yyError.select("'match' expected", yyBase);
      }

      // Nested alternative 3.

      yyValue = GNode.create("NotFunExpr", v$g$17);
      yyValue.setLocation(location(yyStart));

      return new SemanticValue(yyValue, yyChoice1, yyError);
    }

    // Done.
    yyError = yyError.select("not fun expr expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.$$Shared2.
   * This nonterminal represents the duplicate productions
   * org.netbeans.modules.scala.core.rats.ParserScala.NotFunExpr$$Star1,
   * org.netbeans.modules.scala.core.rats.ParserScala.NotFunExpr$$Star2,
   * org.netbeans.modules.scala.core.rats.ParserScala.NotFunExpr$$Star3,
   * org.netbeans.modules.scala.core.rats.ParserScala.CaseClause$$Star1,
   * org.netbeans.modules.scala.core.rats.ParserScala.Dcl$$Star1,
   * and org.netbeans.modules.scala.core.rats.ParserScala.Def$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result p$$Shared2(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.f$$Shared2)
      yyColumn.chunk2.f$$Shared2 = p$$Shared2$1(yyStart);
    return yyColumn.chunk2.f$$Shared2;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.$$Shared2. */
  private Result p$$Shared2$1(final int yyStart) throws IOException {
    Result     yyResult;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pN(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = p$$Shared2(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyValue = null;

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = null;

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.NotFunExpr$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pNotFunExpr$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("(")) {

      yyResult = pEnumerators(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(")")) {

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      }
    }

    // Alternative 2.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("{")) {

      yyResult = pEnumerators(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("}")) {

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("'}' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("not fun expr expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.PostfixExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPostfixExpr(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk2) yyColumn.chunk2 = new Chunk2();
    if (null == yyColumn.chunk2.fPostfixExpr)
      yyColumn.chunk2.fPostfixExpr = pPostfixExpr$1(yyStart);
    return yyColumn.chunk2.fPostfixExpr;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.PostfixExpr. */
  private Result pPostfixExpr$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pInfixExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pId(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("PostfixExpr", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.InfixExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pInfixExpr(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pPrefixExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pInfixExprRest(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
          continue;
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("InfixExpr", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.InfixExprRest.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pInfixExprRest(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;

      yyResult = pN(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;
      }

      yyResult = pPrefixExpr(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("InfixExprRest", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.PrefixExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPrefixExpr(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fPrefixExpr)
      yyColumn.chunk3.fPrefixExpr = pPrefixExpr$1(yyStart);
    return yyColumn.chunk3.fPrefixExpr;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.PrefixExpr. */
  private Result pPrefixExpr$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyResult = pPrefixExpr$$Choice1(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {
      String v$el$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = v$el$1;
    }
    { // Start scope for v$g$1.
      String v$g$1 = yyOpValue1;

      yyResult = pSimpleExpr(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("PrefixExpr", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    } // End scope for v$g$1.

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.PrefixExpr$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPrefixExpr$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pop(yyStart);
    if (yyResult.hasValue("-")) {
      yyValue = "-";

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pop(yyStart);
    if (yyResult.hasValue("+")) {
      yyValue = "+";

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 3.

    yyResult = pop(yyStart);
    if (yyResult.hasValue("~")) {
      yyValue = "~";

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 4.

    yyResult = pop(yyStart);
    if (yyResult.hasValue("!")) {
      yyValue = "!";

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("prefix expr expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimpleExpr(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fSimpleExpr)
      yyColumn.chunk3.fSimpleExpr = pSimpleExpr$1(yyStart);
    return yyColumn.chunk3.fSimpleExpr;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr. */
  private Result pSimpleExpr$1(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pXmlExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeArgs(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyResult = pSimpleExpr$$Star1(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$g$3 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyBase = yyOption1;
          yyC    = character(yyBase);
          if ('.' == yyC) {
            yyIndex = yyOption1 + 1;

            yyResult = pSKIP(yyIndex);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {

              yyResult = pErrorIdExpected(yyResult.index);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$4 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$4;
              }
            }
          } else {
            yyError = yyError.select("'.' expected", yyBase);
          }
          { // Start scope for v$g$4.
            Node v$g$4 = yyOpValue1;

            yyValue = GNode.create("SimpleExpr", v$g$1, v$g$2, v$g$3, v$g$4);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$4.
        }
      } // End scope for v$g$2.
    }

    // Alternative 2.

    yyResult = pLiteral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$5 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeArgs(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$5 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$5;
      }
      { // Start scope for v$g$6.
        Node v$g$6 = yyOpValue1;

        yyResult = pSimpleExpr$$Star2(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$g$7 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyBase = yyOption1;
          yyC    = character(yyBase);
          if ('.' == yyC) {
            yyIndex = yyOption1 + 1;

            yyResult = pSKIP(yyIndex);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {

              yyResult = pErrorIdExpected(yyResult.index);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$8 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$8;
              }
            }
          } else {
            yyError = yyError.select("'.' expected", yyBase);
          }
          { // Start scope for v$g$8.
            Node v$g$8 = yyOpValue1;

            yyValue = GNode.create("SimpleExpr", v$g$5, v$g$6, v$g$7, v$g$8);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$8.
        }
      } // End scope for v$g$6.
    }

    // Alternative 3.

    yyResult = pPath(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$9 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeArgs(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$9 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$9;
      }
      { // Start scope for v$g$10.
        Node v$g$10 = yyOpValue1;

        yyOpValue1 = null;

        yyResult = pArgumentExprs(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$10 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$10;
        }
        { // Start scope for v$g$11.
          Node v$g$11 = yyOpValue1;

          yyResult = pSimpleExpr$$Star3(yyOption1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Pair<Node> v$g$12 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = null;

            yyBase = yyOption1;
            yyC    = character(yyBase);
            if ('.' == yyC) {
              yyIndex = yyOption1 + 1;

              yyResult = pSKIP(yyIndex);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {

                yyResult = pErrorIdExpected(yyResult.index);
                yyError  = yyResult.select(yyError, yyOption1);
                if (yyResult.hasValue()) {
                  Node v$el$13 = yyResult.semanticValue();

                  yyOption1  = yyResult.index;
                  yyOpValue1 = v$el$13;
                }
              }
            } else {
              yyError = yyError.select("'.' expected", yyBase);
            }
            { // Start scope for v$g$13.
              Node v$g$13 = yyOpValue1;

              yyOpValue1 = null;

              yyBase   = yyOption1;
              yyResult = pkey(yyBase);
              if (yyResult.hasValue(":")) {

                yyResult = pType(yyResult.index);
                yyError  = yyResult.select(yyError, yyOption1);
                if (yyResult.hasValue()) {
                  Node v$el$14 = yyResult.semanticValue();

                  yyOption1  = yyResult.index;
                  yyOpValue1 = v$el$14;
                }
              } else {
                yyError = yyError.select("':' expected", yyBase);
              }
              { // Start scope for v$g$14.
                Node v$g$14 = yyOpValue1;

                yyValue = GNode.create("SimpleExpr", v$g$9, v$g$10, v$g$11, v$g$12, v$g$13, v$g$14);
                yyValue.setLocation(location(yyStart));

                return new SemanticValue(yyValue, yyOption1, yyError);
              } // End scope for v$g$14.
            } // End scope for v$g$13.
          }
        } // End scope for v$g$11.
      } // End scope for v$g$10.
    }

    // Alternative 4.

    yyResult = pWildKey(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$15 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeArgs(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$15 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$15;
      }
      { // Start scope for v$g$16.
        Node v$g$16 = yyOpValue1;

        yyResult = pSimpleExpr$$Star4(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$g$17 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyBase = yyOption1;
          yyC    = character(yyBase);
          if ('.' == yyC) {
            yyIndex = yyOption1 + 1;

            yyResult = pSKIP(yyIndex);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {

              yyResult = pErrorIdExpected(yyResult.index);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$18 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$18;
              }
            }
          } else {
            yyError = yyError.select("'.' expected", yyBase);
          }
          { // Start scope for v$g$18.
            Node v$g$18 = yyOpValue1;

            yyValue = GNode.create("SimpleExpr", v$g$15, v$g$16, v$g$17, v$g$18);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$18.
        }
      } // End scope for v$g$16.
    }

    // Alternative 5.

    yyResult = pParenExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$19 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeArgs(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$19 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$19;
      }
      { // Start scope for v$g$20.
        Node v$g$20 = yyOpValue1;

        yyResult = pSimpleExpr$$Star5(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$g$21 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyBase = yyOption1;
          yyC    = character(yyBase);
          if ('.' == yyC) {
            yyIndex = yyOption1 + 1;

            yyResult = pSKIP(yyIndex);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {

              yyResult = pErrorIdExpected(yyResult.index);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$22 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$22;
              }
            }
          } else {
            yyError = yyError.select("'.' expected", yyBase);
          }
          { // Start scope for v$g$22.
            Node v$g$22 = yyOpValue1;

            yyOpValue1 = null;

            yyBase   = yyOption1;
            yyResult = pkey(yyBase);
            if (yyResult.hasValue(":")) {

              yyResult = pType(yyResult.index);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$23 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$23;
              }
            } else {
              yyError = yyError.select("':' expected", yyBase);
            }
            { // Start scope for v$g$23.
              Node v$g$23 = yyOpValue1;

              yyValue = GNode.create("SimpleExpr", v$g$19, v$g$20, v$g$21, v$g$22, v$g$23);
              yyValue.setLocation(location(yyStart));

              return new SemanticValue(yyValue, yyOption1, yyError);
            } // End scope for v$g$23.
          } // End scope for v$g$22.
        }
      } // End scope for v$g$20.
    }

    // Alternative 6.

    yyResult = pBlockExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$24 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeArgs(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$24 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$24;
      }
      { // Start scope for v$g$25.
        Node v$g$25 = yyOpValue1;

        yyResult = pSimpleExpr$$Star6(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$g$26 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyBase = yyOption1;
          yyC    = character(yyBase);
          if ('.' == yyC) {
            yyIndex = yyOption1 + 1;

            yyResult = pSKIP(yyIndex);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {

              yyResult = pErrorIdExpected(yyResult.index);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$27 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$27;
              }
            }
          } else {
            yyError = yyError.select("'.' expected", yyBase);
          }
          { // Start scope for v$g$27.
            Node v$g$27 = yyOpValue1;

            yyValue = GNode.create("SimpleExpr", v$g$24, v$g$25, v$g$26, v$g$27);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$27.
        }
      } // End scope for v$g$25.
    }

    // Alternative 7.

    yyResult = pNewExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$28 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeArgs(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$28 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$28;
      }
      { // Start scope for v$g$29.
        Node v$g$29 = yyOpValue1;

        yyResult = pSimpleExpr$$Star7(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$g$30 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyBase = yyOption1;
          yyC    = character(yyBase);
          if ('.' == yyC) {
            yyIndex = yyOption1 + 1;

            yyResult = pSKIP(yyIndex);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {

              yyResult = pErrorIdExpected(yyResult.index);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$31 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$31;
              }
            }
          } else {
            yyError = yyError.select("'.' expected", yyBase);
          }
          { // Start scope for v$g$31.
            Node v$g$31 = yyOpValue1;

            yyValue = GNode.create("SimpleExpr", v$g$28, v$g$29, v$g$30, v$g$31);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$31.
        }
      } // End scope for v$g$29.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimpleExpr$$Star1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fSimpleExpr$$Star1)
      yyColumn.chunk3.fSimpleExpr$$Star1 = pSimpleExpr$$Star1$1(yyStart);
    return yyColumn.chunk3.fSimpleExpr$$Star1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star1. */
  private Result pSimpleExpr$$Star1$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pMember(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$2 = yyResult.semanticValue();

      yyResult = pSimpleExpr$$Star1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$3 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$2, v$3);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star2.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimpleExpr$$Star2(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fSimpleExpr$$Star2)
      yyColumn.chunk3.fSimpleExpr$$Star2 = pSimpleExpr$$Star2$1(yyStart);
    return yyColumn.chunk3.fSimpleExpr$$Star2;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star2. */
  private Result pSimpleExpr$$Star2$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pMember(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$6 = yyResult.semanticValue();

      yyResult = pSimpleExpr$$Star2(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$7 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$6, v$7);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star3.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimpleExpr$$Star3(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fSimpleExpr$$Star3)
      yyColumn.chunk3.fSimpleExpr$$Star3 = pSimpleExpr$$Star3$1(yyStart);
    return yyColumn.chunk3.fSimpleExpr$$Star3;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star3. */
  private Result pSimpleExpr$$Star3$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pMember(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$11 = yyResult.semanticValue();

      yyResult = pSimpleExpr$$Star3(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$12 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$11, v$12);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star4.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimpleExpr$$Star4(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fSimpleExpr$$Star4)
      yyColumn.chunk3.fSimpleExpr$$Star4 = pSimpleExpr$$Star4$1(yyStart);
    return yyColumn.chunk3.fSimpleExpr$$Star4;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star4. */
  private Result pSimpleExpr$$Star4$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pMember(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$16 = yyResult.semanticValue();

      yyResult = pSimpleExpr$$Star4(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$17 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$16, v$17);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star5.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimpleExpr$$Star5(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fSimpleExpr$$Star5)
      yyColumn.chunk3.fSimpleExpr$$Star5 = pSimpleExpr$$Star5$1(yyStart);
    return yyColumn.chunk3.fSimpleExpr$$Star5;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star5. */
  private Result pSimpleExpr$$Star5$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pMember(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$20 = yyResult.semanticValue();

      yyResult = pSimpleExpr$$Star5(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$21 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$20, v$21);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star6.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimpleExpr$$Star6(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fSimpleExpr$$Star6)
      yyColumn.chunk3.fSimpleExpr$$Star6 = pSimpleExpr$$Star6$1(yyStart);
    return yyColumn.chunk3.fSimpleExpr$$Star6;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star6. */
  private Result pSimpleExpr$$Star6$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pMember(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$25 = yyResult.semanticValue();

      yyResult = pSimpleExpr$$Star6(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$26 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$25, v$26);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star7.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimpleExpr$$Star7(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fSimpleExpr$$Star7)
      yyColumn.chunk3.fSimpleExpr$$Star7 = pSimpleExpr$$Star7$1(yyStart);
    return yyColumn.chunk3.fSimpleExpr$$Star7;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.SimpleExpr$$Star7. */
  private Result pSimpleExpr$$Star7$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pMember(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$29 = yyResult.semanticValue();

      yyResult = pSimpleExpr$$Star7(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$30 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$29, v$30);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Member.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pMember(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk3) yyColumn.chunk3 = new Chunk3();
    if (null == yyColumn.chunk3.fMember)
      yyColumn.chunk3.fMember = pMember$1(yyStart);
    return yyColumn.chunk3.fMember;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Member. */
  private Result pMember$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue(".")) {

      yyResult = pId(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pTypeArgs(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
        { // Start scope for v$g$2.
          Node v$g$2 = yyOpValue1;

          yyOpValue1 = null;

          yyResult = pArgumentExprs(yyOption1);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$2 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$2;
          }
          { // Start scope for v$g$3.
            Node v$g$3 = yyOpValue1;

            yyValue = GNode.create("Member", v$g$1, v$g$2, v$g$3);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$3.
        } // End scope for v$g$2.
      }
    }

    // Alternative 2.

    yyResult = pArgumentExprs(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$4 = yyResult.semanticValue();

      yyValue = GNode.create("Member", v$g$4);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 3.

    yyResult = pWildKey(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$5 = yyResult.semanticValue();

      yyValue = GNode.create("Member", v$g$5);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("member expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.NewExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pNewExpr(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("new")) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyResult = pClassTemplate(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("NewExpr", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 2.

      yyResult = pTemplateBody(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("NewExpr", v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyResult = pSKIP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyBase = yyResult.index;
      yyC    = character(yyBase);
      if ('n' == yyC) {
        yyIndex = yyResult.index + 1;

        yyC = character(yyIndex);
        if ('e' == yyC) {
          yyIndex = yyIndex + 1;

          yyC = character(yyIndex);
          if ('w' == yyC) {
            yyIndex = yyIndex + 1;

            yyResult = pSKIP(yyIndex);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {

              yyResult = pErrorClassTemplateExpected(yyResult.index);
              yyError  = yyResult.select(yyError);
              if (yyResult.hasValue()) {
                Node v$g$3 = yyResult.semanticValue();

                yyValue = GNode.create("NewExpr", v$g$3);
                yyValue.setLocation(location(yyStart));

                return yyResult.createValue(yyValue, yyError);
              }
            }
          } else {
            yyError = yyError.select("'new' expected", yyBase);
          }
        } else {
          yyError = yyError.select("'new' expected", yyBase);
        }
      } else {
        yyError = yyError.select("'new' expected", yyBase);
      }
    }

    // Done.
    yyError = yyError.select("new expr expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ErrorClassTemplateExpected.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pErrorClassTemplateExpected(final int yyStart)
    throws IOException {

    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyValue = GNode.create("Error", "ClassTemplate expected");

    setLocation(yyValue, yyStart);
    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Exprs.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pExprs(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(",")) {

          yyResult = pExpr(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("',' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("Exprs", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ArgumentExprs.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pArgumentExprs(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fArgumentExprs)
      yyColumn.chunk4.fArgumentExprs = pArgumentExprs$1(yyStart);
    return yyColumn.chunk4.fArgumentExprs;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.ArgumentExprs. */
  private Result pArgumentExprs$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParenExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("ArgumentExprs", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyOption1  = yyStart;

    yyResult = pN(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;
    }

    yyResult = pBlockExpr(yyOption1);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("ArgumentExprs", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ParenExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParenExpr(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fParenExpr)
      yyColumn.chunk4.fParenExpr = pParenExpr$1(yyStart);
    return yyColumn.chunk4.fParenExpr;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.ParenExpr. */
  private Result pParenExpr$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    int        yyOption2;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("(")) {

      yyResult = pENTER_NL_DISABLE(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pExprs(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyOption2  = yyResult.index;

          yyBase   = yyOption2;
          yyResult = psep(yyBase);
          if (yyResult.hasValue(",")) {

            yyOption2  = yyResult.index;
          } else {
            yyError = yyError.select("',' expected", yyBase);
          }

          yyOption1  = yyOption2;
          yyOpValue1 = v$el$1;
        }
        { // Start scope for v$g$1.
          Node v$g$1 = yyOpValue1;

          yyResult = pEXIT_NL_DISABLE(yyOption1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {

            yyBase   = yyResult.index;
            yyResult = psep(yyBase);
            if (yyResult.hasValue(")")) {

              yyValue = GNode.create("ParenExpr", v$g$1);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            } else {
              yyError = yyError.select("')' expected", yyBase);
            }
          }
        } // End scope for v$g$1.
      }
    }

    // Done.
    yyError = yyError.select("paren expr expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.BlockExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlockExpr(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fBlockExpr)
      yyColumn.chunk4.fBlockExpr = pBlockExpr$1(yyStart);
    return yyColumn.chunk4.fBlockExpr;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.BlockExpr. */
  private Result pBlockExpr$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("{")) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyResult = pCaseClauses(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("}")) {

          yyValue = GNode.create("BlockExpr", v$g$1);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("'}' expected", yyBase);
        }
      }

      // Nested alternative 2.

      yyResult = pBlock(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("}")) {

          yyValue = GNode.create("BlockExpr", v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("'}' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("block expr expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Block.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlock(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fBlock)
      yyColumn.chunk4.fBlock = pBlock$1(yyStart);
    return yyColumn.chunk4.fBlock;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Block. */
  private Result pBlock$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pENTER_NL_ENABLE(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = pBlock$$Star1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$g$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pResultExpr(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$3 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$3;
        }
        { // Start scope for v$g$2.
          Node v$g$2 = yyOpValue1;

          yyResult = pEXIT_NL_ENABLE(yyOption1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {

            yyValue = GNode.create("Block", v$g$1, v$g$2);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        } // End scope for v$g$2.
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Block$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlock$$Star1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fBlock$$Star1)
      yyColumn.chunk4.fBlock$$Star1 = pBlock$$Star1$1(yyStart);
    return yyColumn.chunk4.fBlock$$Star1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Block$$Star1. */
  private Result pBlock$$Star1$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pBlockStat(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$1 = yyResult.semanticValue();

      yyResult = pSEMI(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyResult = pBlock$$Star1(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$2 = yyResult.semanticValue();

          yyValue = new Pair<Node>(v$el$1, v$2);

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.BlockStat.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlockStat(final int yyStart) throws IOException {
    Result       yyResult;
    Result       yyPredResult;
    boolean      yyPredMatched;
    int          yyRepetition1;
    Pair<Object> yyRepValue1;
    Node         yyValue;
    ParseError   yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pImport(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("BlockStat", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyRepetition1 = yyStart;
    yyRepValue1   = Pair.empty();
    while (true) {

      yyResult = pBlockStat$$Choice1(yyRepetition1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {
        String v$el$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = new Pair<Object>(v$el$1, yyRepValue1);
        continue;
      }
      break;
    }
    { // Start scope for v$g$2.
      Pair<String> v$g$2 = cast(yyRepValue1.reverse());

      yyResult = pDef(yyRepetition1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$3 = yyResult.semanticValue();

        yyValue = GNode.create("BlockStat", v$g$2, v$g$3);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    } // End scope for v$g$2.

    // Alternative 3.

    yyRepetition1 = yyStart;
    yyRepValue1   = Pair.empty();
    while (true) {

      yyResult = pLocalModifier(yyRepetition1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {
        Node v$el$4 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = new Pair<Object>(v$el$4, yyRepValue1);
        continue;
      }
      break;
    }
    { // Start scope for v$g$4.
      Pair<Node> v$g$4 = cast(yyRepValue1.reverse());

      yyResult = pTmplDef(yyRepetition1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$5 = yyResult.semanticValue();

        yyValue = GNode.create("BlockStat", v$g$4, v$g$5);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    } // End scope for v$g$4.

    // Alternative 4.

    yyPredMatched = false;

    yyPredResult = pResultFunExpr(yyStart);
    if (yyPredResult.hasValue()) {

      yyPredMatched = true;
    }

    if (! yyPredMatched) {

      yyResult = pNotFunExpr(yyStart);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$6 = yyResult.semanticValue();

        yyValue = GNode.create("BlockStat", v$g$6);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    } else {
      yyError = yyError.select("block stat expected", yyStart);
    }

    // Alternative 5.

    yyValue = GNode.create("BlockStat", false);
    yyValue.setLocation(location(yyStart));

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.BlockStat$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlockStat$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("implicit")) {
      yyValue = "implicit";

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("lazy")) {
      yyValue = "lazy";

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("block stat expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ResultExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pResultExpr(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pResultFunExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("ResultExpr", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pNotFunExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("ResultExpr", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ResultFunExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pResultFunExpr(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fResultFunExpr)
      yyColumn.chunk4.fResultFunExpr = pResultFunExpr$1(yyStart);
    return yyColumn.chunk4.fResultFunExpr;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.ResultFunExpr. */
  private Result pResultFunExpr$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pResultFunExpr$$Choice1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("=>")) {

        yyResult = pBlock(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyValue = GNode.create("ResultFunExpr", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'=>' expected", yyBase);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ResultFunExpr$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pResultFunExpr$$Choice1(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pBindings(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pResultBinding(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ResultBinding.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pResultBinding(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyBase   = yyOption1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pCompoundType(yyResult.index);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("ResultBinding", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Enumerators.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pEnumerators(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pGenerator(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pSEMI(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {

          yyResult = pEnumerator(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("Enumerators", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Enumerator.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pEnumerator(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pGenerator(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("Enumerator", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pGuard(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("Enumerator", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 3.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("val")) {

      yyResult = pPattern1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$3 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("=")) {

          yyResult = pExpr(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$4 = yyResult.semanticValue();

            yyValue = GNode.create("Enumerator", v$g$3, v$g$4);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        } else {
          yyError = yyError.select("'=' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("enumerator expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Generator.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pGenerator(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;

    yyBase   = yyOption1;
    yyResult = pkey(yyBase);
    if (yyResult.hasValue("val")) {

      yyOption1  = yyResult.index;
    } else {
      yyError = yyError.select("'val' expected", yyBase);
    }

    yyResult = pPattern1(yyOption1);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("<-")) {

        yyResult = pExpr(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyResult = pGuard(yyOption1);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$1;
          }
          { // Start scope for v$g$3.
            Node v$g$3 = yyOpValue1;

            yyValue = GNode.create("Generator", v$g$1, v$g$2, v$g$3);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$3.
        }
      } else {
        yyError = yyError.select("'<-' expected", yyBase);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.CaseClauses.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pCaseClauses(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pCaseClause(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pCaseClause(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
          continue;
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("CaseClauses", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.CaseClause.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pCaseClause(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fCaseClause)
      yyColumn.chunk4.fCaseClause = pCaseClause$1(yyStart);
    return yyColumn.chunk4.fCaseClause;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.CaseClause. */
  private Result pCaseClause$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSKIP_N(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("case")) {

        yyResult = pENTER_NL_DISABLE(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          final int yyChoice1 = yyResult.index;

          // Nested alternative 1.

          yyResult = pCaseClause$$Choice1(yyChoice1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Object v$g$1 = yyResult.semanticValue();

            yyBase   = yyResult.index;
            yyResult = pkey(yyBase);
            if (yyResult.hasValue(":")) {

              yyResult = pFunTypeInCaseClause(yyResult.index);
              yyError  = yyResult.select(yyError);
              if (yyResult.hasValue()) {
                Node v$g$2 = yyResult.semanticValue();

                yyResult = pEXIT_NL_DISABLE(yyResult.index);
                yyError  = yyResult.select(yyError);
                if (yyResult.hasValue()) {

                  yyResult = pBlock(yyResult.index);
                  yyError  = yyResult.select(yyError);
                  if (yyResult.hasValue()) {
                    Node v$g$3 = yyResult.semanticValue();

                    yyValue = GNode.create("CaseClause", v$g$1, v$g$2, v$g$3);
                    yyValue.setLocation(location(yyStart));

                    return yyResult.createValue(yyValue, yyError);
                  }
                }
              }
            } else {
              yyError = yyError.select("':' expected", yyBase);
            }
          }

          // Nested alternative 2.

          yyResult = pPattern(yyChoice1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$4 = yyResult.semanticValue();

            yyResult = p$$Shared2(yyResult.index);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {

              yyOption1  = yyResult.index;
              yyOpValue1 = null;

              yyResult = pGuard(yyOption1);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$3 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$3;
              }
              { // Start scope for v$g$5.
                Node v$g$5 = yyOpValue1;

                yyBase   = yyOption1;
                yyResult = pkey(yyBase);
                if (yyResult.hasValue("=>")) {

                  yyResult = pEXIT_NL_DISABLE(yyResult.index);
                  yyError  = yyResult.select(yyError);
                  if (yyResult.hasValue()) {

                    yyResult = pBlock(yyResult.index);
                    yyError  = yyResult.select(yyError);
                    if (yyResult.hasValue()) {
                      Node v$g$6 = yyResult.semanticValue();

                      yyValue = GNode.create("CaseClause", v$g$4, v$g$5, v$g$6);
                      yyValue.setLocation(location(yyStart));

                      return yyResult.createValue(yyValue, yyError);
                    }
                  }
                } else {
                  yyError = yyError.select("'=>' expected", yyBase);
                }
              } // End scope for v$g$5.
            }
          }
        }
      } else {
        yyError = yyError.select("'case' expected", yyBase);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.CaseClause$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pCaseClause$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    Object     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pVarId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("_")) {
      yyValue = "_";

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("case clause expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Guard.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pGuard(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("if")) {

      yyResult = pPostfixExpr(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("Guard", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("guard expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Pattern.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPattern(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fPattern)
      yyColumn.chunk4.fPattern = pPattern$1(yyStart);
    return yyColumn.chunk4.fPattern;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Pattern. */
  private Result pPattern$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pAlternatePattern(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("Pattern", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pPattern1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("Pattern", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.AlternatePattern.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAlternatePattern(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pPattern1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = psep(yyBase);
      if (yyResult.hasValue("|")) {

        yyResult = pPattern1(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = Pair.empty();
          while (true) {

            yyBase   = yyRepetition1;
            yyResult = psep(yyBase);
            if (yyResult.hasValue("|")) {

              yyResult = pPattern1(yyResult.index);
              yyError  = yyResult.select(yyError, yyRepetition1);
              if (yyResult.hasValue()) {
                Node v$el$1 = yyResult.semanticValue();

                yyRepetition1 = yyResult.index;
                yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
                continue;
              }
            } else {
              yyError = yyError.select("'|' expected", yyBase);
            }
            break;
          }
          { // Start scope for v$g$3.
            Pair<Node> v$g$3 = yyRepValue1.reverse();

            yyValue = GNode.create("AlternatePattern", v$g$1, v$g$2, v$g$3);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyRepetition1, yyError);
          } // End scope for v$g$3.
        }
      } else {
        yyError = yyError.select("'|' expected", yyBase);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Pattern1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPattern1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fPattern1)
      yyColumn.chunk4.fPattern1 = pPattern1$1(yyStart);
    return yyColumn.chunk4.fPattern1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Pattern1. */
  private Result pPattern1$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pTypedPattern(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("Pattern1", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pNoTypedPattern(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("Pattern1", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TypedPattern.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypedPattern(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pVarId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyValue = GNode.create("TypedPattern", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("_")) {
      String v$g$3 = "_";

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$4 = yyResult.semanticValue();

          yyValue = GNode.create("TypedPattern", v$g$3, v$g$4);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
    }

    // Done.
    yyError = yyError.select("typed pattern expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.NoTypedPattern.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pNoTypedPattern(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk4) yyColumn.chunk4 = new Chunk4();
    if (null == yyColumn.chunk4.fNoTypedPattern)
      yyColumn.chunk4.fNoTypedPattern = pNoTypedPattern$1(yyStart);
    return yyColumn.chunk4.fNoTypedPattern;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.NoTypedPattern. */
  private Result pNoTypedPattern$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pAtPattern(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("NoTypedPattern", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pPattern3(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("NoTypedPattern", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.AtPattern.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAtPattern(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pVarId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("@")) {

        yyResult = pPattern3(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyValue = GNode.create("AtPattern", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'@' expected", yyBase);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Pattern3.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPattern3(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fPattern3)
      yyColumn.chunk5.fPattern3 = pPattern3$1(yyStart);
    return yyColumn.chunk5.fPattern3;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Pattern3. */
  private Result pPattern3$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSimplePattern(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyResult = pInfixPatternTail(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyResult = pPattern3$$Star1(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("Pattern3", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      }

      // Nested alternative 2.

      yyValue = GNode.create("Pattern3", v$g$1);
      yyValue.setLocation(location(yyStart));

      return new SemanticValue(yyValue, yyChoice1, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Pattern3$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPattern3$$Star1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fPattern3$$Star1)
      yyColumn.chunk5.fPattern3$$Star1 = pPattern3$$Star1$1(yyStart);
    return yyColumn.chunk5.fPattern3$$Star1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Pattern3$$Star1. */
  private Result pPattern3$$Star1$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pInfixPatternTail(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$1 = yyResult.semanticValue();

      yyResult = pPattern3$$Star1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$2 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$1, v$2);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.InfixPatternTail.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pInfixPatternTail(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;

      yyResult = pN(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;
      }

      yyResult = pSimplePattern(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("InfixPatternTail", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SimplePattern.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSimplePattern(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fSimplePattern)
      yyColumn.chunk5.fSimplePattern = pSimplePattern$1(yyStart);
    return yyColumn.chunk5.fSimplePattern;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.SimplePattern. */
  private Result pSimplePattern$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pXmlPattern(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("SimpleXmlPattern", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("_")) {
      String v$g$2 = "_";

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyBase   = yyOption1;
      yyResult = pop(yyBase);
      if (yyResult.hasValue("*")) {
        String v$el$1 = "*";

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      } else {
        yyError = yyError.select("'*' expected", yyBase);
      }
      { // Start scope for v$g$3.
        String v$g$3 = yyOpValue1;

        yyValue = GNode.create("SimpleWildcardPattern", v$g$2, v$g$3);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$3.
    }

    // Alternative 3.

    yyResult = pLiteral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$4 = yyResult.semanticValue();

      yyValue = GNode.create("SimpleLiteralPattern", v$g$4);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 4.

    yyResult = pTuplePattern(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$5 = yyResult.semanticValue();

      yyValue = GNode.create("SimpleTuplePattern", v$g$5);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 5.

    yyResult = pStableId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$6 = yyResult.semanticValue();

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyResult = pTuplePattern(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$7 = yyResult.semanticValue();

        yyValue = GNode.create("SimpleCallPattern", v$g$6, v$g$7);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 2.

      yyValue = GNode.create("SimpleIdPattern", v$g$6);
      yyValue.setLocation(location(yyStart));

      return new SemanticValue(yyValue, yyChoice1, yyError);
    }

    // Done.
    yyError = yyError.select("simple pattern expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TuplePattern.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTuplePattern(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("(")) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pPatterns(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$1.
        Node v$g$1 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(")")) {

          yyValue = GNode.create("TuplePattern", v$g$1);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      } // End scope for v$g$1.
    }

    // Done.
    yyError = yyError.select("tuple pattern expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Patterns.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPatterns(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pPattern(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(",")) {

          yyResult = pPattern(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("',' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyOption1  = yyRepetition1;
        yyOpValue1 = null;

        yyResult = pPatterns$$Choice1(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          String v$el$2 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$2;
        }
        { // Start scope for v$g$3.
          String v$g$3 = yyOpValue1;

          yyValue = GNode.create("Patterns", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyOption1, yyError);
        } // End scope for v$g$3.
      } // End scope for v$g$2.
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("_")) {
      String v$g$4 = "_";

      yyBase   = yyResult.index;
      yyResult = pop(yyBase);
      if (yyResult.hasValue("*")) {
        String v$g$5 = "*";

        yyValue = GNode.create("Patterns", v$g$4, v$g$5);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'*' expected", yyBase);
      }
    }

    // Done.
    yyError = yyError.select("patterns expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Patterns$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPatterns$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue(",")) {
      yyValue = ",";

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyBase   = yyChoice1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("_")) {

        yyBase   = yyResult.index;
        yyResult = pop(yyBase);
        if (yyResult.hasValue("*")) {

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("'*' expected", yyBase);
        }
      } else {
        yyError = yyError.select("'_' expected", yyBase);
      }

      // Nested alternative 2.

      return new SemanticValue(yyValue, yyChoice1, yyError);
    }

    // Done.
    yyError = yyError.select("patterns expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TypeParamClause.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypeParamClause(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("[")) {

      yyResult = pVariantTypeParam(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue(",")) {

            yyResult = pVariantTypeParam(yyResult.index);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {
              Node v$el$1 = yyResult.semanticValue();

              yyRepetition1 = yyResult.index;
              yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
              continue;
            }
          } else {
            yyError = yyError.select("',' expected", yyBase);
          }
          break;
        }
        { // Start scope for v$g$2.
          Pair<Node> v$g$2 = yyRepValue1.reverse();

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("]")) {

            yyValue = GNode.create("TypeParamClause", v$g$1, v$g$2);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          } else {
            yyError = yyError.select("']' expected", yyBase);
          }
        } // End scope for v$g$2.
      }
    }

    // Done.
    yyError = yyError.select("type param clause expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.FunTypeParamClause.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pFunTypeParamClause(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("[")) {

      yyResult = pTypeParam(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue(",")) {

            yyResult = pTypeParam(yyResult.index);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {
              Node v$el$1 = yyResult.semanticValue();

              yyRepetition1 = yyResult.index;
              yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
              continue;
            }
          } else {
            yyError = yyError.select("',' expected", yyBase);
          }
          break;
        }
        { // Start scope for v$g$2.
          Pair<Node> v$g$2 = yyRepValue1.reverse();

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("]")) {

            yyValue = GNode.create("FunTypeParamClause", v$g$1, v$g$2);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          } else {
            yyError = yyError.select("']' expected", yyBase);
          }
        } // End scope for v$g$2.
      }
    }

    // Done.
    yyError = yyError.select("fun type param clause expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.VariantTypeParam.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pVariantTypeParam(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyResult = pVariantTypeParam$$Choice1(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {
      String v$el$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = v$el$1;
    }
    { // Start scope for v$g$1.
      String v$g$1 = yyOpValue1;

      yyResult = pTypeParam(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("VariantTypeParam", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    } // End scope for v$g$1.

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.VariantTypeParam$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pVariantTypeParam$$Choice1(final int yyStart)
    throws IOException {

    Result     yyResult;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pop(yyStart);
    if (yyResult.hasValue("+")) {
      yyValue = "+";

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pop(yyStart);
    if (yyResult.hasValue("-")) {
      yyValue = "-";

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("variant type param expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TypeParam.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypeParam(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pTypeParam$$Choice1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeParamClause(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$3 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$3;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyOpValue1 = null;

        yyBase   = yyOption1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue(">:")) {

          yyResult = pType(yyResult.index);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$4 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$4;
          }
        } else {
          yyError = yyError.select("'>:' expected", yyBase);
        }
        { // Start scope for v$g$3.
          Node v$g$3 = yyOpValue1;

          yyOpValue1 = null;

          yyBase   = yyOption1;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("<:")) {

            yyResult = pType(yyResult.index);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {
              Node v$el$5 = yyResult.semanticValue();

              yyOption1  = yyResult.index;
              yyOpValue1 = v$el$5;
            }
          } else {
            yyError = yyError.select("'<:' expected", yyBase);
          }
          { // Start scope for v$g$4.
            Node v$g$4 = yyOpValue1;

            yyOpValue1 = null;

            yyBase   = yyOption1;
            yyResult = pkey(yyBase);
            if (yyResult.hasValue("<%")) {

              yyResult = pType(yyResult.index);
              yyError  = yyResult.select(yyError, yyOption1);
              if (yyResult.hasValue()) {
                Node v$el$6 = yyResult.semanticValue();

                yyOption1  = yyResult.index;
                yyOpValue1 = v$el$6;
              }
            } else {
              yyError = yyError.select("'<%' expected", yyBase);
            }
            { // Start scope for v$g$5.
              Node v$g$5 = yyOpValue1;

              yyValue = GNode.create("TypeParam", v$g$1, v$g$2, v$g$3, v$g$4, v$g$5);
              yyValue.setLocation(location(yyStart));

              return new SemanticValue(yyValue, yyOption1, yyError);
            } // End scope for v$g$5.
          } // End scope for v$g$4.
        } // End scope for v$g$3.
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TypeParam$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypeParam$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pWildKey(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ParamClauses.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParamClauses(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Node       yyOpValue1;
    int        yyOption2;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepValue1   = Pair.empty();
    while (true) {

      yyResult = pParamClause(yyRepetition1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
        continue;
      }
      break;
    }
    { // Start scope for v$g$1.
      Pair<Node> v$g$1 = yyRepValue1.reverse();

      yyOption1  = yyRepetition1;
      yyOpValue1 = null;

      yyOption2  = yyOption1;

      yyResult = pN(yyOption2);
      yyError  = yyResult.select(yyError, yyOption2);
      if (yyResult.hasValue()) {

        yyOption2  = yyResult.index;
      }

      yyBase   = yyOption2;
      yyResult = psep(yyBase);
      if (yyResult.hasValue("(")) {

        yyBase   = yyResult.index;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("implicit")) {

          yyResult = pParams(yyResult.index);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$2 = yyResult.semanticValue();

            yyBase   = yyResult.index;
            yyResult = psep(yyBase);
            if (yyResult.hasValue(")")) {

              yyOption1  = yyResult.index;
              yyOpValue1 = v$el$2;
            } else {
              yyError = yyError.select("')' expected", yyBase);
            }
          }
        } else {
          yyError = yyError.select("'implicit' expected", yyBase);
        }
      } else {
        yyError = yyError.select("'(' expected", yyBase);
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("ParamClauses", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    } // End scope for v$g$1.
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ParamClause.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParamClause(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;

    yyResult = pN(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;
    }

    yyBase   = yyOption1;
    yyResult = psep(yyBase);
    if (yyResult.hasValue("(")) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pParams(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$1.
        Node v$g$1 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(")")) {

          yyValue = GNode.create("ParamClause", v$g$1);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      } // End scope for v$g$1.
    } else {
      yyError = yyError.select("'(' expected", yyBase);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Params.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParams(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pParam(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(",")) {

          yyResult = pParam(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("',' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("Params", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Param.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParam(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepValue1   = Pair.empty();
    while (true) {

      yyResult = pAnnotation(yyRepetition1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
        continue;
      }
      break;
    }
    { // Start scope for v$g$1.
      Pair<Node> v$g$1 = yyRepValue1.reverse();

      yyResult = pId(yyRepetition1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyBase   = yyOption1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue(":")) {

          yyResult = pParamType(yyResult.index);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$2 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$2;
          }
        } else {
          yyError = yyError.select("':' expected", yyBase);
        }
        { // Start scope for v$g$3.
          Node v$g$3 = yyOpValue1;

          yyValue = GNode.create("Param", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyOption1, yyError);
        } // End scope for v$g$3.
      }
    } // End scope for v$g$1.

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ParamType.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pParamType(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyBase   = yyChoice1;
      yyResult = pop(yyBase);
      if (yyResult.hasValue("*")) {
        String v$g$2 = "*";

        yyValue = GNode.create("ParamType", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'*' expected", yyBase);
      }

      // Nested alternative 2.

      yyValue = GNode.create("ParamType", v$g$1);
      yyValue.setLocation(location(yyStart));

      return new SemanticValue(yyValue, yyChoice1, yyError);
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("=>")) {
      String v$g$3 = "=>";

      yyResult = pType(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$4 = yyResult.semanticValue();

        yyValue = GNode.create("ParamType", v$g$3, v$g$4);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("param type expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassParamClauses.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassParamClauses(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Node       yyOpValue1;
    int        yyOption2;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepValue1   = Pair.empty();
    while (true) {

      yyResult = pClassParamClause(yyRepetition1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
        continue;
      }
      break;
    }
    { // Start scope for v$g$1.
      Pair<Node> v$g$1 = yyRepValue1.reverse();

      yyOption1  = yyRepetition1;
      yyOpValue1 = null;

      yyOption2  = yyOption1;

      yyResult = pN(yyOption2);
      yyError  = yyResult.select(yyError, yyOption2);
      if (yyResult.hasValue()) {

        yyOption2  = yyResult.index;
      }

      yyBase   = yyOption2;
      yyResult = psep(yyBase);
      if (yyResult.hasValue("(")) {

        yyBase   = yyResult.index;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("implicit")) {

          yyResult = pClassParams(yyResult.index);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$2 = yyResult.semanticValue();

            yyBase   = yyResult.index;
            yyResult = psep(yyBase);
            if (yyResult.hasValue(")")) {

              yyOption1  = yyResult.index;
              yyOpValue1 = v$el$2;
            } else {
              yyError = yyError.select("')' expected", yyBase);
            }
          }
        } else {
          yyError = yyError.select("'implicit' expected", yyBase);
        }
      } else {
        yyError = yyError.select("'(' expected", yyBase);
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("ClassParamClauses", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    } // End scope for v$g$1.
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassParamClause.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassParamClause(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;

    yyResult = pN(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;
    }

    yyBase   = yyOption1;
    yyResult = psep(yyBase);
    if (yyResult.hasValue("(")) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pClassParams(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$1.
        Node v$g$1 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(")")) {

          yyValue = GNode.create("ClassParamClause", v$g$1);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("')' expected", yyBase);
        }
      } // End scope for v$g$1.
    } else {
      yyError = yyError.select("'(' expected", yyBase);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassParams.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassParams(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pClassParam(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(",")) {

          yyResult = pClassParam(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("',' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("ClassParams", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassParam.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassParam(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Object     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepValue1   = Pair.empty();
    while (true) {

      yyResult = pAnnotation(yyRepetition1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
        continue;
      }
      break;
    }
    { // Start scope for v$g$1.
      Pair<Node> v$g$1 = yyRepValue1.reverse();

      yyOption1  = yyRepetition1;
      yyOpValue1 = null;

      yyResult = pClassParam$$Choice1(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Pair<Node> v$el$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$2;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = cast(yyOpValue1);

        yyResult = pId(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = null;

          yyBase   = yyOption1;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue(":")) {

            yyResult = pParamType(yyResult.index);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {
              Node v$el$5 = yyResult.semanticValue();

              yyOption1  = yyResult.index;
              yyOpValue1 = v$el$5;
            }
          } else {
            yyError = yyError.select("':' expected", yyBase);
          }
          { // Start scope for v$g$4.
            Node v$g$4 = cast(yyOpValue1);

            yyValue = GNode.create("ClassParam", v$g$1, v$g$2, v$g$3, v$g$4);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$4.
        }
      } // End scope for v$g$2.
    } // End scope for v$g$1.

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassParam$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassParam$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepValue1   = Pair.empty();
    while (true) {

      yyResult = pModifier(yyRepetition1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {
        Node v$el$4 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = new Pair<Node>(v$el$4, yyRepValue1);
        continue;
      }
      break;
    }
    { // Start scope for yyValue.
      yyValue = yyRepValue1.reverse();

      final int yyChoice1 = yyRepetition1;

      // Nested alternative 1.

      yyBase   = yyChoice1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("val")) {

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'val' expected", yyBase);
      }

      // Nested alternative 2.

      yyBase   = yyChoice1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("var")) {

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'var' expected", yyBase);
      }
    } // End scope for yyValue.

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Bindings.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBindings(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("(")) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pBinding(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$1.
        Node v$g$1 = yyOpValue1;

        yyRepetition1 = yyOption1;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue(",")) {

            yyResult = pBinding(yyResult.index);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {
              Node v$el$2 = yyResult.semanticValue();

              yyRepetition1 = yyResult.index;
              yyRepValue1   = new Pair<Node>(v$el$2, yyRepValue1);
              continue;
            }
          } else {
            yyError = yyError.select("',' expected", yyBase);
          }
          break;
        }
        { // Start scope for v$g$2.
          Pair<Node> v$g$2 = yyRepValue1.reverse();

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue(")")) {

            yyValue = GNode.create("Bindings", v$g$1, v$g$2);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          } else {
            yyError = yyError.select("')' expected", yyBase);
          }
        } // End scope for v$g$2.
      } // End scope for v$g$1.
    }

    // Done.
    yyError = yyError.select("bindings expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Binding.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBinding(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyBase   = yyOption1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("Binding", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Modifier.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pModifier(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fModifier)
      yyColumn.chunk5.fModifier = pModifier$1(yyStart);
    return yyColumn.chunk5.fModifier;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Modifier. */
  private Result pModifier$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pLocalModifier(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("Modifier", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pAccessModifier(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("Modifier", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 3.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("override")) {
      String v$g$3 = "override";

      yyValue = GNode.create("Modifier", v$g$3);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("modifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.LocalModifier.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pLocalModifier(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fLocalModifier)
      yyColumn.chunk5.fLocalModifier = pLocalModifier$1(yyStart);
    return yyColumn.chunk5.fLocalModifier;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.LocalModifier. */
  private Result pLocalModifier$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("abstract")) {
      String v$g$1 = "abstract";

      yyValue = GNode.create("LocalModifier", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("final")) {
      String v$g$2 = "final";

      yyValue = GNode.create("LocalModifier", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 3.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("sealed")) {
      String v$g$3 = "sealed";

      yyValue = GNode.create("LocalModifier", v$g$3);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 4.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("implicit")) {
      String v$g$4 = "implicit";

      yyValue = GNode.create("LocalModifier", v$g$4);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 5.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("lazy")) {
      String v$g$5 = "lazy";

      yyValue = GNode.create("LocalModifier", v$g$5);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("local modifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.AccessModifier.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAccessModifier(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pAccessModifier$$Choice1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pAccessQualifier(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$3 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$3;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("AccessModifier", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.AccessModifier$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAccessModifier$$Choice1(final int yyStart)
    throws IOException {

    Result     yyResult;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("private")) {
      yyValue = "private";

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("protected")) {
      yyValue = "protected";

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("access modifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.AccessQualifier.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAccessQualifier(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("[")) {

      yyResult = pAccessQualifier$$Choice1(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("]")) {

          yyValue = GNode.create("AccessQualifier", v$g$1);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("']' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("access qualifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.AccessQualifier$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAccessQualifier$$Choice1(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pThisKey(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Annotation.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAnnotation(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fAnnotation)
      yyColumn.chunk5.fAnnotation = pAnnotation$1(yyStart);
    return yyColumn.chunk5.fAnnotation;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Annotation. */
  private Result pAnnotation$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("@")) {
      String v$g$1 = "@";

      yyResult = pAnnotationExpr(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;

        yyResult = pN(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {

          yyOption1  = yyResult.index;
        }

        yyValue = GNode.create("Annotation", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      }
    }

    // Done.
    yyError = yyError.select("annotation expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.AnnotationExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pAnnotationExpr(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Pair<Node> yyOpValue1;
    int        yyOption2;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pConstr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyOption2  = yyOption1;

      yyResult = pN(yyOption2);
      yyError  = yyResult.select(yyError, yyOption2);
      if (yyResult.hasValue()) {

        yyOption2  = yyResult.index;
      }

      yyBase   = yyOption2;
      yyResult = psep(yyBase);
      if (yyResult.hasValue("{")) {

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyResult = pNameValuePairs(yyRepetition1);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$2 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$2, yyRepValue1);
            continue;
          }
          break;
        }
        { // Start scope for v$el$1.
          Pair<Node> v$el$1 = yyRepValue1.reverse();

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("}")) {

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$1;
          } else {
            yyError = yyError.select("'}' expected", yyBase);
          }
        } // End scope for v$el$1.
      } else {
        yyError = yyError.select("'{' expected", yyBase);
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyOpValue1;

        yyValue = GNode.create("AnnotationExpr", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.NameValuePairs.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pNameValuePairs(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pNameValuePair(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(",")) {

          yyResult = pNameValuePair(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("',' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("NameValuePairs", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.NameValuePair.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pNameValuePair(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fNameValuePair)
      yyColumn.chunk5.fNameValuePair = pNameValuePair$1(yyStart);
    return yyColumn.chunk5.fNameValuePair;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.NameValuePair. */
  private Result pNameValuePair$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("val")) {

      yyResult = pId(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyBase   = yyResult.index;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("=")) {

          yyResult = pPrefixExpr(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$2 = yyResult.semanticValue();

            yyValue = GNode.create("NameValuePair", v$g$1, v$g$2);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        } else {
          yyError = yyError.select("'=' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("name value pair expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TemplateBody.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTemplateBody(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fTemplateBody)
      yyColumn.chunk5.fTemplateBody = pTemplateBody$1(yyStart);
    return yyColumn.chunk5.fTemplateBody;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.TemplateBody. */
  private Result pTemplateBody$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;

    yyResult = pN(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;
    }

    yyBase   = yyOption1;
    yyResult = psep(yyBase);
    if (yyResult.hasValue("{")) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pSelfType(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$1.
        Node v$g$1 = yyOpValue1;

        yyResult = pTemplateStat(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyResult = pTemplateBody$$Star1(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Pair<Node> v$g$3 = yyResult.semanticValue();

            yyBase   = yyResult.index;
            yyResult = psep(yyBase);
            if (yyResult.hasValue("}")) {

              yyValue = GNode.create("TemplateBody", v$g$1, v$g$2, v$g$3);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            } else {
              yyError = yyError.select("'}' expected", yyBase);
            }
          }
        }
      } // End scope for v$g$1.
    } else {
      yyError = yyError.select("'{' expected", yyBase);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TemplateBody$$Star1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTemplateBody$$Star1(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fTemplateBody$$Star1)
      yyColumn.chunk5.fTemplateBody$$Star1 = pTemplateBody$$Star1$1(yyStart);
    return yyColumn.chunk5.fTemplateBody$$Star1;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.TemplateBody$$Star1. */
  private Result pTemplateBody$$Star1$1(final int yyStart)
    throws IOException {

    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSEMI(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = pTemplateStat(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$el$2 = yyResult.semanticValue();

        yyResult = pTemplateBody$$Star1(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Pair<Node> v$3 = yyResult.semanticValue();

          yyValue = new Pair<Node>(v$el$2, v$3);

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TemplateStat.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTemplateStat(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk5) yyColumn.chunk5 = new Chunk5();
    if (null == yyColumn.chunk5.fTemplateStat)
      yyColumn.chunk5.fTemplateStat = pTemplateStat$1(yyStart);
    return yyColumn.chunk5.fTemplateStat;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.TemplateStat. */
  private Result pTemplateStat$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pImport(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("TemplateStat", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = p$$Shared1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Pair<Node> v$g$2 = yyResult.semanticValue();

      yyResult = p$$Shared3(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$g$3 = yyResult.semanticValue();

        final int yyChoice1 = yyResult.index;

        // Nested alternative 1.

        yyResult = pDef(yyChoice1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$4 = yyResult.semanticValue();

          yyValue = GNode.create("TemplateStat", v$g$2, v$g$3, v$g$4);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }

        // Nested alternative 2.

        yyResult = pDcl(yyChoice1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$5 = yyResult.semanticValue();

          yyValue = GNode.create("TemplateStat", v$g$2, v$g$3, v$g$5);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Alternative 3.

    yyResult = pExpr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$6 = yyResult.semanticValue();

      yyValue = GNode.create("TemplateStat", v$g$6);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 4.

    yyValue = GNode.create("TemplateStat", false);
    yyValue.setLocation(location(yyStart));

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.$$Shared3.
   * This nonterminal represents the duplicate productions
   * org.netbeans.modules.scala.core.rats.ParserScala.TemplateStat$$Star2
   * and org.netbeans.modules.scala.core.rats.ParserScala.TopStat$$Star2.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result p$$Shared3(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.f$$Shared3)
      yyColumn.chunk6.f$$Shared3 = p$$Shared3$1(yyStart);
    return yyColumn.chunk6.f$$Shared3;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.$$Shared3. */
  private Result p$$Shared3$1(final int yyStart) throws IOException {
    Result     yyResult;
    Pair<Node> yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pModifier(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$el$3 = yyResult.semanticValue();

      yyResult = p$$Shared3(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$4 = yyResult.semanticValue();

        yyValue = new Pair<Node>(v$el$3, v$4);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyValue = Pair.empty();

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SelfType.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSelfType(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyBase   = yyOption1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("=>")) {

          yyValue = GNode.create("SelfType", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        } else {
          yyError = yyError.select("'=>' expected", yyBase);
        }
      } // End scope for v$g$2.
    }

    // Alternative 2.

    yyResult = pThisKey(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$3 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$4 = yyResult.semanticValue();

          yyBase   = yyResult.index;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("=>")) {

            yyValue = GNode.create("SelfType", v$g$3, v$g$4);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          } else {
            yyError = yyError.select("'=>' expected", yyBase);
          }
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Import.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pImport(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("import")) {

      yyResult = pImportExpr(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue(",")) {

            yyResult = pImportExpr(yyResult.index);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {
              Node v$el$1 = yyResult.semanticValue();

              yyRepetition1 = yyResult.index;
              yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
              continue;
            }
          } else {
            yyError = yyError.select("',' expected", yyBase);
          }
          break;
        }
        { // Start scope for v$g$2.
          Pair<Node> v$g$2 = yyRepValue1.reverse();

          yyValue = GNode.create("Import", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyRepetition1, yyError);
        } // End scope for v$g$2.
      }
    }

    // Alternative 2.

    yyC = character(yyStart);
    if ('i' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('m' == yyC) {
        yyIndex = yyIndex + 1;

        yyC = character(yyIndex);
        if ('p' == yyC) {
          yyIndex = yyIndex + 1;

          yyC = character(yyIndex);
          if ('o' == yyC) {
            yyIndex = yyIndex + 1;

            yyC = character(yyIndex);
            if ('r' == yyC) {
              yyIndex = yyIndex + 1;

              yyC = character(yyIndex);
              if ('t' == yyC) {
                yyIndex = yyIndex + 1;

                yyResult = pSKIP(yyIndex);
                yyError  = yyResult.select(yyError);
                if (yyResult.hasValue()) {

                  yyResult = pErrorStableIdExpected(yyResult.index);
                  yyError  = yyResult.select(yyError);
                  if (yyResult.hasValue()) {
                    Node v$g$3 = yyResult.semanticValue();

                    yyValue = GNode.create("Import", v$g$3);
                    yyValue.setLocation(location(yyStart));

                    return yyResult.createValue(yyValue, yyError);
                  }
                }
              }
            }
          }
        }
      }
    }

    // Done.
    yyError = yyError.select("import expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ErrorStableIdExpected.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pErrorStableIdExpected(final int yyStart)
    throws IOException {

    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyValue = GNode.create("Error", "StableId expected");

    setLocation(yyValue, yyStart);
    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ImportExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pImportExpr(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pStableId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pImportExpr$$Choice1(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("ImportExpr", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ImportExpr$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pImportExpr$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue(".")) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyResult = pWildKey(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 2.

      yyResult = pImportSelectors(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("import expr expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ImportSelectors.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pImportSelectors(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("{")) {

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pImportSelector(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyBase   = yyResult.index;
          yyResult = psep(yyBase);
          if (yyResult.hasValue(",")) {

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          } else {
            yyError = yyError.select("',' expected", yyBase);
          }
        }
        break;
      }
      { // Start scope for v$g$1.
        Pair<Node> v$g$1 = yyRepValue1.reverse();

        yyResult = pImportSelectors$$Choice1(yyRepetition1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyBase   = yyResult.index;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("}")) {

            yyValue = GNode.create("ImportSelectors", v$g$1, v$g$2);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          } else {
            yyError = yyError.select("'}' expected", yyBase);
          }
        }
      } // End scope for v$g$1.
    }

    // Done.
    yyError = yyError.select("import selectors expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ImportSelectors$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pImportSelectors$$Choice1(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pImportSelector(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pWildKey(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ImportSelector.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pImportSelector(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pImportSelector$$Choice1(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("ImportSelector", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ImportSelector$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pImportSelector$$Choice1(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("=>")) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyResult = pId(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        return yyResult.createValue(yyValue, yyError);
      }

      // Nested alternative 2.

      yyResult = pWildKey(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("import selector expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Dcl.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pDcl(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.fDcl) yyColumn.chunk6.fDcl = pDcl$1(yyStart);
    return yyColumn.chunk6.fDcl;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Dcl. */
  private Result pDcl$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("val")) {

      yyResult = pValDcl(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("Dcl", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("var")) {

      yyResult = pVarDcl(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("Dcl", v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 3.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("def")) {

      yyResult = pFunDcl(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$3 = yyResult.semanticValue();

        yyValue = GNode.create("Dcl", v$g$3);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 4.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("type")) {

      yyResult = p$$Shared2(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyResult = pTypeDcl(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$4 = yyResult.semanticValue();

          yyValue = GNode.create("Dcl", v$g$4);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Done.
    yyError = yyError.select("dcl expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ValDcl.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pValDcl(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pIds(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyValue = GNode.create("ValDcl", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.VarDcl.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pVarDcl(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pIds(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyValue = GNode.create("VarDcl", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.FunDcl.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pFunDcl(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pFunSig(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyBase   = yyOption1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyValue = GNode.create("FunDcl", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyOption1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.FunSig.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pFunSig(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pFunTypeParamClause(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyResult = pParamClauses(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("FunSig", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TypeDcl.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypeDcl(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeParamClause(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyOpValue1 = null;

        yyBase   = yyOption1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue(">:")) {

          yyResult = pType(yyResult.index);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$2 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$2;
          }
        } else {
          yyError = yyError.select("'>:' expected", yyBase);
        }
        { // Start scope for v$g$3.
          Node v$g$3 = yyOpValue1;

          yyOpValue1 = null;

          yyBase   = yyOption1;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("<:")) {

            yyResult = pType(yyResult.index);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {
              Node v$el$3 = yyResult.semanticValue();

              yyOption1  = yyResult.index;
              yyOpValue1 = v$el$3;
            }
          } else {
            yyError = yyError.select("'<:' expected", yyBase);
          }
          { // Start scope for v$g$4.
            Node v$g$4 = yyOpValue1;

            yyValue = GNode.create("TypeDcl", v$g$1, v$g$2, v$g$3, v$g$4);
            yyValue.setLocation(location(yyStart));

            return new SemanticValue(yyValue, yyOption1, yyError);
          } // End scope for v$g$4.
        } // End scope for v$g$3.
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.PatVarDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPatVarDef(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.fPatVarDef)
      yyColumn.chunk6.fPatVarDef = pPatVarDef$1(yyStart);
    return yyColumn.chunk6.fPatVarDef;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.PatVarDef. */
  private Result pPatVarDef$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("val")) {

      yyResult = pValDef(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("PatVarDef", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("var")) {

      yyResult = pVarDef(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("PatVarDef", v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("pat var def expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.ParserScala.Def.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pDef(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.fDef) yyColumn.chunk6.fDef = pDef$1(yyStart);
    return yyColumn.chunk6.fDef;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Def. */
  private Result pDef$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pPatVarDef(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("Def", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("def")) {

      yyResult = pFunDef(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("Def", v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 3.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("type")) {

      yyResult = p$$Shared2(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyResult = pTypeDef(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("Def", v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Alternative 4.

    yyResult = pTmplDef(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$4 = yyResult.semanticValue();

      yyValue = GNode.create("Def", v$g$4);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("def expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.PatDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPatDef(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pNoTypedPattern(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue(",")) {

          yyResult = pNoTypedPattern(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("',' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyOption1  = yyRepetition1;
        yyOpValue1 = null;

        yyBase   = yyOption1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue(":")) {

          yyResult = pType(yyResult.index);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$2 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$2;
          }
        } else {
          yyError = yyError.select("':' expected", yyBase);
        }
        { // Start scope for v$g$3.
          Node v$g$3 = yyOpValue1;

          yyBase   = yyOption1;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("=")) {

            yyResult = pExpr(yyResult.index);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {
              Node v$g$4 = yyResult.semanticValue();

              yyValue = GNode.create("PatDef", v$g$1, v$g$2, v$g$3, v$g$4);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            }
          } else {
            yyError = yyError.select("'=' expected", yyBase);
          }
        } // End scope for v$g$3.
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ValDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pValDef(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pPatDef(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("ValDef", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.VarDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pVarDef(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pPatDef(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("VarDef", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pIds(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyBase   = yyResult.index;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyBase   = yyResult.index;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("=")) {
            String v$g$4 = "=";

            yyBase   = yyResult.index;
            yyResult = pkey(yyBase);
            if (yyResult.hasValue("_")) {
              String v$g$5 = "_";

              yyValue = GNode.create("VarDef", v$g$2, v$g$3, v$g$4, v$g$5);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            } else {
              yyError = yyError.select("'_' expected", yyBase);
            }
          } else {
            yyError = yyError.select("'=' expected", yyBase);
          }
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.FunDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pFunDef(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pFunSig(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyOption1  = yyChoice1;
      yyOpValue1 = null;

      yyBase   = yyOption1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue(":")) {

        yyResult = pType(yyResult.index);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$1;
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("=")) {

          yyResult = pExpr(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$3 = yyResult.semanticValue();

            yyValue = GNode.create("FunDef", v$g$1, v$g$2, v$g$3);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        } else {
          yyError = yyError.select("'=' expected", yyBase);
        }
      } // End scope for v$g$2.

      // Nested alternative 2.

      yyOption1  = yyChoice1;

      yyResult = pN(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;
      }

      yyBase   = yyOption1;
      yyResult = psep(yyBase);
      if (yyResult.hasValue("{")) {

        yyResult = pBlock(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$4 = yyResult.semanticValue();

          yyBase   = yyResult.index;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("}")) {

            yyValue = GNode.create("FunDef", v$g$1, v$g$4);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          } else {
            yyError = yyError.select("'}' expected", yyBase);
          }
        }
      } else {
        yyError = yyError.select("'{' expected", yyBase);
      }
    }

    // Alternative 2.

    yyResult = pThisKey(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$5 = yyResult.semanticValue();

      yyResult = pParamClause(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$6 = yyResult.semanticValue();

        yyResult = pParamClauses(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$7 = yyResult.semanticValue();

          yyResult = pFunDef$$Choice1(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$8 = yyResult.semanticValue();

            yyValue = GNode.create("ConstructorFunDef", v$g$5, v$g$6, v$g$7, v$g$8);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        }
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.FunDef$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pFunDef$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("=")) {

      yyResult = pConstrExpr(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyOption1  = yyStart;

    yyResult = pN(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;
    }

    yyResult = pConstrBlock(yyOption1);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("fun def expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TypeDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTypeDef(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.fTypeDef)
      yyColumn.chunk6.fTypeDef = pTypeDef$1(yyStart);
    return yyColumn.chunk6.fTypeDef;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.TypeDef. */
  private Result pTypeDef$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeParamClause(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyBase   = yyOption1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("=")) {

          yyResult = pType(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$3 = yyResult.semanticValue();

            yyValue = GNode.create("TypeDef", v$g$1, v$g$2, v$g$3);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        } else {
          yyError = yyError.select("'=' expected", yyBase);
        }
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TmplDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTmplDef(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.fTmplDef)
      yyColumn.chunk6.fTmplDef = pTmplDef$1(yyStart);
    return yyColumn.chunk6.fTmplDef;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.TmplDef. */
  private Result pTmplDef$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    String     yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyBase   = yyOption1;
    yyResult = pkey(yyBase);
    if (yyResult.hasValue("case")) {
      String v$el$1 = "case";

      yyOption1  = yyResult.index;
      yyOpValue1 = v$el$1;
    } else {
      yyError = yyError.select("'case' expected", yyBase);
    }
    { // Start scope for v$g$1.
      String v$g$1 = yyOpValue1;

      final int yyChoice1 = yyOption1;

      // Nested alternative 1.

      yyBase   = yyChoice1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("class")) {

        yyResult = pClassDef(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyValue = GNode.create("TmplDef", v$g$1, v$g$2);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'class' expected", yyBase);
      }

      // Nested alternative 2.

      yyBase   = yyChoice1;
      yyResult = pkey(yyBase);
      if (yyResult.hasValue("object")) {

        yyResult = pObjectDef(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("TmplDef", v$g$1, v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'object' expected", yyBase);
      }
    } // End scope for v$g$1.

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("trait")) {

      yyResult = pTraitDef(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$4 = yyResult.semanticValue();

        yyValue = GNode.create("TmplDef", v$g$4);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("tmpl def expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassDef(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeParamClause(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyRepetition1 = yyOption1;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyResult = pAnnotation(yyRepetition1);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$2 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$2, yyRepValue1);
            continue;
          }
          break;
        }
        { // Start scope for v$g$3.
          Pair<Node> v$g$3 = yyRepValue1.reverse();

          yyOption1  = yyRepetition1;
          yyOpValue1 = null;

          yyResult = pAccessModifier(yyOption1);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {
            Node v$el$3 = yyResult.semanticValue();

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$3;
          }
          { // Start scope for v$g$4.
            Node v$g$4 = yyOpValue1;

            yyResult = pClassParamClauses(yyOption1);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {
              Node v$g$5 = yyResult.semanticValue();

              yyResult = pClassTemplateOpt(yyResult.index);
              yyError  = yyResult.select(yyError);
              if (yyResult.hasValue()) {
                Node v$g$6 = yyResult.semanticValue();

                yyValue = GNode.create("ClassDef", v$g$1, v$g$2, v$g$3, v$g$4, v$g$5, v$g$6);
                yyValue.setLocation(location(yyStart));

                return yyResult.createValue(yyValue, yyError);
              }
            }
          } // End scope for v$g$4.
        } // End scope for v$g$3.
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TraitDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTraitDef(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pTypeParamClause(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$2.
        Node v$g$2 = yyOpValue1;

        yyResult = pTraitTemplateOpt(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("TraitDef", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ObjectDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pObjectDef(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pId(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pClassTemplateOpt(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("ObjectDef", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassTemplateOpt.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassTemplateOpt(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.fClassTemplateOpt)
      yyColumn.chunk6.fClassTemplateOpt = pClassTemplateOpt$1(yyStart);
    return yyColumn.chunk6.fClassTemplateOpt;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.ClassTemplateOpt. */
  private Result pClassTemplateOpt$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pExtends(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pClassTemplate(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("ClassTemplateOpt", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyResult = pExtends(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {
      Node v$el$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = v$el$1;
    }
    { // Start scope for v$g$3.
      Node v$g$3 = yyOpValue1;

      yyResult = pTemplateBody(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$4 = yyResult.semanticValue();

        yyValue = GNode.create("ClassTemplateOpt", v$g$3, v$g$4);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    } // End scope for v$g$3.

    // Alternative 3.

    yyValue = GNode.create("ClassTemplateOpt", false);
    yyValue.setLocation(location(yyStart));

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TraitTemplateOpt.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTraitTemplateOpt(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pExtends(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pTraitTemplate(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyValue = GNode.create("TraitTemplateOpt", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 2.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyResult = pExtends(yyOption1);
    yyError  = yyResult.select(yyError, yyOption1);
    if (yyResult.hasValue()) {
      Node v$el$1 = yyResult.semanticValue();

      yyOption1  = yyResult.index;
      yyOpValue1 = v$el$1;
    }
    { // Start scope for v$g$3.
      Node v$g$3 = yyOpValue1;

      yyResult = pTemplateBody(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$4 = yyResult.semanticValue();

        yyValue = GNode.create("TraitTemplateOpt", v$g$3, v$g$4);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    } // End scope for v$g$3.

    // Alternative 3.

    yyValue = GNode.create("TraitTemplateOpt", false);
    yyValue.setLocation(location(yyStart));

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Extends.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pExtends(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.fExtends)
      yyColumn.chunk6.fExtends = pExtends$1(yyStart);
    return yyColumn.chunk6.fExtends;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.Extends. */
  private Result pExtends$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("extends")) {
      String v$g$1 = "extends";

      yyValue = GNode.create("Extends", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("<:")) {
      String v$g$2 = "<:";

      yyValue = GNode.create("Extends", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("extends expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassTemplate.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassTemplate(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    int        yyOption2;
    Node       yyOpValue2;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyBase   = yyOption1;
    yyResult = psep(yyBase);
    if (yyResult.hasValue("{")) {

      yyOption2  = yyResult.index;
      yyOpValue2 = null;

      yyResult = pEarlyDefs(yyOption2);
      yyError  = yyResult.select(yyError, yyOption2);
      if (yyResult.hasValue()) {
        Node v$el$2 = yyResult.semanticValue();

        yyOption2  = yyResult.index;
        yyOpValue2 = v$el$2;
      }
      { // Start scope for v$el$1.
        Node v$el$1 = yyOpValue2;

        yyBase   = yyOption2;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("}")) {

          yyBase   = yyResult.index;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("with")) {

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$1;
          } else {
            yyError = yyError.select("'with' expected", yyBase);
          }
        } else {
          yyError = yyError.select("'}' expected", yyBase);
        }
      } // End scope for v$el$1.
    } else {
      yyError = yyError.select("'{' expected", yyBase);
    }
    { // Start scope for v$g$1.
      Node v$g$1 = yyOpValue1;

      yyResult = pClassParents(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pTemplateBody(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$3 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$3;
        }
        { // Start scope for v$g$3.
          Node v$g$3 = yyOpValue1;

          yyValue = GNode.create("ClassTemplate", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyOption1, yyError);
        } // End scope for v$g$3.
      }
    } // End scope for v$g$1.

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TraitTemplate.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTraitTemplate(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyOpValue1;
    int        yyOption2;
    Node       yyOpValue2;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;
    yyOpValue1 = null;

    yyBase   = yyOption1;
    yyResult = psep(yyBase);
    if (yyResult.hasValue("{")) {

      yyOption2  = yyResult.index;
      yyOpValue2 = null;

      yyResult = pEarlyDefs(yyOption2);
      yyError  = yyResult.select(yyError, yyOption2);
      if (yyResult.hasValue()) {
        Node v$el$2 = yyResult.semanticValue();

        yyOption2  = yyResult.index;
        yyOpValue2 = v$el$2;
      }
      { // Start scope for v$el$1.
        Node v$el$1 = yyOpValue2;

        yyBase   = yyOption2;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("}")) {

          yyBase   = yyResult.index;
          yyResult = pkey(yyBase);
          if (yyResult.hasValue("with")) {

            yyOption1  = yyResult.index;
            yyOpValue1 = v$el$1;
          } else {
            yyError = yyError.select("'with' expected", yyBase);
          }
        } else {
          yyError = yyError.select("'}' expected", yyBase);
        }
      } // End scope for v$el$1.
    } else {
      yyError = yyError.select("'{' expected", yyBase);
    }
    { // Start scope for v$g$1.
      Node v$g$1 = yyOpValue1;

      yyResult = pTraitParents(yyOption1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = null;

        yyResult = pTemplateBody(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {
          Node v$el$3 = yyResult.semanticValue();

          yyOption1  = yyResult.index;
          yyOpValue1 = v$el$3;
        }
        { // Start scope for v$g$3.
          Node v$g$3 = yyOpValue1;

          yyValue = GNode.create("TraitTemplate", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyOption1, yyError);
        } // End scope for v$g$3.
      }
    } // End scope for v$g$1.

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ClassParents.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pClassParents(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pConstr(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("with")) {

          yyResult = pAnnotType(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("'with' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("ClassParents", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TraitParents.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTraitParents(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pAnnotType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyBase   = yyRepetition1;
        yyResult = pkey(yyBase);
        if (yyResult.hasValue("with")) {

          yyResult = pAnnotType(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        } else {
          yyError = yyError.select("'with' expected", yyBase);
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("TraitParents", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Constr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pConstr(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pAnnotType(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pArgumentExprs(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
          continue;
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("Constr", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.EarlyDefs.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pEarlyDefs(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pEarlyDef(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pSEMI(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {

          yyResult = pEarlyDef(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("EarlyDefs", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.EarlyDef.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pEarlyDef(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepValue1   = Pair.empty();
    while (true) {

      yyResult = pAnnotation(yyRepetition1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
        continue;
      }
      break;
    }
    { // Start scope for v$g$1.
      Pair<Node> v$g$1 = yyRepValue1.reverse();

      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pModifier(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          Node v$el$2 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = new Pair<Node>(v$el$2, yyRepValue1);
          continue;
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyResult = pPatVarDef(yyRepetition1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("EarlyDef", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } // End scope for v$g$2.
    } // End scope for v$g$1.

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ConstrExpr.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pConstrExpr(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSelfInvocation(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("ConstrExpr", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pConstrBlock(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("ConstrExpr", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.ConstrBlock.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pConstrBlock(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psep(yyStart);
    if (yyResult.hasValue("{")) {

      yyResult = pSelfInvocation(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyResult = pSEMI(yyRepetition1);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {

            yyResult = pBlockStat(yyResult.index);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {
              Node v$el$1 = yyResult.semanticValue();

              yyRepetition1 = yyResult.index;
              yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
              continue;
            }
          }
          break;
        }
        { // Start scope for v$g$2.
          Pair<Node> v$g$2 = yyRepValue1.reverse();

          yyBase   = yyRepetition1;
          yyResult = psep(yyBase);
          if (yyResult.hasValue("}")) {

            yyValue = GNode.create("ConstrBlock", v$g$1, v$g$2);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          } else {
            yyError = yyError.select("'}' expected", yyBase);
          }
        } // End scope for v$g$2.
      }
    }

    // Done.
    yyError = yyError.select("constr block expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.SelfInvocation.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSelfInvocation(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pThisKey(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyResult = pArgumentExprs(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$2 = yyResult.semanticValue();

        yyRepetition1 = yyResult.index;
        yyRepValue1   = Pair.empty();
        while (true) {

          yyResult = pArgumentExprs(yyRepetition1);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
          break;
        }
        { // Start scope for v$g$3.
          Pair<Node> v$g$3 = yyRepValue1.reverse();

          yyValue = GNode.create("SelfInvocation", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyRepetition1, yyError);
        } // End scope for v$g$3.
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TopStatSeq.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTopStatSeq(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pTopStat(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pSEMI(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {

          yyResult = pTopStat(yyResult.index);
          yyError  = yyResult.select(yyError, yyRepetition1);
          if (yyResult.hasValue()) {
            Node v$el$1 = yyResult.semanticValue();

            yyRepetition1 = yyResult.index;
            yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
            continue;
          }
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyValue = GNode.create("TopStatSeq", v$g$1, v$g$2);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.TopStat.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pTopStat(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.fTopStat)
      yyColumn.chunk6.fTopStat = pTopStat$1(yyStart);
    return yyColumn.chunk6.fTopStat;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.ParserScala.TopStat. */
  private Result pTopStat$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pImport(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("TopStat", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pPackaging(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$2 = yyResult.semanticValue();

      yyValue = GNode.create("TopStat", v$g$2);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 3.

    yyResult = p$$Shared1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Pair<Node> v$g$3 = yyResult.semanticValue();

      yyResult = p$$Shared3(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Pair<Node> v$g$4 = yyResult.semanticValue();

        yyResult = pTmplDef(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$5 = yyResult.semanticValue();

          yyValue = GNode.create("TopStat", v$g$3, v$g$4, v$g$5);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Alternative 4.

    yyValue = GNode.create("TopStat", false);
    yyValue.setLocation(location(yyStart));

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Packaging.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPackaging(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    int        yyOption1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("package")) {

      yyResult = pQualId(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;

        yyResult = pN(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {

          yyOption1  = yyResult.index;
        }

        yyBase   = yyOption1;
        yyResult = psep(yyBase);
        if (yyResult.hasValue("{")) {

          yyResult = pTopStatSeq(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {
            Node v$g$2 = yyResult.semanticValue();

            yyBase   = yyResult.index;
            yyResult = psep(yyBase);
            if (yyResult.hasValue("}")) {

              yyValue = GNode.create("Packaging", v$g$1, v$g$2);
              yyValue.setLocation(location(yyStart));

              return yyResult.createValue(yyValue, yyError);
            } else {
              yyError = yyError.select("'}' expected", yyBase);
            }
          }
        } else {
          yyError = yyError.select("'{' expected", yyBase);
        }
      }
    }

    // Done.
    yyError = yyError.select("packaging expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.Package.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pPackage(final int yyStart) throws IOException {
    Result     yyResult;
    Result     yyPredResult;
    boolean    yyPredMatched;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("package")) {

      yyResult = pQualId(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        Node v$g$1 = yyResult.semanticValue();

        yyResult = pSEMI(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyPredMatched = false;

          yyPredResult = psep(yyResult.index);
          if (yyPredResult.hasValue("{")) {

            yyPredMatched = true;
          }

          if (! yyPredMatched) {

            yyValue = GNode.create("Package", v$g$1);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          } else {
            yyError = yyError.select("package expected", yyStart);
          }
        }
      }
    }

    // Done.
    yyError = yyError.select("package expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.CompilationUnit.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  public Result pCompilationUnit(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyOption1;
    Node       yyOpValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSKIP_N(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;
      yyOpValue1 = null;

      yyResult = pPackage(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {
        Node v$el$1 = yyResult.semanticValue();

        yyOption1  = yyResult.index;
        yyOpValue1 = v$el$1;
      }
      { // Start scope for v$g$1.
        Node v$g$1 = yyOpValue1;

        yyResult = pTopStatSeq(yyOption1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$2 = yyResult.semanticValue();

          yyResult = pEOF(yyResult.index);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {

            yyValue = GNode.create("CompilationUnit", v$g$1, v$g$2);
            yyValue.setLocation(location(yyStart));

            return yyResult.createValue(yyValue, yyError);
          }
        }
      } // End scope for v$g$1.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Character.letter.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pletter(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('A' <= yyC) && (yyC <= 'Z')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 2.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('a' <= yyC) && (yyC <= 'z')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("letter expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Character.decimalNumeral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pdecimalNumeral(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    int        yyRepetition1;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '0':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        {
          yyRepetition1 = yyIndex;
          while (true) {

            yyC = character(yyRepetition1);
            if (-1 != yyC) {
              yyIndex = yyRepetition1 + 1;

              switch (yyC) {
              case '0':
              case '1':
              case '2':
              case '3':
              case '4':
              case '5':
              case '6':
              case '7':
              case '8':
              case '9':
                {
                  yyRepetition1 = yyIndex;
                  continue;
                }

              default:
                /* No match. */
              }
            }
            break;
          }

          yyValue = null;

          return new SemanticValue(yyValue, yyRepetition1, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("decimal numeral expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Character.hexNumeral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result phexNumeral(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    int        yyRepetition1;
    boolean    yyRepeated1;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('0' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if (-1 != yyC) {
        yyIndex = yyIndex + 1;

        switch (yyC) {
        case 'X':
        case 'x':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = false;
            while (true) {

              yyC = character(yyRepetition1);
              if (-1 != yyC) {
                yyIndex = yyRepetition1 + 1;

                switch (yyC) {
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                case 'A':
                case 'B':
                case 'C':
                case 'D':
                case 'E':
                case 'F':
                case 'a':
                case 'b':
                case 'c':
                case 'd':
                case 'e':
                case 'f':
                  {
                    yyRepetition1 = yyIndex;
                    yyRepeated1   = true;
                    continue;
                  }

                default:
                  /* No match. */
                }
              }
              break;
            }

            if (yyRepeated1) {

              yyValue = null;

              return new SemanticValue(yyValue, yyRepetition1, yyError);
            }
          }
          break;

        default:
          /* No match. */
        }
      }
    }

    // Done.
    yyError = yyError.select("hex numeral expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Character.octalNumeral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result poctalNumeral(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    int        yyRepetition1;
    boolean    yyRepeated1;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('0' == yyC) {
      yyIndex = yyStart + 1;

      yyRepetition1 = yyIndex;
      yyRepeated1   = false;
      while (true) {

        yyC = character(yyRepetition1);
        if (-1 != yyC) {
          yyIndex = yyRepetition1 + 1;

          switch (yyC) {
          case '0':
          case '1':
          case '2':
          case '3':
          case '4':
          case '5':
          case '6':
          case '7':
            {
              yyRepetition1 = yyIndex;
              yyRepeated1   = true;
              continue;
            }

          default:
            /* No match. */
          }
        }
        break;
      }

      if (yyRepeated1) {

        yyValue = null;

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      }
    }

    // Done.
    yyError = yyError.select("octal numeral expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Character.characterChar.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pcharacterChar(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    boolean    yyPredMatched;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if ('\\' == yyC) {

        final int yyChoice1 = yyIndex;

        // Nested alternative 1.

        yyC = character(yyChoice1);
        if (-1 != yyC) {
          yyIndex = yyChoice1 + 1;

          switch (yyC) {
          case '\"':
          case '\'':
          case '\\':
          case 'b':
          case 'f':
          case 'n':
          case 'r':
          case 't':
            {
              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }

          case 'u':
            {
              yyC = character(yyIndex);
              if (-1 != yyC) {
                yyIndex = yyIndex + 1;

                switch (yyC) {
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                case 'A':
                case 'B':
                case 'C':
                case 'D':
                case 'E':
                case 'F':
                case 'a':
                case 'b':
                case 'c':
                case 'd':
                case 'e':
                case 'f':
                  {
                    yyC = character(yyIndex);
                    if (-1 != yyC) {
                      yyIndex = yyIndex + 1;

                      switch (yyC) {
                      case '0':
                      case '1':
                      case '2':
                      case '3':
                      case '4':
                      case '5':
                      case '6':
                      case '7':
                      case '8':
                      case '9':
                      case 'A':
                      case 'B':
                      case 'C':
                      case 'D':
                      case 'E':
                      case 'F':
                      case 'a':
                      case 'b':
                      case 'c':
                      case 'd':
                      case 'e':
                      case 'f':
                        {
                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;

                            switch (yyC) {
                            case '0':
                            case '1':
                            case '2':
                            case '3':
                            case '4':
                            case '5':
                            case '6':
                            case '7':
                            case '8':
                            case '9':
                            case 'A':
                            case 'B':
                            case 'C':
                            case 'D':
                            case 'E':
                            case 'F':
                            case 'a':
                            case 'b':
                            case 'c':
                            case 'd':
                            case 'e':
                            case 'f':
                              {
                                yyC = character(yyIndex);
                                if (-1 != yyC) {
                                  yyIndex = yyIndex + 1;

                                  switch (yyC) {
                                  case '0':
                                  case '1':
                                  case '2':
                                  case '3':
                                  case '4':
                                  case '5':
                                  case '6':
                                  case '7':
                                  case '8':
                                  case '9':
                                  case 'A':
                                  case 'B':
                                  case 'C':
                                  case 'D':
                                  case 'E':
                                  case 'F':
                                  case 'a':
                                  case 'b':
                                  case 'c':
                                  case 'd':
                                  case 'e':
                                  case 'f':
                                    {
                                      yyValue = null;

                                      return new SemanticValue(yyValue, yyIndex, yyError);
                                    }

                                  default:
                                    /* No match. */
                                  }
                                }
                              }
                              break;

                            default:
                              /* No match. */
                            }
                          }
                        }
                        break;

                      default:
                        /* No match. */
                      }
                    }
                  }
                  break;

                default:
                  /* No match. */
                }
              }
            }
            break;

          default:
            /* No match. */
          }
        }

        // Nested alternative 2.
        { // Start scope for nested choice.

          final int yyChoice2 = yyChoice1;

          // Nested alternative 1.

          yyC = character(yyChoice2);
          if (-1 != yyC) {
            yyIndex = yyChoice2 + 1;

            switch (yyC) {
            case '0':
            case '1':
            case '2':
            case '3':
              {
                yyC = character(yyIndex);
                if (-1 != yyC) {
                  yyIndex = yyIndex + 1;

                  switch (yyC) {
                  case '0':
                  case '1':
                  case '2':
                  case '3':
                  case '4':
                  case '5':
                  case '6':
                  case '7':
                    {
                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;

                        switch (yyC) {
                        case '0':
                        case '1':
                        case '2':
                        case '3':
                        case '4':
                        case '5':
                        case '6':
                        case '7':
                          {
                            yyValue = null;

                            return new SemanticValue(yyValue, yyIndex, yyError);
                          }

                        default:
                          /* No match. */
                        }
                      }
                    }
                    break;

                  default:
                    /* No match. */
                  }
                }
              }
              break;

            default:
              /* No match. */
            }
          }

          // Nested alternative 2.

          yyC = character(yyChoice2);
          if (-1 != yyC) {
            yyIndex = yyChoice2 + 1;

            switch (yyC) {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
              {
                final int yyChoice3 = yyIndex;

                // Nested alternative 1.

                yyC = character(yyChoice3);
                if (-1 != yyC) {
                  yyIndex = yyChoice3 + 1;

                  switch (yyC) {
                  case '0':
                  case '1':
                  case '2':
                  case '3':
                  case '4':
                  case '5':
                  case '6':
                  case '7':
                    {
                      yyValue = null;

                      return new SemanticValue(yyValue, yyIndex, yyError);
                    }

                  default:
                    /* No match. */
                  }
                }

                // Nested alternative 2.

                yyValue = null;

                return new SemanticValue(yyValue, yyChoice3, yyError);
              }

            default:
              /* No match. */
            }
          }
        } // End scope for nested choice.
      }
    }

    // Alternative 2.

    yyPredMatched = false;

    yyC = character(yyStart);
    if (-1 != yyC) {
      if (('\'' == yyC) ||
          ('\\' == yyC)) {

        yyPredMatched = true;
      }
    }

    if (! yyPredMatched) {

      yyC = character(yyStart);
      if (-1 != yyC) {
        yyIndex = yyStart + 1;
        if ((' ' <= yyC) && (yyC <= '\uffff')) {

          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }
      }
    } else {
      yyError = yyError.select("character char expected", yyStart);
    }

    // Done.
    yyError = yyError.select("character char expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Character.stringChar.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pstringChar(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    boolean    yyPredMatched;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if ('\\' == yyC) {

        final int yyChoice1 = yyIndex;

        // Nested alternative 1.

        yyC = character(yyChoice1);
        if (-1 != yyC) {
          yyIndex = yyChoice1 + 1;

          switch (yyC) {
          case '\"':
          case '\'':
          case '\\':
          case 'b':
          case 'f':
          case 'n':
          case 'r':
          case 't':
            {
              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }

          case 'u':
            {
              yyC = character(yyIndex);
              if (-1 != yyC) {
                yyIndex = yyIndex + 1;

                switch (yyC) {
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                case 'A':
                case 'B':
                case 'C':
                case 'D':
                case 'E':
                case 'F':
                case 'a':
                case 'b':
                case 'c':
                case 'd':
                case 'e':
                case 'f':
                  {
                    yyC = character(yyIndex);
                    if (-1 != yyC) {
                      yyIndex = yyIndex + 1;

                      switch (yyC) {
                      case '0':
                      case '1':
                      case '2':
                      case '3':
                      case '4':
                      case '5':
                      case '6':
                      case '7':
                      case '8':
                      case '9':
                      case 'A':
                      case 'B':
                      case 'C':
                      case 'D':
                      case 'E':
                      case 'F':
                      case 'a':
                      case 'b':
                      case 'c':
                      case 'd':
                      case 'e':
                      case 'f':
                        {
                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;

                            switch (yyC) {
                            case '0':
                            case '1':
                            case '2':
                            case '3':
                            case '4':
                            case '5':
                            case '6':
                            case '7':
                            case '8':
                            case '9':
                            case 'A':
                            case 'B':
                            case 'C':
                            case 'D':
                            case 'E':
                            case 'F':
                            case 'a':
                            case 'b':
                            case 'c':
                            case 'd':
                            case 'e':
                            case 'f':
                              {
                                yyC = character(yyIndex);
                                if (-1 != yyC) {
                                  yyIndex = yyIndex + 1;

                                  switch (yyC) {
                                  case '0':
                                  case '1':
                                  case '2':
                                  case '3':
                                  case '4':
                                  case '5':
                                  case '6':
                                  case '7':
                                  case '8':
                                  case '9':
                                  case 'A':
                                  case 'B':
                                  case 'C':
                                  case 'D':
                                  case 'E':
                                  case 'F':
                                  case 'a':
                                  case 'b':
                                  case 'c':
                                  case 'd':
                                  case 'e':
                                  case 'f':
                                    {
                                      yyValue = null;

                                      return new SemanticValue(yyValue, yyIndex, yyError);
                                    }

                                  default:
                                    /* No match. */
                                  }
                                }
                              }
                              break;

                            default:
                              /* No match. */
                            }
                          }
                        }
                        break;

                      default:
                        /* No match. */
                      }
                    }
                  }
                  break;

                default:
                  /* No match. */
                }
              }
            }
            break;

          default:
            /* No match. */
          }
        }

        // Nested alternative 2.
        { // Start scope for nested choice.

          final int yyChoice2 = yyChoice1;

          // Nested alternative 1.

          yyC = character(yyChoice2);
          if (-1 != yyC) {
            yyIndex = yyChoice2 + 1;

            switch (yyC) {
            case '0':
            case '1':
            case '2':
            case '3':
              {
                yyC = character(yyIndex);
                if (-1 != yyC) {
                  yyIndex = yyIndex + 1;

                  switch (yyC) {
                  case '0':
                  case '1':
                  case '2':
                  case '3':
                  case '4':
                  case '5':
                  case '6':
                  case '7':
                    {
                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;

                        switch (yyC) {
                        case '0':
                        case '1':
                        case '2':
                        case '3':
                        case '4':
                        case '5':
                        case '6':
                        case '7':
                          {
                            yyValue = null;

                            return new SemanticValue(yyValue, yyIndex, yyError);
                          }

                        default:
                          /* No match. */
                        }
                      }
                    }
                    break;

                  default:
                    /* No match. */
                  }
                }
              }
              break;

            default:
              /* No match. */
            }
          }

          // Nested alternative 2.

          yyC = character(yyChoice2);
          if (-1 != yyC) {
            yyIndex = yyChoice2 + 1;

            switch (yyC) {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
              {
                final int yyChoice3 = yyIndex;

                // Nested alternative 1.

                yyC = character(yyChoice3);
                if (-1 != yyC) {
                  yyIndex = yyChoice3 + 1;

                  switch (yyC) {
                  case '0':
                  case '1':
                  case '2':
                  case '3':
                  case '4':
                  case '5':
                  case '6':
                  case '7':
                    {
                      yyValue = null;

                      return new SemanticValue(yyValue, yyIndex, yyError);
                    }

                  default:
                    /* No match. */
                  }
                }

                // Nested alternative 2.

                yyValue = null;

                return new SemanticValue(yyValue, yyChoice3, yyError);
              }

            default:
              /* No match. */
            }
          }
        } // End scope for nested choice.
      }
    }

    // Alternative 2.

    yyPredMatched = false;

    yyC = character(yyStart);
    if (-1 != yyC) {
      if (('\"' == yyC) ||
          ('\\' == yyC)) {

        yyPredMatched = true;
      }
    }

    if (! yyPredMatched) {

      yyC = character(yyStart);
      if (-1 != yyC) {
        yyIndex = yyStart + 1;
        if ((' ' <= yyC) && (yyC <= '\uffff')) {

          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }
      }
    } else {
      yyError = yyError.select("string char expected", yyStart);
    }

    // Done.
    yyError = yyError.select("string char expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Identifier.Id.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pId(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSKIP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = pidentifier(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        String v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("Id", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Identifier.VarId.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pVarId(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSKIP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = pvarIdentifier(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        String v$g$1 = yyResult.semanticValue();

        yyValue = GNode.create("VarId", v$g$1);
        yyValue.setLocation(location(yyStart));

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Identifier.op.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pop(final int yyStart) throws IOException {
    Result     yyResult;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSKIP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = popIdentifier(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Identifier.opIdentifier.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result popIdentifier(final int yyStart) throws IOException {
    Result     yyResult;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = popIdentifier$$Plus1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v = yyResult.semanticValue();

      if (!contains(SCALA_KEYWORDS, toText(v))) {

        yyValue = difference(yyStart, yyResult.index);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("op identifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.opIdentifier$$Plus1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result popIdentifier$$Plus1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    boolean    yyRepeated1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepeated1   = false;
    while (true) {

      yyResult = popchar(yyRepetition1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        yyRepeated1   = true;
        continue;
      }
      break;
    }

    if (yyRepeated1) {

      yyValue = difference(yyStart, yyRepetition1);

      return new SemanticValue(yyValue, yyRepetition1, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Identifier.varIdentifier.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pvarIdentifier(final int yyStart) throws IOException {
    Result     yyResult;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pvarIdentifier$$Choice1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v = yyResult.semanticValue();

      if (!contains(SCALA_KEYWORDS, toText(v))) {

        yyValue = difference(yyStart, yyResult.index);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("var identifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.varIdentifier$$Choice2.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pvarIdentifier$$Choice2(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('a' <= yyC) && (yyC <= 'z')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 2.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if ((('a' <= yyC) && (yyC <= 'z')) ||
          ('\u00aa' == yyC) ||
          ('\u00b5' == yyC) ||
          ('\u00ba' == yyC) ||
          (('\u00df' <= yyC) && (yyC <= '\u00ff')) ||
          ('\u0101' == yyC) ||
          ('\u0103' == yyC) ||
          ('\u0105' == yyC) ||
          ('\u0107' == yyC) ||
          ('\u0109' == yyC) ||
          ('\u010b' == yyC) ||
          ('\u010d' == yyC) ||
          ('\u010f' == yyC) ||
          ('\u0111' == yyC) ||
          ('\u0113' == yyC) ||
          ('\u0115' == yyC) ||
          ('\u0117' == yyC) ||
          ('\u0119' == yyC) ||
          ('\u011b' == yyC) ||
          ('\u011d' == yyC) ||
          ('\u011f' == yyC) ||
          ('\u0121' == yyC) ||
          ('\u0123' == yyC) ||
          ('\u0125' == yyC) ||
          ('\u0127' == yyC) ||
          ('\u0129' == yyC) ||
          ('\u012b' == yyC) ||
          ('\u012d' == yyC) ||
          ('\u012f' == yyC) ||
          ('\u0131' == yyC) ||
          ('\u0133' == yyC) ||
          ('\u0135' == yyC) ||
          (('\u0137' <= yyC) && (yyC <= '\u0138')) ||
          ('\u013a' == yyC) ||
          ('\u013c' == yyC) ||
          ('\u013e' == yyC) ||
          ('\u0140' == yyC) ||
          ('\u0142' == yyC) ||
          ('\u0144' == yyC) ||
          ('\u0146' == yyC) ||
          (('\u0148' <= yyC) && (yyC <= '\u0149')) ||
          ('\u014b' == yyC) ||
          ('\u014d' == yyC) ||
          ('\u014f' == yyC) ||
          ('\u0151' == yyC) ||
          ('\u0153' == yyC) ||
          ('\u0155' == yyC) ||
          ('\u0157' == yyC) ||
          ('\u0159' == yyC) ||
          ('\u015b' == yyC) ||
          ('\u015d' == yyC) ||
          ('\u015f' == yyC) ||
          ('\u0161' == yyC) ||
          ('\u0163' == yyC) ||
          ('\u0165' == yyC) ||
          ('\u0167' == yyC) ||
          ('\u0169' == yyC) ||
          ('\u016b' == yyC) ||
          ('\u016d' == yyC) ||
          ('\u016f' == yyC) ||
          ('\u0171' == yyC) ||
          ('\u0173' == yyC) ||
          ('\u0175' == yyC) ||
          ('\u0177' == yyC) ||
          ('\u017a' == yyC) ||
          ('\u017c' == yyC) ||
          (('\u017e' <= yyC) && (yyC <= '\u0180')) ||
          ('\u0183' == yyC) ||
          ('\u0185' == yyC) ||
          ('\u0188' == yyC) ||
          (('\u018c' <= yyC) && (yyC <= '\u018d')) ||
          ('\u0192' == yyC) ||
          ('\u0195' == yyC) ||
          (('\u0199' <= yyC) && (yyC <= '\u019b')) ||
          ('\u019e' == yyC) ||
          ('\u01a1' == yyC) ||
          ('\u01a3' == yyC) ||
          ('\u01a5' == yyC) ||
          ('\u01a8' == yyC) ||
          (('\u01aa' <= yyC) && (yyC <= '\u01ab')) ||
          ('\u01ad' == yyC) ||
          ('\u01b0' == yyC) ||
          ('\u01b4' == yyC) ||
          ('\u01b6' == yyC) ||
          (('\u01b9' <= yyC) && (yyC <= '\u01ba')) ||
          (('\u01bd' <= yyC) && (yyC <= '\u01bf')) ||
          ('\u01c6' == yyC) ||
          ('\u01c9' == yyC) ||
          ('\u01cc' == yyC) ||
          ('\u01ce' == yyC) ||
          ('\u01d0' == yyC) ||
          ('\u01d2' == yyC) ||
          ('\u01d4' == yyC) ||
          ('\u01d6' == yyC) ||
          ('\u01d8' == yyC) ||
          ('\u01da' == yyC) ||
          (('\u01dc' <= yyC) && (yyC <= '\u01dd')) ||
          ('\u01df' == yyC) ||
          ('\u01e1' == yyC) ||
          ('\u01e3' == yyC) ||
          ('\u01e5' == yyC) ||
          ('\u01e7' == yyC) ||
          ('\u01e9' == yyC) ||
          ('\u01eb' == yyC) ||
          ('\u01ed' == yyC) ||
          (('\u01ef' <= yyC) && (yyC <= '\u01f0')) ||
          ('\u01f3' == yyC) ||
          ('\u01f5' == yyC) ||
          ('\u01f9' == yyC) ||
          ('\u01fb' == yyC) ||
          ('\u01fd' == yyC) ||
          ('\u01ff' == yyC) ||
          ('\u0201' == yyC) ||
          ('\u0203' == yyC) ||
          ('\u0205' == yyC) ||
          ('\u0207' == yyC) ||
          ('\u0209' == yyC) ||
          ('\u020b' == yyC) ||
          ('\u020d' == yyC) ||
          ('\u020f' == yyC) ||
          ('\u0211' == yyC) ||
          ('\u0213' == yyC) ||
          ('\u0215' == yyC) ||
          ('\u0217' == yyC) ||
          ('\u0219' == yyC) ||
          ('\u021b' == yyC) ||
          ('\u021d' == yyC) ||
          ('\u021f' == yyC) ||
          ('\u0221' == yyC) ||
          ('\u0223' == yyC) ||
          ('\u0225' == yyC) ||
          ('\u0227' == yyC) ||
          ('\u0229' == yyC) ||
          ('\u022b' == yyC) ||
          ('\u022d' == yyC) ||
          ('\u022f' == yyC) ||
          ('\u0231' == yyC) ||
          (('\u0233' <= yyC) && (yyC <= '\u0239')) ||
          ('\u023c' == yyC) ||
          (('\u023f' <= yyC) && (yyC <= '\u0240')) ||
          ('\u0242' == yyC) ||
          ('\u0247' == yyC) ||
          ('\u0249' == yyC) ||
          ('\u024b' == yyC) ||
          ('\u024d' == yyC) ||
          (('\u024f' <= yyC) && (yyC <= '\u02af')) ||
          ('\u0371' == yyC) ||
          ('\u0373' == yyC) ||
          ('\u0377' == yyC) ||
          (('\u037b' <= yyC) && (yyC <= '\u037d')) ||
          ('\u0390' == yyC) ||
          (('\u03ac' <= yyC) && (yyC <= '\u03ce')) ||
          (('\u03d0' <= yyC) && (yyC <= '\u03d1')) ||
          (('\u03d5' <= yyC) && (yyC <= '\u03d9')) ||
          ('\u03db' == yyC) ||
          ('\u03dd' == yyC) ||
          ('\u03df' == yyC) ||
          ('\u03e1' == yyC) ||
          ('\u03e3' == yyC) ||
          ('\u03e5' == yyC) ||
          ('\u03e7' == yyC) ||
          ('\u03e9' == yyC) ||
          ('\u03eb' == yyC) ||
          ('\u03ed' == yyC) ||
          (('\u03ef' <= yyC) && (yyC <= '\u03f3')) ||
          ('\u03f5' == yyC) ||
          ('\u03f8' == yyC) ||
          (('\u03fb' <= yyC) && (yyC <= '\u03fc')) ||
          (('\u0430' <= yyC) && (yyC <= '\u045f')) ||
          ('\u0461' == yyC) ||
          ('\u0463' == yyC) ||
          ('\u0465' == yyC) ||
          ('\u0467' == yyC) ||
          ('\u0469' == yyC) ||
          ('\u046b' == yyC) ||
          ('\u046d' == yyC) ||
          ('\u046f' == yyC) ||
          ('\u0471' == yyC) ||
          ('\u0473' == yyC) ||
          ('\u0475' == yyC) ||
          ('\u0477' == yyC) ||
          ('\u0479' == yyC) ||
          ('\u047b' == yyC) ||
          ('\u047d' == yyC) ||
          ('\u047f' == yyC) ||
          ('\u0481' == yyC) ||
          ('\u048b' == yyC) ||
          ('\u048d' == yyC) ||
          ('\u048f' == yyC) ||
          ('\u0491' == yyC) ||
          ('\u0493' == yyC) ||
          ('\u0495' == yyC) ||
          ('\u0497' == yyC) ||
          ('\u0499' == yyC) ||
          ('\u049b' == yyC) ||
          ('\u049d' == yyC) ||
          ('\u049f' == yyC) ||
          ('\u04a1' == yyC) ||
          ('\u04a3' == yyC) ||
          ('\u04a5' == yyC) ||
          ('\u04a7' == yyC) ||
          ('\u04a9' == yyC) ||
          ('\u04ab' == yyC) ||
          ('\u04ad' == yyC) ||
          ('\u04af' == yyC) ||
          ('\u04b1' == yyC) ||
          ('\u04b3' == yyC) ||
          ('\u04b5' == yyC) ||
          ('\u04b7' == yyC) ||
          ('\u04b9' == yyC) ||
          ('\u04bb' == yyC) ||
          ('\u04bd' == yyC) ||
          ('\u04bf' == yyC) ||
          ('\u04c2' == yyC) ||
          ('\u04c4' == yyC) ||
          ('\u04c6' == yyC) ||
          ('\u04c8' == yyC) ||
          ('\u04ca' == yyC) ||
          ('\u04cc' == yyC) ||
          (('\u04ce' <= yyC) && (yyC <= '\u04cf')) ||
          ('\u04d1' == yyC) ||
          ('\u04d3' == yyC) ||
          ('\u04d5' == yyC) ||
          ('\u04d7' == yyC) ||
          ('\u04d9' == yyC) ||
          ('\u04db' == yyC) ||
          ('\u04dd' == yyC) ||
          ('\u04df' == yyC) ||
          ('\u04e1' == yyC) ||
          ('\u04e3' == yyC) ||
          ('\u04e5' == yyC) ||
          ('\u04e7' == yyC) ||
          ('\u04e9' == yyC) ||
          ('\u04eb' == yyC) ||
          ('\u04ed' == yyC) ||
          ('\u04ef' == yyC) ||
          ('\u04f1' == yyC) ||
          ('\u04f3' == yyC) ||
          ('\u04f5' == yyC) ||
          ('\u04f7' == yyC) ||
          ('\u04f9' == yyC) ||
          ('\u04fb' == yyC) ||
          ('\u04fd' == yyC) ||
          ('\u04ff' == yyC) ||
          ('\u0501' == yyC) ||
          ('\u0503' == yyC) ||
          ('\u0505' == yyC) ||
          ('\u0507' == yyC) ||
          ('\u0509' == yyC) ||
          ('\u050b' == yyC) ||
          ('\u050d' == yyC) ||
          ('\u050f' == yyC) ||
          ('\u0511' == yyC) ||
          ('\u0513' == yyC) ||
          ('\u0515' == yyC) ||
          ('\u0517' == yyC) ||
          ('\u0519' == yyC) ||
          ('\u051b' == yyC) ||
          ('\u051d' == yyC) ||
          ('\u051f' == yyC) ||
          ('\u0521' == yyC) ||
          ('\u0523' == yyC) ||
          (('\u0561' <= yyC) && (yyC <= '\u0587')) ||
          (('\u1d00' <= yyC) && (yyC <= '\u1d2b')) ||
          (('\u1d62' <= yyC) && (yyC <= '\u1d77')) ||
          (('\u1d79' <= yyC) && (yyC <= '\u1d9a')) ||
          ('\u1e01' == yyC) ||
          ('\u1e03' == yyC) ||
          ('\u1e05' == yyC) ||
          ('\u1e07' == yyC) ||
          ('\u1e09' == yyC) ||
          ('\u1e0b' == yyC) ||
          ('\u1e0d' == yyC) ||
          ('\u1e0f' == yyC) ||
          ('\u1e11' == yyC) ||
          ('\u1e13' == yyC) ||
          ('\u1e15' == yyC) ||
          ('\u1e17' == yyC) ||
          ('\u1e19' == yyC) ||
          ('\u1e1b' == yyC) ||
          ('\u1e1d' == yyC) ||
          ('\u1e1f' == yyC) ||
          ('\u1e21' == yyC) ||
          ('\u1e23' == yyC) ||
          ('\u1e25' == yyC) ||
          ('\u1e27' == yyC) ||
          ('\u1e29' == yyC) ||
          ('\u1e2b' == yyC) ||
          ('\u1e2d' == yyC) ||
          ('\u1e2f' == yyC) ||
          ('\u1e31' == yyC) ||
          ('\u1e33' == yyC) ||
          ('\u1e35' == yyC) ||
          ('\u1e37' == yyC) ||
          ('\u1e39' == yyC) ||
          ('\u1e3b' == yyC) ||
          ('\u1e3d' == yyC) ||
          ('\u1e3f' == yyC) ||
          ('\u1e41' == yyC) ||
          ('\u1e43' == yyC) ||
          ('\u1e45' == yyC) ||
          ('\u1e47' == yyC) ||
          ('\u1e49' == yyC) ||
          ('\u1e4b' == yyC) ||
          ('\u1e4d' == yyC) ||
          ('\u1e4f' == yyC) ||
          ('\u1e51' == yyC) ||
          ('\u1e53' == yyC) ||
          ('\u1e55' == yyC) ||
          ('\u1e57' == yyC) ||
          ('\u1e59' == yyC) ||
          ('\u1e5b' == yyC) ||
          ('\u1e5d' == yyC) ||
          ('\u1e5f' == yyC) ||
          ('\u1e61' == yyC) ||
          ('\u1e63' == yyC) ||
          ('\u1e65' == yyC) ||
          ('\u1e67' == yyC) ||
          ('\u1e69' == yyC) ||
          ('\u1e6b' == yyC) ||
          ('\u1e6d' == yyC) ||
          ('\u1e6f' == yyC) ||
          ('\u1e71' == yyC) ||
          ('\u1e73' == yyC) ||
          ('\u1e75' == yyC) ||
          ('\u1e77' == yyC) ||
          ('\u1e79' == yyC) ||
          ('\u1e7b' == yyC) ||
          ('\u1e7d' == yyC) ||
          ('\u1e7f' == yyC) ||
          ('\u1e81' == yyC) ||
          ('\u1e83' == yyC) ||
          ('\u1e85' == yyC) ||
          ('\u1e87' == yyC) ||
          ('\u1e89' == yyC) ||
          ('\u1e8b' == yyC) ||
          ('\u1e8d' == yyC) ||
          ('\u1e8f' == yyC) ||
          ('\u1e91' == yyC) ||
          ('\u1e93' == yyC) ||
          (('\u1e95' <= yyC) && (yyC <= '\u1e9d')) ||
          ('\u1e9f' == yyC) ||
          ('\u1ea1' == yyC) ||
          ('\u1ea3' == yyC) ||
          ('\u1ea5' == yyC) ||
          ('\u1ea7' == yyC) ||
          ('\u1ea9' == yyC) ||
          ('\u1eab' == yyC) ||
          ('\u1ead' == yyC) ||
          ('\u1eaf' == yyC) ||
          ('\u1eb1' == yyC) ||
          ('\u1eb3' == yyC) ||
          ('\u1eb5' == yyC) ||
          ('\u1eb7' == yyC) ||
          ('\u1eb9' == yyC) ||
          ('\u1ebb' == yyC) ||
          ('\u1ebd' == yyC) ||
          ('\u1ebf' == yyC) ||
          ('\u1ec1' == yyC) ||
          ('\u1ec3' == yyC) ||
          ('\u1ec5' == yyC) ||
          ('\u1ec7' == yyC) ||
          ('\u1ec9' == yyC) ||
          ('\u1ecb' == yyC) ||
          ('\u1ecd' == yyC) ||
          ('\u1ecf' == yyC) ||
          ('\u1ed1' == yyC) ||
          ('\u1ed3' == yyC) ||
          ('\u1ed5' == yyC) ||
          ('\u1ed7' == yyC) ||
          ('\u1ed9' == yyC) ||
          ('\u1edb' == yyC) ||
          ('\u1edd' == yyC) ||
          ('\u1edf' == yyC) ||
          ('\u1ee1' == yyC) ||
          ('\u1ee3' == yyC) ||
          ('\u1ee5' == yyC) ||
          ('\u1ee7' == yyC) ||
          ('\u1ee9' == yyC) ||
          ('\u1eeb' == yyC) ||
          ('\u1eed' == yyC) ||
          ('\u1eef' == yyC) ||
          ('\u1ef1' == yyC) ||
          ('\u1ef3' == yyC) ||
          ('\u1ef5' == yyC) ||
          ('\u1ef7' == yyC) ||
          ('\u1ef9' == yyC) ||
          ('\u1efb' == yyC) ||
          ('\u1efd' == yyC) ||
          (('\u1eff' <= yyC) && (yyC <= '\u1f07')) ||
          (('\u1f10' <= yyC) && (yyC <= '\u1f15')) ||
          (('\u1f20' <= yyC) && (yyC <= '\u1f27')) ||
          (('\u1f30' <= yyC) && (yyC <= '\u1f37')) ||
          (('\u1f40' <= yyC) && (yyC <= '\u1f45')) ||
          (('\u1f50' <= yyC) && (yyC <= '\u1f57')) ||
          (('\u1f60' <= yyC) && (yyC <= '\u1f67')) ||
          (('\u1f70' <= yyC) && (yyC <= '\u1f7d')) ||
          (('\u1f80' <= yyC) && (yyC <= '\u1f87')) ||
          (('\u1f90' <= yyC) && (yyC <= '\u1f97')) ||
          (('\u1fa0' <= yyC) && (yyC <= '\u1fa7')) ||
          (('\u1fb0' <= yyC) && (yyC <= '\u1fb7')) ||
          ('\u1fbe' == yyC) ||
          (('\u1fc2' <= yyC) && (yyC <= '\u1fc4')) ||
          (('\u1fc6' <= yyC) && (yyC <= '\u1fc7')) ||
          (('\u1fd0' <= yyC) && (yyC <= '\u1fd3')) ||
          (('\u1fd6' <= yyC) && (yyC <= '\u1fd7')) ||
          (('\u1fe0' <= yyC) && (yyC <= '\u1fe7')) ||
          (('\u1ff2' <= yyC) && (yyC <= '\u1ff4')) ||
          (('\u1ff6' <= yyC) && (yyC <= '\u1ff7')) ||
          ('\u2071' == yyC) ||
          ('\u207f' == yyC) ||
          ('\u210a' == yyC) ||
          (('\u210e' <= yyC) && (yyC <= '\u210f')) ||
          ('\u2113' == yyC) ||
          ('\u212f' == yyC) ||
          ('\u2134' == yyC) ||
          ('\u2139' == yyC) ||
          (('\u213c' <= yyC) && (yyC <= '\u213d')) ||
          (('\u2146' <= yyC) && (yyC <= '\u2149')) ||
          ('\u214e' == yyC) ||
          ('\u2184' == yyC) ||
          (('\u2c30' <= yyC) && (yyC <= '\u2c5e')) ||
          ('\u2c61' == yyC) ||
          (('\u2c65' <= yyC) && (yyC <= '\u2c66')) ||
          ('\u2c68' == yyC) ||
          ('\u2c6a' == yyC) ||
          ('\u2c6c' == yyC) ||
          ('\u2c71' == yyC) ||
          (('\u2c73' <= yyC) && (yyC <= '\u2c74')) ||
          (('\u2c76' <= yyC) && (yyC <= '\u2c7c')) ||
          ('\u2c81' == yyC) ||
          ('\u2c83' == yyC) ||
          ('\u2c85' == yyC) ||
          ('\u2c87' == yyC) ||
          ('\u2c89' == yyC) ||
          ('\u2c8b' == yyC) ||
          ('\u2c8d' == yyC) ||
          ('\u2c8f' == yyC) ||
          ('\u2c91' == yyC) ||
          ('\u2c93' == yyC) ||
          ('\u2c95' == yyC) ||
          ('\u2c97' == yyC) ||
          ('\u2c99' == yyC) ||
          ('\u2c9b' == yyC) ||
          ('\u2c9d' == yyC) ||
          ('\u2c9f' == yyC) ||
          ('\u2ca1' == yyC) ||
          ('\u2ca3' == yyC) ||
          ('\u2ca5' == yyC) ||
          ('\u2ca7' == yyC) ||
          ('\u2ca9' == yyC) ||
          ('\u2cab' == yyC) ||
          ('\u2cad' == yyC) ||
          ('\u2caf' == yyC) ||
          ('\u2cb1' == yyC) ||
          ('\u2cb3' == yyC) ||
          ('\u2cb5' == yyC) ||
          ('\u2cb7' == yyC) ||
          ('\u2cb9' == yyC) ||
          ('\u2cbb' == yyC) ||
          ('\u2cbd' == yyC) ||
          ('\u2cbf' == yyC) ||
          ('\u2cc1' == yyC) ||
          ('\u2cc3' == yyC) ||
          ('\u2cc5' == yyC) ||
          ('\u2cc7' == yyC) ||
          ('\u2cc9' == yyC) ||
          ('\u2ccb' == yyC) ||
          ('\u2ccd' == yyC) ||
          ('\u2ccf' == yyC) ||
          ('\u2cd1' == yyC) ||
          ('\u2cd3' == yyC) ||
          ('\u2cd5' == yyC) ||
          ('\u2cd7' == yyC) ||
          ('\u2cd9' == yyC) ||
          ('\u2cdb' == yyC) ||
          ('\u2cdd' == yyC) ||
          ('\u2cdf' == yyC) ||
          ('\u2ce1' == yyC) ||
          (('\u2ce3' <= yyC) && (yyC <= '\u2ce4')) ||
          (('\u2d00' <= yyC) && (yyC <= '\u2d25')) ||
          ('\ua641' == yyC) ||
          ('\ua643' == yyC) ||
          ('\ua645' == yyC) ||
          ('\ua647' == yyC) ||
          ('\ua649' == yyC) ||
          ('\ua64b' == yyC) ||
          ('\ua64d' == yyC) ||
          ('\ua64f' == yyC) ||
          ('\ua651' == yyC) ||
          ('\ua653' == yyC) ||
          ('\ua655' == yyC) ||
          ('\ua657' == yyC) ||
          ('\ua659' == yyC) ||
          ('\ua65b' == yyC) ||
          ('\ua65d' == yyC) ||
          ('\ua65f' == yyC) ||
          ('\ua663' == yyC) ||
          ('\ua665' == yyC) ||
          ('\ua667' == yyC) ||
          ('\ua669' == yyC) ||
          ('\ua66b' == yyC) ||
          ('\ua66d' == yyC) ||
          ('\ua681' == yyC) ||
          ('\ua683' == yyC) ||
          ('\ua685' == yyC) ||
          ('\ua687' == yyC) ||
          ('\ua689' == yyC) ||
          ('\ua68b' == yyC) ||
          ('\ua68d' == yyC) ||
          ('\ua68f' == yyC) ||
          ('\ua691' == yyC) ||
          ('\ua693' == yyC) ||
          ('\ua695' == yyC) ||
          ('\ua697' == yyC) ||
          ('\ua723' == yyC) ||
          ('\ua725' == yyC) ||
          ('\ua727' == yyC) ||
          ('\ua729' == yyC) ||
          ('\ua72b' == yyC) ||
          ('\ua72d' == yyC) ||
          (('\ua72f' <= yyC) && (yyC <= '\ua731')) ||
          ('\ua733' == yyC) ||
          ('\ua735' == yyC) ||
          ('\ua737' == yyC) ||
          ('\ua739' == yyC) ||
          ('\ua73b' == yyC) ||
          ('\ua73d' == yyC) ||
          ('\ua73f' == yyC) ||
          ('\ua741' == yyC) ||
          ('\ua743' == yyC) ||
          ('\ua745' == yyC) ||
          ('\ua747' == yyC) ||
          ('\ua749' == yyC) ||
          ('\ua74b' == yyC) ||
          ('\ua74d' == yyC) ||
          ('\ua74f' == yyC) ||
          ('\ua751' == yyC) ||
          ('\ua753' == yyC) ||
          ('\ua755' == yyC) ||
          ('\ua757' == yyC) ||
          ('\ua759' == yyC) ||
          ('\ua75b' == yyC) ||
          ('\ua75d' == yyC) ||
          ('\ua75f' == yyC) ||
          ('\ua761' == yyC) ||
          ('\ua763' == yyC) ||
          ('\ua765' == yyC) ||
          ('\ua767' == yyC) ||
          ('\ua769' == yyC) ||
          ('\ua76b' == yyC) ||
          ('\ua76d' == yyC) ||
          ('\ua76f' == yyC) ||
          (('\ua771' <= yyC) && (yyC <= '\ua778')) ||
          ('\ua77a' == yyC) ||
          ('\ua77c' == yyC) ||
          ('\ua77f' == yyC) ||
          ('\ua781' == yyC) ||
          ('\ua783' == yyC) ||
          ('\ua785' == yyC) ||
          ('\ua787' == yyC) ||
          ('\ua78c' == yyC) ||
          (('\ufb00' <= yyC) && (yyC <= '\ufb06')) ||
          (('\ufb13' <= yyC) && (yyC <= '\ufb17')) ||
          (('\uff41' <= yyC) && (yyC <= '\uff5a'))) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 3.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '\ud801':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if (('\udc28' <= yyC) && (yyC <= '\udc4f')) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      case '\ud835':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if ((('\udc1a' <= yyC) && (yyC <= '\udc33')) ||
                (('\udc4e' <= yyC) && (yyC <= '\udc54')) ||
                (('\udc56' <= yyC) && (yyC <= '\udc67')) ||
                (('\udc82' <= yyC) && (yyC <= '\udc9b')) ||
                (('\udcb6' <= yyC) && (yyC <= '\udcb9')) ||
                (('\udcbb' <= yyC) && (yyC <= '\udccf')) ||
                (('\udcea' <= yyC) && (yyC <= '\udd03')) ||
                (('\udd1e' <= yyC) && (yyC <= '\udd37')) ||
                (('\udd52' <= yyC) && (yyC <= '\udd6b')) ||
                (('\udd86' <= yyC) && (yyC <= '\udd9f')) ||
                (('\uddba' <= yyC) && (yyC <= '\uddd3')) ||
                (('\uddee' <= yyC) && (yyC <= '\ude07')) ||
                (('\ude22' <= yyC) && (yyC <= '\ude3b')) ||
                (('\ude56' <= yyC) && (yyC <= '\ude6f')) ||
                (('\ude8a' <= yyC) && (yyC <= '\udea5')) ||
                (('\udec2' <= yyC) && (yyC <= '\udeda')) ||
                (('\udedc' <= yyC) && (yyC <= '\udee1')) ||
                (('\udefc' <= yyC) && (yyC <= '\udf14')) ||
                (('\udf16' <= yyC) && (yyC <= '\udf1b')) ||
                (('\udf36' <= yyC) && (yyC <= '\udf4e')) ||
                (('\udf50' <= yyC) && (yyC <= '\udf55')) ||
                (('\udf70' <= yyC) && (yyC <= '\udf88')) ||
                (('\udf8a' <= yyC) && (yyC <= '\udf8f')) ||
                (('\udfaa' <= yyC) && (yyC <= '\udfc2')) ||
                (('\udfc4' <= yyC) && (yyC <= '\udfc9')) ||
                ('\udfcb' == yyC)) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("var identifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.varIdentifier$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pvarIdentifier$$Choice1(final int yyStart)
    throws IOException {

    Result     yyResult;
    int        yyOption1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pvarIdentifier$$Choice2(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;

      yyResult = pidrest(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;
      }

      yyValue = difference(yyStart, yyOption1);

      return new SemanticValue(yyValue, yyOption1, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.upperIdentifier$$Choice2.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pupperIdentifier$$Choice2(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('A' <= yyC) && (yyC <= 'Z')) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 2.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if ((('A' <= yyC) && (yyC <= 'Z')) ||
          (('\u00c0' <= yyC) && (yyC <= '\u00de')) ||
          ('\u0100' == yyC) ||
          ('\u0102' == yyC) ||
          ('\u0104' == yyC) ||
          ('\u0106' == yyC) ||
          ('\u0108' == yyC) ||
          ('\u010a' == yyC) ||
          ('\u010c' == yyC) ||
          ('\u010e' == yyC) ||
          ('\u0110' == yyC) ||
          ('\u0112' == yyC) ||
          ('\u0114' == yyC) ||
          ('\u0116' == yyC) ||
          ('\u0118' == yyC) ||
          ('\u011a' == yyC) ||
          ('\u011c' == yyC) ||
          ('\u011e' == yyC) ||
          ('\u0120' == yyC) ||
          ('\u0122' == yyC) ||
          ('\u0124' == yyC) ||
          ('\u0126' == yyC) ||
          ('\u0128' == yyC) ||
          ('\u012a' == yyC) ||
          ('\u012c' == yyC) ||
          ('\u012e' == yyC) ||
          ('\u0130' == yyC) ||
          ('\u0132' == yyC) ||
          ('\u0134' == yyC) ||
          ('\u0136' == yyC) ||
          ('\u0139' == yyC) ||
          ('\u013b' == yyC) ||
          ('\u013d' == yyC) ||
          ('\u013f' == yyC) ||
          ('\u0141' == yyC) ||
          ('\u0143' == yyC) ||
          ('\u0145' == yyC) ||
          ('\u0147' == yyC) ||
          ('\u014a' == yyC) ||
          ('\u014c' == yyC) ||
          ('\u014e' == yyC) ||
          ('\u0150' == yyC) ||
          ('\u0152' == yyC) ||
          ('\u0154' == yyC) ||
          ('\u0156' == yyC) ||
          ('\u0158' == yyC) ||
          ('\u015a' == yyC) ||
          ('\u015c' == yyC) ||
          ('\u015e' == yyC) ||
          ('\u0160' == yyC) ||
          ('\u0162' == yyC) ||
          ('\u0164' == yyC) ||
          ('\u0166' == yyC) ||
          ('\u0168' == yyC) ||
          ('\u016a' == yyC) ||
          ('\u016c' == yyC) ||
          ('\u016e' == yyC) ||
          ('\u0170' == yyC) ||
          ('\u0172' == yyC) ||
          ('\u0174' == yyC) ||
          ('\u0176' == yyC) ||
          (('\u0178' <= yyC) && (yyC <= '\u0179')) ||
          ('\u017b' == yyC) ||
          ('\u017d' == yyC) ||
          (('\u0181' <= yyC) && (yyC <= '\u0182')) ||
          ('\u0184' == yyC) ||
          (('\u0186' <= yyC) && (yyC <= '\u0187')) ||
          (('\u0189' <= yyC) && (yyC <= '\u018b')) ||
          (('\u018e' <= yyC) && (yyC <= '\u0191')) ||
          (('\u0193' <= yyC) && (yyC <= '\u0194')) ||
          (('\u0196' <= yyC) && (yyC <= '\u0198')) ||
          (('\u019c' <= yyC) && (yyC <= '\u019d')) ||
          (('\u019f' <= yyC) && (yyC <= '\u01a0')) ||
          ('\u01a2' == yyC) ||
          ('\u01a4' == yyC) ||
          (('\u01a6' <= yyC) && (yyC <= '\u01a7')) ||
          ('\u01a9' == yyC) ||
          ('\u01ac' == yyC) ||
          (('\u01ae' <= yyC) && (yyC <= '\u01af')) ||
          (('\u01b1' <= yyC) && (yyC <= '\u01b3')) ||
          ('\u01b5' == yyC) ||
          (('\u01b7' <= yyC) && (yyC <= '\u01b8')) ||
          ('\u01bc' == yyC) ||
          ('\u01c4' == yyC) ||
          ('\u01c7' == yyC) ||
          ('\u01ca' == yyC) ||
          ('\u01cd' == yyC) ||
          ('\u01cf' == yyC) ||
          ('\u01d1' == yyC) ||
          ('\u01d3' == yyC) ||
          ('\u01d5' == yyC) ||
          ('\u01d7' == yyC) ||
          ('\u01d9' == yyC) ||
          ('\u01db' == yyC) ||
          ('\u01de' == yyC) ||
          ('\u01e0' == yyC) ||
          ('\u01e2' == yyC) ||
          ('\u01e4' == yyC) ||
          ('\u01e6' == yyC) ||
          ('\u01e8' == yyC) ||
          ('\u01ea' == yyC) ||
          ('\u01ec' == yyC) ||
          ('\u01ee' == yyC) ||
          ('\u01f1' == yyC) ||
          ('\u01f4' == yyC) ||
          (('\u01f6' <= yyC) && (yyC <= '\u01f8')) ||
          ('\u01fa' == yyC) ||
          ('\u01fc' == yyC) ||
          ('\u01fe' == yyC) ||
          ('\u0200' == yyC) ||
          ('\u0202' == yyC) ||
          ('\u0204' == yyC) ||
          ('\u0206' == yyC) ||
          ('\u0208' == yyC) ||
          ('\u020a' == yyC) ||
          ('\u020c' == yyC) ||
          ('\u020e' == yyC) ||
          ('\u0210' == yyC) ||
          ('\u0212' == yyC) ||
          ('\u0214' == yyC) ||
          ('\u0216' == yyC) ||
          ('\u0218' == yyC) ||
          ('\u021a' == yyC) ||
          ('\u021c' == yyC) ||
          ('\u021e' == yyC) ||
          ('\u0220' == yyC) ||
          ('\u0222' == yyC) ||
          ('\u0224' == yyC) ||
          ('\u0226' == yyC) ||
          ('\u0228' == yyC) ||
          ('\u022a' == yyC) ||
          ('\u022c' == yyC) ||
          ('\u022e' == yyC) ||
          ('\u0230' == yyC) ||
          ('\u0232' == yyC) ||
          (('\u023a' <= yyC) && (yyC <= '\u023b')) ||
          (('\u023d' <= yyC) && (yyC <= '\u023e')) ||
          ('\u0241' == yyC) ||
          (('\u0243' <= yyC) && (yyC <= '\u0246')) ||
          ('\u0248' == yyC) ||
          ('\u024a' == yyC) ||
          ('\u024c' == yyC) ||
          ('\u024e' == yyC) ||
          ('\u0370' == yyC) ||
          ('\u0372' == yyC) ||
          ('\u0376' == yyC) ||
          ('\u0386' == yyC) ||
          (('\u0388' <= yyC) && (yyC <= '\u038a')) ||
          ('\u038c' == yyC) ||
          (('\u038e' <= yyC) && (yyC <= '\u038f')) ||
          (('\u0391' <= yyC) && (yyC <= '\u03a1')) ||
          (('\u03a3' <= yyC) && (yyC <= '\u03ab')) ||
          ('\u03cf' == yyC) ||
          (('\u03d2' <= yyC) && (yyC <= '\u03d4')) ||
          ('\u03d8' == yyC) ||
          ('\u03da' == yyC) ||
          ('\u03dc' == yyC) ||
          ('\u03de' == yyC) ||
          ('\u03e0' == yyC) ||
          ('\u03e2' == yyC) ||
          ('\u03e4' == yyC) ||
          ('\u03e6' == yyC) ||
          ('\u03e8' == yyC) ||
          ('\u03ea' == yyC) ||
          ('\u03ec' == yyC) ||
          ('\u03ee' == yyC) ||
          ('\u03f4' == yyC) ||
          ('\u03f7' == yyC) ||
          (('\u03f9' <= yyC) && (yyC <= '\u03fa')) ||
          (('\u03fd' <= yyC) && (yyC <= '\u042f')) ||
          ('\u0460' == yyC) ||
          ('\u0462' == yyC) ||
          ('\u0464' == yyC) ||
          ('\u0466' == yyC) ||
          ('\u0468' == yyC) ||
          ('\u046a' == yyC) ||
          ('\u046c' == yyC) ||
          ('\u046e' == yyC) ||
          ('\u0470' == yyC) ||
          ('\u0472' == yyC) ||
          ('\u0474' == yyC) ||
          ('\u0476' == yyC) ||
          ('\u0478' == yyC) ||
          ('\u047a' == yyC) ||
          ('\u047c' == yyC) ||
          ('\u047e' == yyC) ||
          ('\u0480' == yyC) ||
          ('\u048a' == yyC) ||
          ('\u048c' == yyC) ||
          ('\u048e' == yyC) ||
          ('\u0490' == yyC) ||
          ('\u0492' == yyC) ||
          ('\u0494' == yyC) ||
          ('\u0496' == yyC) ||
          ('\u0498' == yyC) ||
          ('\u049a' == yyC) ||
          ('\u049c' == yyC) ||
          ('\u049e' == yyC) ||
          ('\u04a0' == yyC) ||
          ('\u04a2' == yyC) ||
          ('\u04a4' == yyC) ||
          ('\u04a6' == yyC) ||
          ('\u04a8' == yyC) ||
          ('\u04aa' == yyC) ||
          ('\u04ac' == yyC) ||
          ('\u04ae' == yyC) ||
          ('\u04b0' == yyC) ||
          ('\u04b2' == yyC) ||
          ('\u04b4' == yyC) ||
          ('\u04b6' == yyC) ||
          ('\u04b8' == yyC) ||
          ('\u04ba' == yyC) ||
          ('\u04bc' == yyC) ||
          ('\u04be' == yyC) ||
          (('\u04c0' <= yyC) && (yyC <= '\u04c1')) ||
          ('\u04c3' == yyC) ||
          ('\u04c5' == yyC) ||
          ('\u04c7' == yyC) ||
          ('\u04c9' == yyC) ||
          ('\u04cb' == yyC) ||
          ('\u04cd' == yyC) ||
          ('\u04d0' == yyC) ||
          ('\u04d2' == yyC) ||
          ('\u04d4' == yyC) ||
          ('\u04d6' == yyC) ||
          ('\u04d8' == yyC) ||
          ('\u04da' == yyC) ||
          ('\u04dc' == yyC) ||
          ('\u04de' == yyC) ||
          ('\u04e0' == yyC) ||
          ('\u04e2' == yyC) ||
          ('\u04e4' == yyC) ||
          ('\u04e6' == yyC) ||
          ('\u04e8' == yyC) ||
          ('\u04ea' == yyC) ||
          ('\u04ec' == yyC) ||
          ('\u04ee' == yyC) ||
          ('\u04f0' == yyC) ||
          ('\u04f2' == yyC) ||
          ('\u04f4' == yyC) ||
          ('\u04f6' == yyC) ||
          ('\u04f8' == yyC) ||
          ('\u04fa' == yyC) ||
          ('\u04fc' == yyC) ||
          ('\u04fe' == yyC) ||
          ('\u0500' == yyC) ||
          ('\u0502' == yyC) ||
          ('\u0504' == yyC) ||
          ('\u0506' == yyC) ||
          ('\u0508' == yyC) ||
          ('\u050a' == yyC) ||
          ('\u050c' == yyC) ||
          ('\u050e' == yyC) ||
          ('\u0510' == yyC) ||
          ('\u0512' == yyC) ||
          ('\u0514' == yyC) ||
          ('\u0516' == yyC) ||
          ('\u0518' == yyC) ||
          ('\u051a' == yyC) ||
          ('\u051c' == yyC) ||
          ('\u051e' == yyC) ||
          ('\u0520' == yyC) ||
          ('\u0522' == yyC) ||
          (('\u0531' <= yyC) && (yyC <= '\u0556')) ||
          (('\u10a0' <= yyC) && (yyC <= '\u10c5')) ||
          ('\u1e00' == yyC) ||
          ('\u1e02' == yyC) ||
          ('\u1e04' == yyC) ||
          ('\u1e06' == yyC) ||
          ('\u1e08' == yyC) ||
          ('\u1e0a' == yyC) ||
          ('\u1e0c' == yyC) ||
          ('\u1e0e' == yyC) ||
          ('\u1e10' == yyC) ||
          ('\u1e12' == yyC) ||
          ('\u1e14' == yyC) ||
          ('\u1e16' == yyC) ||
          ('\u1e18' == yyC) ||
          ('\u1e1a' == yyC) ||
          ('\u1e1c' == yyC) ||
          ('\u1e1e' == yyC) ||
          ('\u1e20' == yyC) ||
          ('\u1e22' == yyC) ||
          ('\u1e24' == yyC) ||
          ('\u1e26' == yyC) ||
          ('\u1e28' == yyC) ||
          ('\u1e2a' == yyC) ||
          ('\u1e2c' == yyC) ||
          ('\u1e2e' == yyC) ||
          ('\u1e30' == yyC) ||
          ('\u1e32' == yyC) ||
          ('\u1e34' == yyC) ||
          ('\u1e36' == yyC) ||
          ('\u1e38' == yyC) ||
          ('\u1e3a' == yyC) ||
          ('\u1e3c' == yyC) ||
          ('\u1e3e' == yyC) ||
          ('\u1e40' == yyC) ||
          ('\u1e42' == yyC) ||
          ('\u1e44' == yyC) ||
          ('\u1e46' == yyC) ||
          ('\u1e48' == yyC) ||
          ('\u1e4a' == yyC) ||
          ('\u1e4c' == yyC) ||
          ('\u1e4e' == yyC) ||
          ('\u1e50' == yyC) ||
          ('\u1e52' == yyC) ||
          ('\u1e54' == yyC) ||
          ('\u1e56' == yyC) ||
          ('\u1e58' == yyC) ||
          ('\u1e5a' == yyC) ||
          ('\u1e5c' == yyC) ||
          ('\u1e5e' == yyC) ||
          ('\u1e60' == yyC) ||
          ('\u1e62' == yyC) ||
          ('\u1e64' == yyC) ||
          ('\u1e66' == yyC) ||
          ('\u1e68' == yyC) ||
          ('\u1e6a' == yyC) ||
          ('\u1e6c' == yyC) ||
          ('\u1e6e' == yyC) ||
          ('\u1e70' == yyC) ||
          ('\u1e72' == yyC) ||
          ('\u1e74' == yyC) ||
          ('\u1e76' == yyC) ||
          ('\u1e78' == yyC) ||
          ('\u1e7a' == yyC) ||
          ('\u1e7c' == yyC) ||
          ('\u1e7e' == yyC) ||
          ('\u1e80' == yyC) ||
          ('\u1e82' == yyC) ||
          ('\u1e84' == yyC) ||
          ('\u1e86' == yyC) ||
          ('\u1e88' == yyC) ||
          ('\u1e8a' == yyC) ||
          ('\u1e8c' == yyC) ||
          ('\u1e8e' == yyC) ||
          ('\u1e90' == yyC) ||
          ('\u1e92' == yyC) ||
          ('\u1e94' == yyC) ||
          ('\u1e9e' == yyC) ||
          ('\u1ea0' == yyC) ||
          ('\u1ea2' == yyC) ||
          ('\u1ea4' == yyC) ||
          ('\u1ea6' == yyC) ||
          ('\u1ea8' == yyC) ||
          ('\u1eaa' == yyC) ||
          ('\u1eac' == yyC) ||
          ('\u1eae' == yyC) ||
          ('\u1eb0' == yyC) ||
          ('\u1eb2' == yyC) ||
          ('\u1eb4' == yyC) ||
          ('\u1eb6' == yyC) ||
          ('\u1eb8' == yyC) ||
          ('\u1eba' == yyC) ||
          ('\u1ebc' == yyC) ||
          ('\u1ebe' == yyC) ||
          ('\u1ec0' == yyC) ||
          ('\u1ec2' == yyC) ||
          ('\u1ec4' == yyC) ||
          ('\u1ec6' == yyC) ||
          ('\u1ec8' == yyC) ||
          ('\u1eca' == yyC) ||
          ('\u1ecc' == yyC) ||
          ('\u1ece' == yyC) ||
          ('\u1ed0' == yyC) ||
          ('\u1ed2' == yyC) ||
          ('\u1ed4' == yyC) ||
          ('\u1ed6' == yyC) ||
          ('\u1ed8' == yyC) ||
          ('\u1eda' == yyC) ||
          ('\u1edc' == yyC) ||
          ('\u1ede' == yyC) ||
          ('\u1ee0' == yyC) ||
          ('\u1ee2' == yyC) ||
          ('\u1ee4' == yyC) ||
          ('\u1ee6' == yyC) ||
          ('\u1ee8' == yyC) ||
          ('\u1eea' == yyC) ||
          ('\u1eec' == yyC) ||
          ('\u1eee' == yyC) ||
          ('\u1ef0' == yyC) ||
          ('\u1ef2' == yyC) ||
          ('\u1ef4' == yyC) ||
          ('\u1ef6' == yyC) ||
          ('\u1ef8' == yyC) ||
          ('\u1efa' == yyC) ||
          ('\u1efc' == yyC) ||
          ('\u1efe' == yyC) ||
          (('\u1f08' <= yyC) && (yyC <= '\u1f0f')) ||
          (('\u1f18' <= yyC) && (yyC <= '\u1f1d')) ||
          (('\u1f28' <= yyC) && (yyC <= '\u1f2f')) ||
          (('\u1f38' <= yyC) && (yyC <= '\u1f3f')) ||
          (('\u1f48' <= yyC) && (yyC <= '\u1f4d')) ||
          ('\u1f59' == yyC) ||
          ('\u1f5b' == yyC) ||
          ('\u1f5d' == yyC) ||
          ('\u1f5f' == yyC) ||
          (('\u1f68' <= yyC) && (yyC <= '\u1f6f')) ||
          (('\u1fb8' <= yyC) && (yyC <= '\u1fbb')) ||
          (('\u1fc8' <= yyC) && (yyC <= '\u1fcb')) ||
          (('\u1fd8' <= yyC) && (yyC <= '\u1fdb')) ||
          (('\u1fe8' <= yyC) && (yyC <= '\u1fec')) ||
          (('\u1ff8' <= yyC) && (yyC <= '\u1ffb')) ||
          ('\u2102' == yyC) ||
          ('\u2107' == yyC) ||
          (('\u210b' <= yyC) && (yyC <= '\u210d')) ||
          (('\u2110' <= yyC) && (yyC <= '\u2112')) ||
          ('\u2115' == yyC) ||
          (('\u2119' <= yyC) && (yyC <= '\u211d')) ||
          ('\u2124' == yyC) ||
          ('\u2126' == yyC) ||
          ('\u2128' == yyC) ||
          (('\u212a' <= yyC) && (yyC <= '\u212d')) ||
          (('\u2130' <= yyC) && (yyC <= '\u2133')) ||
          (('\u213e' <= yyC) && (yyC <= '\u213f')) ||
          ('\u2145' == yyC) ||
          ('\u2183' == yyC) ||
          (('\u2c00' <= yyC) && (yyC <= '\u2c2e')) ||
          ('\u2c60' == yyC) ||
          (('\u2c62' <= yyC) && (yyC <= '\u2c64')) ||
          ('\u2c67' == yyC) ||
          ('\u2c69' == yyC) ||
          ('\u2c6b' == yyC) ||
          (('\u2c6d' <= yyC) && (yyC <= '\u2c6f')) ||
          ('\u2c72' == yyC) ||
          ('\u2c75' == yyC) ||
          ('\u2c80' == yyC) ||
          ('\u2c82' == yyC) ||
          ('\u2c84' == yyC) ||
          ('\u2c86' == yyC) ||
          ('\u2c88' == yyC) ||
          ('\u2c8a' == yyC) ||
          ('\u2c8c' == yyC) ||
          ('\u2c8e' == yyC) ||
          ('\u2c90' == yyC) ||
          ('\u2c92' == yyC) ||
          ('\u2c94' == yyC) ||
          ('\u2c96' == yyC) ||
          ('\u2c98' == yyC) ||
          ('\u2c9a' == yyC) ||
          ('\u2c9c' == yyC) ||
          ('\u2c9e' == yyC) ||
          ('\u2ca0' == yyC) ||
          ('\u2ca2' == yyC) ||
          ('\u2ca4' == yyC) ||
          ('\u2ca6' == yyC) ||
          ('\u2ca8' == yyC) ||
          ('\u2caa' == yyC) ||
          ('\u2cac' == yyC) ||
          ('\u2cae' == yyC) ||
          ('\u2cb0' == yyC) ||
          ('\u2cb2' == yyC) ||
          ('\u2cb4' == yyC) ||
          ('\u2cb6' == yyC) ||
          ('\u2cb8' == yyC) ||
          ('\u2cba' == yyC) ||
          ('\u2cbc' == yyC) ||
          ('\u2cbe' == yyC) ||
          ('\u2cc0' == yyC) ||
          ('\u2cc2' == yyC) ||
          ('\u2cc4' == yyC) ||
          ('\u2cc6' == yyC) ||
          ('\u2cc8' == yyC) ||
          ('\u2cca' == yyC) ||
          ('\u2ccc' == yyC) ||
          ('\u2cce' == yyC) ||
          ('\u2cd0' == yyC) ||
          ('\u2cd2' == yyC) ||
          ('\u2cd4' == yyC) ||
          ('\u2cd6' == yyC) ||
          ('\u2cd8' == yyC) ||
          ('\u2cda' == yyC) ||
          ('\u2cdc' == yyC) ||
          ('\u2cde' == yyC) ||
          ('\u2ce0' == yyC) ||
          ('\u2ce2' == yyC) ||
          ('\ua640' == yyC) ||
          ('\ua642' == yyC) ||
          ('\ua644' == yyC) ||
          ('\ua646' == yyC) ||
          ('\ua648' == yyC) ||
          ('\ua64a' == yyC) ||
          ('\ua64c' == yyC) ||
          ('\ua64e' == yyC) ||
          ('\ua650' == yyC) ||
          ('\ua652' == yyC) ||
          ('\ua654' == yyC) ||
          ('\ua656' == yyC) ||
          ('\ua658' == yyC) ||
          ('\ua65a' == yyC) ||
          ('\ua65c' == yyC) ||
          ('\ua65e' == yyC) ||
          ('\ua662' == yyC) ||
          ('\ua664' == yyC) ||
          ('\ua666' == yyC) ||
          ('\ua668' == yyC) ||
          ('\ua66a' == yyC) ||
          ('\ua66c' == yyC) ||
          ('\ua680' == yyC) ||
          ('\ua682' == yyC) ||
          ('\ua684' == yyC) ||
          ('\ua686' == yyC) ||
          ('\ua688' == yyC) ||
          ('\ua68a' == yyC) ||
          ('\ua68c' == yyC) ||
          ('\ua68e' == yyC) ||
          ('\ua690' == yyC) ||
          ('\ua692' == yyC) ||
          ('\ua694' == yyC) ||
          ('\ua696' == yyC) ||
          ('\ua722' == yyC) ||
          ('\ua724' == yyC) ||
          ('\ua726' == yyC) ||
          ('\ua728' == yyC) ||
          ('\ua72a' == yyC) ||
          ('\ua72c' == yyC) ||
          ('\ua72e' == yyC) ||
          ('\ua732' == yyC) ||
          ('\ua734' == yyC) ||
          ('\ua736' == yyC) ||
          ('\ua738' == yyC) ||
          ('\ua73a' == yyC) ||
          ('\ua73c' == yyC) ||
          ('\ua73e' == yyC) ||
          ('\ua740' == yyC) ||
          ('\ua742' == yyC) ||
          ('\ua744' == yyC) ||
          ('\ua746' == yyC) ||
          ('\ua748' == yyC) ||
          ('\ua74a' == yyC) ||
          ('\ua74c' == yyC) ||
          ('\ua74e' == yyC) ||
          ('\ua750' == yyC) ||
          ('\ua752' == yyC) ||
          ('\ua754' == yyC) ||
          ('\ua756' == yyC) ||
          ('\ua758' == yyC) ||
          ('\ua75a' == yyC) ||
          ('\ua75c' == yyC) ||
          ('\ua75e' == yyC) ||
          ('\ua760' == yyC) ||
          ('\ua762' == yyC) ||
          ('\ua764' == yyC) ||
          ('\ua766' == yyC) ||
          ('\ua768' == yyC) ||
          ('\ua76a' == yyC) ||
          ('\ua76c' == yyC) ||
          ('\ua76e' == yyC) ||
          ('\ua779' == yyC) ||
          ('\ua77b' == yyC) ||
          (('\ua77d' <= yyC) && (yyC <= '\ua77e')) ||
          ('\ua780' == yyC) ||
          ('\ua782' == yyC) ||
          ('\ua784' == yyC) ||
          ('\ua786' == yyC) ||
          ('\ua78b' == yyC) ||
          (('\uff21' <= yyC) && (yyC <= '\uff3a'))) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 3.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '\ud801':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if (('7' == yyC) ||
                (('\u1dc2' <= yyC) && (yyC <= '\udc00'))) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      case '\ud835':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if ((('\udc00' <= yyC) && (yyC <= '\udc19')) ||
                (('\udc34' <= yyC) && (yyC <= '\udc4d')) ||
                (('\udc68' <= yyC) && (yyC <= '\udc81')) ||
                ('\udc9c' == yyC) ||
                (('\udc9e' <= yyC) && (yyC <= '\udc9f')) ||
                ('\udca2' == yyC) ||
                (('\udca5' <= yyC) && (yyC <= '\udca6')) ||
                (('\udca9' <= yyC) && (yyC <= '\udcac')) ||
                (('\udcae' <= yyC) && (yyC <= '\udcb5')) ||
                (('\udcd0' <= yyC) && (yyC <= '\udce9')) ||
                (('\udd04' <= yyC) && (yyC <= '\udd05')) ||
                (('\udd07' <= yyC) && (yyC <= '\udd0a')) ||
                (('\udd0d' <= yyC) && (yyC <= '\udd1c')) ||
                (('\udd38' <= yyC) && (yyC <= '\udd39')) ||
                (('\udd3b' <= yyC) && (yyC <= '\udd3e')) ||
                (('\udd40' <= yyC) && (yyC <= '\udd44')) ||
                ('\udd46' == yyC) ||
                (('\udd4a' <= yyC) && (yyC <= '\udd50')) ||
                (('\udd6c' <= yyC) && (yyC <= '\udd85')) ||
                (('\udda0' <= yyC) && (yyC <= '\uddb9')) ||
                (('\uddd4' <= yyC) && (yyC <= '\udded')) ||
                (('\ude08' <= yyC) && (yyC <= '\ude21')) ||
                (('\ude3c' <= yyC) && (yyC <= '\ude55')) ||
                (('\ude70' <= yyC) && (yyC <= '\ude89')) ||
                (('\udea8' <= yyC) && (yyC <= '\udec0')) ||
                (('\udee2' <= yyC) && (yyC <= '\udefa')) ||
                (('\udf1c' <= yyC) && (yyC <= '\udf34')) ||
                (('\udf56' <= yyC) && (yyC <= '\udf6e')) ||
                (('\udf90' <= yyC) && (yyC <= '\udfa8')) ||
                ('\udfca' == yyC)) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      case '$':
      case '_':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("upper identifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.upperIdentifier$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pupperIdentifier$$Choice1(final int yyStart)
    throws IOException {

    Result     yyResult;
    int        yyOption1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pupperIdentifier$$Choice2(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;

      yyResult = pidrest(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;
      }

      yyValue = difference(yyStart, yyOption1);

      return new SemanticValue(yyValue, yyOption1, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Identifier.identifier.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pidentifier(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    boolean    yyPredMatched;
    int        yyRepetition1;
    boolean    yyRepeated1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('`' == yyC) {
      yyIndex = yyStart + 1;

      yyRepetition1 = yyIndex;
      yyRepeated1   = false;
      while (true) {

        yyPredMatched = false;

        yyC = character(yyRepetition1);
        if ('`' == yyC) {

          yyPredMatched = true;
        }

        if (! yyPredMatched) {

          yyResult = pstringChar(yyRepetition1);
          yyError  = yyResult.select(yyError);
          if (yyResult.hasValue()) {

            yyRepetition1 = yyResult.index;
            yyRepeated1   = true;
            continue;
          }
        } else {
          yyError = yyError.select("identifier expected", yyStart);
        }
        break;
      }

      if (yyRepeated1) {

        yyC = character(yyRepetition1);
        if ('`' == yyC) {
          yyIndex = yyRepetition1 + 1;

          yyValue = difference(yyStart, yyIndex);

          return new SemanticValue(yyValue, yyIndex, yyError);
        }
      }
    }

    // Alternative 2.

    yyResult = pupperIdentifier$$Choice1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v = yyResult.semanticValue();

      if (!contains(SCALA_KEYWORDS, toText(v))) {

        yyValue = difference(yyStart, yyResult.index);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 3.

    yyResult = pvarIdentifier$$Choice1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v = yyResult.semanticValue();

      if (!contains(SCALA_KEYWORDS, toText(v))) {

        yyValue = difference(yyStart, yyResult.index);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Alternative 4.

    yyResult = popIdentifier$$Plus1(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v = yyResult.semanticValue();

      if (!contains(SCALA_KEYWORDS, toText(v))) {

        yyValue = difference(yyStart, yyResult.index);

        return yyResult.createValue(yyValue, yyError);
      }
    }

    // Done.
    yyError = yyError.select("identifier expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Identifier.idrest.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pidrest(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    Result     yyPredResult;
    boolean    yyPredMatched;
    int        yyRepetition1;
    boolean    yyRepeated1;
    int        yyRepetition2;
    boolean    yyRepeated2;
    int        yyOption1;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepeated1   = false;
    while (true) {

      final int yyChoice1 = yyRepetition1;

      // Nested alternative 1.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;
        if (('A' <= yyC) && (yyC <= 'Z')) {

          yyRepetition1 = yyIndex;
          yyRepeated1   = true;
          continue;
        }
      }

      // Nested alternative 2.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;
        if (('a' <= yyC) && (yyC <= 'z')) {

          yyRepetition1 = yyIndex;
          yyRepeated1   = true;
          continue;
        }
      }

      // Nested alternative 3.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;
        if ((('a' <= yyC) && (yyC <= 'z')) ||
            ('\u00aa' == yyC) ||
            ('\u00b5' == yyC) ||
            ('\u00ba' == yyC) ||
            (('\u00df' <= yyC) && (yyC <= '\u00ff')) ||
            ('\u0101' == yyC) ||
            ('\u0103' == yyC) ||
            ('\u0105' == yyC) ||
            ('\u0107' == yyC) ||
            ('\u0109' == yyC) ||
            ('\u010b' == yyC) ||
            ('\u010d' == yyC) ||
            ('\u010f' == yyC) ||
            ('\u0111' == yyC) ||
            ('\u0113' == yyC) ||
            ('\u0115' == yyC) ||
            ('\u0117' == yyC) ||
            ('\u0119' == yyC) ||
            ('\u011b' == yyC) ||
            ('\u011d' == yyC) ||
            ('\u011f' == yyC) ||
            ('\u0121' == yyC) ||
            ('\u0123' == yyC) ||
            ('\u0125' == yyC) ||
            ('\u0127' == yyC) ||
            ('\u0129' == yyC) ||
            ('\u012b' == yyC) ||
            ('\u012d' == yyC) ||
            ('\u012f' == yyC) ||
            ('\u0131' == yyC) ||
            ('\u0133' == yyC) ||
            ('\u0135' == yyC) ||
            (('\u0137' <= yyC) && (yyC <= '\u0138')) ||
            ('\u013a' == yyC) ||
            ('\u013c' == yyC) ||
            ('\u013e' == yyC) ||
            ('\u0140' == yyC) ||
            ('\u0142' == yyC) ||
            ('\u0144' == yyC) ||
            ('\u0146' == yyC) ||
            (('\u0148' <= yyC) && (yyC <= '\u0149')) ||
            ('\u014b' == yyC) ||
            ('\u014d' == yyC) ||
            ('\u014f' == yyC) ||
            ('\u0151' == yyC) ||
            ('\u0153' == yyC) ||
            ('\u0155' == yyC) ||
            ('\u0157' == yyC) ||
            ('\u0159' == yyC) ||
            ('\u015b' == yyC) ||
            ('\u015d' == yyC) ||
            ('\u015f' == yyC) ||
            ('\u0161' == yyC) ||
            ('\u0163' == yyC) ||
            ('\u0165' == yyC) ||
            ('\u0167' == yyC) ||
            ('\u0169' == yyC) ||
            ('\u016b' == yyC) ||
            ('\u016d' == yyC) ||
            ('\u016f' == yyC) ||
            ('\u0171' == yyC) ||
            ('\u0173' == yyC) ||
            ('\u0175' == yyC) ||
            ('\u0177' == yyC) ||
            ('\u017a' == yyC) ||
            ('\u017c' == yyC) ||
            (('\u017e' <= yyC) && (yyC <= '\u0180')) ||
            ('\u0183' == yyC) ||
            ('\u0185' == yyC) ||
            ('\u0188' == yyC) ||
            (('\u018c' <= yyC) && (yyC <= '\u018d')) ||
            ('\u0192' == yyC) ||
            ('\u0195' == yyC) ||
            (('\u0199' <= yyC) && (yyC <= '\u019b')) ||
            ('\u019e' == yyC) ||
            ('\u01a1' == yyC) ||
            ('\u01a3' == yyC) ||
            ('\u01a5' == yyC) ||
            ('\u01a8' == yyC) ||
            (('\u01aa' <= yyC) && (yyC <= '\u01ab')) ||
            ('\u01ad' == yyC) ||
            ('\u01b0' == yyC) ||
            ('\u01b4' == yyC) ||
            ('\u01b6' == yyC) ||
            (('\u01b9' <= yyC) && (yyC <= '\u01ba')) ||
            (('\u01bd' <= yyC) && (yyC <= '\u01bf')) ||
            ('\u01c6' == yyC) ||
            ('\u01c9' == yyC) ||
            ('\u01cc' == yyC) ||
            ('\u01ce' == yyC) ||
            ('\u01d0' == yyC) ||
            ('\u01d2' == yyC) ||
            ('\u01d4' == yyC) ||
            ('\u01d6' == yyC) ||
            ('\u01d8' == yyC) ||
            ('\u01da' == yyC) ||
            (('\u01dc' <= yyC) && (yyC <= '\u01dd')) ||
            ('\u01df' == yyC) ||
            ('\u01e1' == yyC) ||
            ('\u01e3' == yyC) ||
            ('\u01e5' == yyC) ||
            ('\u01e7' == yyC) ||
            ('\u01e9' == yyC) ||
            ('\u01eb' == yyC) ||
            ('\u01ed' == yyC) ||
            (('\u01ef' <= yyC) && (yyC <= '\u01f0')) ||
            ('\u01f3' == yyC) ||
            ('\u01f5' == yyC) ||
            ('\u01f9' == yyC) ||
            ('\u01fb' == yyC) ||
            ('\u01fd' == yyC) ||
            ('\u01ff' == yyC) ||
            ('\u0201' == yyC) ||
            ('\u0203' == yyC) ||
            ('\u0205' == yyC) ||
            ('\u0207' == yyC) ||
            ('\u0209' == yyC) ||
            ('\u020b' == yyC) ||
            ('\u020d' == yyC) ||
            ('\u020f' == yyC) ||
            ('\u0211' == yyC) ||
            ('\u0213' == yyC) ||
            ('\u0215' == yyC) ||
            ('\u0217' == yyC) ||
            ('\u0219' == yyC) ||
            ('\u021b' == yyC) ||
            ('\u021d' == yyC) ||
            ('\u021f' == yyC) ||
            ('\u0221' == yyC) ||
            ('\u0223' == yyC) ||
            ('\u0225' == yyC) ||
            ('\u0227' == yyC) ||
            ('\u0229' == yyC) ||
            ('\u022b' == yyC) ||
            ('\u022d' == yyC) ||
            ('\u022f' == yyC) ||
            ('\u0231' == yyC) ||
            (('\u0233' <= yyC) && (yyC <= '\u0239')) ||
            ('\u023c' == yyC) ||
            (('\u023f' <= yyC) && (yyC <= '\u0240')) ||
            ('\u0242' == yyC) ||
            ('\u0247' == yyC) ||
            ('\u0249' == yyC) ||
            ('\u024b' == yyC) ||
            ('\u024d' == yyC) ||
            (('\u024f' <= yyC) && (yyC <= '\u02af')) ||
            ('\u0371' == yyC) ||
            ('\u0373' == yyC) ||
            ('\u0377' == yyC) ||
            (('\u037b' <= yyC) && (yyC <= '\u037d')) ||
            ('\u0390' == yyC) ||
            (('\u03ac' <= yyC) && (yyC <= '\u03ce')) ||
            (('\u03d0' <= yyC) && (yyC <= '\u03d1')) ||
            (('\u03d5' <= yyC) && (yyC <= '\u03d9')) ||
            ('\u03db' == yyC) ||
            ('\u03dd' == yyC) ||
            ('\u03df' == yyC) ||
            ('\u03e1' == yyC) ||
            ('\u03e3' == yyC) ||
            ('\u03e5' == yyC) ||
            ('\u03e7' == yyC) ||
            ('\u03e9' == yyC) ||
            ('\u03eb' == yyC) ||
            ('\u03ed' == yyC) ||
            (('\u03ef' <= yyC) && (yyC <= '\u03f3')) ||
            ('\u03f5' == yyC) ||
            ('\u03f8' == yyC) ||
            (('\u03fb' <= yyC) && (yyC <= '\u03fc')) ||
            (('\u0430' <= yyC) && (yyC <= '\u045f')) ||
            ('\u0461' == yyC) ||
            ('\u0463' == yyC) ||
            ('\u0465' == yyC) ||
            ('\u0467' == yyC) ||
            ('\u0469' == yyC) ||
            ('\u046b' == yyC) ||
            ('\u046d' == yyC) ||
            ('\u046f' == yyC) ||
            ('\u0471' == yyC) ||
            ('\u0473' == yyC) ||
            ('\u0475' == yyC) ||
            ('\u0477' == yyC) ||
            ('\u0479' == yyC) ||
            ('\u047b' == yyC) ||
            ('\u047d' == yyC) ||
            ('\u047f' == yyC) ||
            ('\u0481' == yyC) ||
            ('\u048b' == yyC) ||
            ('\u048d' == yyC) ||
            ('\u048f' == yyC) ||
            ('\u0491' == yyC) ||
            ('\u0493' == yyC) ||
            ('\u0495' == yyC) ||
            ('\u0497' == yyC) ||
            ('\u0499' == yyC) ||
            ('\u049b' == yyC) ||
            ('\u049d' == yyC) ||
            ('\u049f' == yyC) ||
            ('\u04a1' == yyC) ||
            ('\u04a3' == yyC) ||
            ('\u04a5' == yyC) ||
            ('\u04a7' == yyC) ||
            ('\u04a9' == yyC) ||
            ('\u04ab' == yyC) ||
            ('\u04ad' == yyC) ||
            ('\u04af' == yyC) ||
            ('\u04b1' == yyC) ||
            ('\u04b3' == yyC) ||
            ('\u04b5' == yyC) ||
            ('\u04b7' == yyC) ||
            ('\u04b9' == yyC) ||
            ('\u04bb' == yyC) ||
            ('\u04bd' == yyC) ||
            ('\u04bf' == yyC) ||
            ('\u04c2' == yyC) ||
            ('\u04c4' == yyC) ||
            ('\u04c6' == yyC) ||
            ('\u04c8' == yyC) ||
            ('\u04ca' == yyC) ||
            ('\u04cc' == yyC) ||
            (('\u04ce' <= yyC) && (yyC <= '\u04cf')) ||
            ('\u04d1' == yyC) ||
            ('\u04d3' == yyC) ||
            ('\u04d5' == yyC) ||
            ('\u04d7' == yyC) ||
            ('\u04d9' == yyC) ||
            ('\u04db' == yyC) ||
            ('\u04dd' == yyC) ||
            ('\u04df' == yyC) ||
            ('\u04e1' == yyC) ||
            ('\u04e3' == yyC) ||
            ('\u04e5' == yyC) ||
            ('\u04e7' == yyC) ||
            ('\u04e9' == yyC) ||
            ('\u04eb' == yyC) ||
            ('\u04ed' == yyC) ||
            ('\u04ef' == yyC) ||
            ('\u04f1' == yyC) ||
            ('\u04f3' == yyC) ||
            ('\u04f5' == yyC) ||
            ('\u04f7' == yyC) ||
            ('\u04f9' == yyC) ||
            ('\u04fb' == yyC) ||
            ('\u04fd' == yyC) ||
            ('\u04ff' == yyC) ||
            ('\u0501' == yyC) ||
            ('\u0503' == yyC) ||
            ('\u0505' == yyC) ||
            ('\u0507' == yyC) ||
            ('\u0509' == yyC) ||
            ('\u050b' == yyC) ||
            ('\u050d' == yyC) ||
            ('\u050f' == yyC) ||
            ('\u0511' == yyC) ||
            ('\u0513' == yyC) ||
            ('\u0515' == yyC) ||
            ('\u0517' == yyC) ||
            ('\u0519' == yyC) ||
            ('\u051b' == yyC) ||
            ('\u051d' == yyC) ||
            ('\u051f' == yyC) ||
            ('\u0521' == yyC) ||
            ('\u0523' == yyC) ||
            (('\u0561' <= yyC) && (yyC <= '\u0587')) ||
            (('\u1d00' <= yyC) && (yyC <= '\u1d2b')) ||
            (('\u1d62' <= yyC) && (yyC <= '\u1d77')) ||
            (('\u1d79' <= yyC) && (yyC <= '\u1d9a')) ||
            ('\u1e01' == yyC) ||
            ('\u1e03' == yyC) ||
            ('\u1e05' == yyC) ||
            ('\u1e07' == yyC) ||
            ('\u1e09' == yyC) ||
            ('\u1e0b' == yyC) ||
            ('\u1e0d' == yyC) ||
            ('\u1e0f' == yyC) ||
            ('\u1e11' == yyC) ||
            ('\u1e13' == yyC) ||
            ('\u1e15' == yyC) ||
            ('\u1e17' == yyC) ||
            ('\u1e19' == yyC) ||
            ('\u1e1b' == yyC) ||
            ('\u1e1d' == yyC) ||
            ('\u1e1f' == yyC) ||
            ('\u1e21' == yyC) ||
            ('\u1e23' == yyC) ||
            ('\u1e25' == yyC) ||
            ('\u1e27' == yyC) ||
            ('\u1e29' == yyC) ||
            ('\u1e2b' == yyC) ||
            ('\u1e2d' == yyC) ||
            ('\u1e2f' == yyC) ||
            ('\u1e31' == yyC) ||
            ('\u1e33' == yyC) ||
            ('\u1e35' == yyC) ||
            ('\u1e37' == yyC) ||
            ('\u1e39' == yyC) ||
            ('\u1e3b' == yyC) ||
            ('\u1e3d' == yyC) ||
            ('\u1e3f' == yyC) ||
            ('\u1e41' == yyC) ||
            ('\u1e43' == yyC) ||
            ('\u1e45' == yyC) ||
            ('\u1e47' == yyC) ||
            ('\u1e49' == yyC) ||
            ('\u1e4b' == yyC) ||
            ('\u1e4d' == yyC) ||
            ('\u1e4f' == yyC) ||
            ('\u1e51' == yyC) ||
            ('\u1e53' == yyC) ||
            ('\u1e55' == yyC) ||
            ('\u1e57' == yyC) ||
            ('\u1e59' == yyC) ||
            ('\u1e5b' == yyC) ||
            ('\u1e5d' == yyC) ||
            ('\u1e5f' == yyC) ||
            ('\u1e61' == yyC) ||
            ('\u1e63' == yyC) ||
            ('\u1e65' == yyC) ||
            ('\u1e67' == yyC) ||
            ('\u1e69' == yyC) ||
            ('\u1e6b' == yyC) ||
            ('\u1e6d' == yyC) ||
            ('\u1e6f' == yyC) ||
            ('\u1e71' == yyC) ||
            ('\u1e73' == yyC) ||
            ('\u1e75' == yyC) ||
            ('\u1e77' == yyC) ||
            ('\u1e79' == yyC) ||
            ('\u1e7b' == yyC) ||
            ('\u1e7d' == yyC) ||
            ('\u1e7f' == yyC) ||
            ('\u1e81' == yyC) ||
            ('\u1e83' == yyC) ||
            ('\u1e85' == yyC) ||
            ('\u1e87' == yyC) ||
            ('\u1e89' == yyC) ||
            ('\u1e8b' == yyC) ||
            ('\u1e8d' == yyC) ||
            ('\u1e8f' == yyC) ||
            ('\u1e91' == yyC) ||
            ('\u1e93' == yyC) ||
            (('\u1e95' <= yyC) && (yyC <= '\u1e9d')) ||
            ('\u1e9f' == yyC) ||
            ('\u1ea1' == yyC) ||
            ('\u1ea3' == yyC) ||
            ('\u1ea5' == yyC) ||
            ('\u1ea7' == yyC) ||
            ('\u1ea9' == yyC) ||
            ('\u1eab' == yyC) ||
            ('\u1ead' == yyC) ||
            ('\u1eaf' == yyC) ||
            ('\u1eb1' == yyC) ||
            ('\u1eb3' == yyC) ||
            ('\u1eb5' == yyC) ||
            ('\u1eb7' == yyC) ||
            ('\u1eb9' == yyC) ||
            ('\u1ebb' == yyC) ||
            ('\u1ebd' == yyC) ||
            ('\u1ebf' == yyC) ||
            ('\u1ec1' == yyC) ||
            ('\u1ec3' == yyC) ||
            ('\u1ec5' == yyC) ||
            ('\u1ec7' == yyC) ||
            ('\u1ec9' == yyC) ||
            ('\u1ecb' == yyC) ||
            ('\u1ecd' == yyC) ||
            ('\u1ecf' == yyC) ||
            ('\u1ed1' == yyC) ||
            ('\u1ed3' == yyC) ||
            ('\u1ed5' == yyC) ||
            ('\u1ed7' == yyC) ||
            ('\u1ed9' == yyC) ||
            ('\u1edb' == yyC) ||
            ('\u1edd' == yyC) ||
            ('\u1edf' == yyC) ||
            ('\u1ee1' == yyC) ||
            ('\u1ee3' == yyC) ||
            ('\u1ee5' == yyC) ||
            ('\u1ee7' == yyC) ||
            ('\u1ee9' == yyC) ||
            ('\u1eeb' == yyC) ||
            ('\u1eed' == yyC) ||
            ('\u1eef' == yyC) ||
            ('\u1ef1' == yyC) ||
            ('\u1ef3' == yyC) ||
            ('\u1ef5' == yyC) ||
            ('\u1ef7' == yyC) ||
            ('\u1ef9' == yyC) ||
            ('\u1efb' == yyC) ||
            ('\u1efd' == yyC) ||
            (('\u1eff' <= yyC) && (yyC <= '\u1f07')) ||
            (('\u1f10' <= yyC) && (yyC <= '\u1f15')) ||
            (('\u1f20' <= yyC) && (yyC <= '\u1f27')) ||
            (('\u1f30' <= yyC) && (yyC <= '\u1f37')) ||
            (('\u1f40' <= yyC) && (yyC <= '\u1f45')) ||
            (('\u1f50' <= yyC) && (yyC <= '\u1f57')) ||
            (('\u1f60' <= yyC) && (yyC <= '\u1f67')) ||
            (('\u1f70' <= yyC) && (yyC <= '\u1f7d')) ||
            (('\u1f80' <= yyC) && (yyC <= '\u1f87')) ||
            (('\u1f90' <= yyC) && (yyC <= '\u1f97')) ||
            (('\u1fa0' <= yyC) && (yyC <= '\u1fa7')) ||
            (('\u1fb0' <= yyC) && (yyC <= '\u1fb7')) ||
            ('\u1fbe' == yyC) ||
            (('\u1fc2' <= yyC) && (yyC <= '\u1fc4')) ||
            (('\u1fc6' <= yyC) && (yyC <= '\u1fc7')) ||
            (('\u1fd0' <= yyC) && (yyC <= '\u1fd3')) ||
            (('\u1fd6' <= yyC) && (yyC <= '\u1fd7')) ||
            (('\u1fe0' <= yyC) && (yyC <= '\u1fe7')) ||
            (('\u1ff2' <= yyC) && (yyC <= '\u1ff4')) ||
            (('\u1ff6' <= yyC) && (yyC <= '\u1ff7')) ||
            ('\u2071' == yyC) ||
            ('\u207f' == yyC) ||
            ('\u210a' == yyC) ||
            (('\u210e' <= yyC) && (yyC <= '\u210f')) ||
            ('\u2113' == yyC) ||
            ('\u212f' == yyC) ||
            ('\u2134' == yyC) ||
            ('\u2139' == yyC) ||
            (('\u213c' <= yyC) && (yyC <= '\u213d')) ||
            (('\u2146' <= yyC) && (yyC <= '\u2149')) ||
            ('\u214e' == yyC) ||
            ('\u2184' == yyC) ||
            (('\u2c30' <= yyC) && (yyC <= '\u2c5e')) ||
            ('\u2c61' == yyC) ||
            (('\u2c65' <= yyC) && (yyC <= '\u2c66')) ||
            ('\u2c68' == yyC) ||
            ('\u2c6a' == yyC) ||
            ('\u2c6c' == yyC) ||
            ('\u2c71' == yyC) ||
            (('\u2c73' <= yyC) && (yyC <= '\u2c74')) ||
            (('\u2c76' <= yyC) && (yyC <= '\u2c7c')) ||
            ('\u2c81' == yyC) ||
            ('\u2c83' == yyC) ||
            ('\u2c85' == yyC) ||
            ('\u2c87' == yyC) ||
            ('\u2c89' == yyC) ||
            ('\u2c8b' == yyC) ||
            ('\u2c8d' == yyC) ||
            ('\u2c8f' == yyC) ||
            ('\u2c91' == yyC) ||
            ('\u2c93' == yyC) ||
            ('\u2c95' == yyC) ||
            ('\u2c97' == yyC) ||
            ('\u2c99' == yyC) ||
            ('\u2c9b' == yyC) ||
            ('\u2c9d' == yyC) ||
            ('\u2c9f' == yyC) ||
            ('\u2ca1' == yyC) ||
            ('\u2ca3' == yyC) ||
            ('\u2ca5' == yyC) ||
            ('\u2ca7' == yyC) ||
            ('\u2ca9' == yyC) ||
            ('\u2cab' == yyC) ||
            ('\u2cad' == yyC) ||
            ('\u2caf' == yyC) ||
            ('\u2cb1' == yyC) ||
            ('\u2cb3' == yyC) ||
            ('\u2cb5' == yyC) ||
            ('\u2cb7' == yyC) ||
            ('\u2cb9' == yyC) ||
            ('\u2cbb' == yyC) ||
            ('\u2cbd' == yyC) ||
            ('\u2cbf' == yyC) ||
            ('\u2cc1' == yyC) ||
            ('\u2cc3' == yyC) ||
            ('\u2cc5' == yyC) ||
            ('\u2cc7' == yyC) ||
            ('\u2cc9' == yyC) ||
            ('\u2ccb' == yyC) ||
            ('\u2ccd' == yyC) ||
            ('\u2ccf' == yyC) ||
            ('\u2cd1' == yyC) ||
            ('\u2cd3' == yyC) ||
            ('\u2cd5' == yyC) ||
            ('\u2cd7' == yyC) ||
            ('\u2cd9' == yyC) ||
            ('\u2cdb' == yyC) ||
            ('\u2cdd' == yyC) ||
            ('\u2cdf' == yyC) ||
            ('\u2ce1' == yyC) ||
            (('\u2ce3' <= yyC) && (yyC <= '\u2ce4')) ||
            (('\u2d00' <= yyC) && (yyC <= '\u2d25')) ||
            ('\ua641' == yyC) ||
            ('\ua643' == yyC) ||
            ('\ua645' == yyC) ||
            ('\ua647' == yyC) ||
            ('\ua649' == yyC) ||
            ('\ua64b' == yyC) ||
            ('\ua64d' == yyC) ||
            ('\ua64f' == yyC) ||
            ('\ua651' == yyC) ||
            ('\ua653' == yyC) ||
            ('\ua655' == yyC) ||
            ('\ua657' == yyC) ||
            ('\ua659' == yyC) ||
            ('\ua65b' == yyC) ||
            ('\ua65d' == yyC) ||
            ('\ua65f' == yyC) ||
            ('\ua663' == yyC) ||
            ('\ua665' == yyC) ||
            ('\ua667' == yyC) ||
            ('\ua669' == yyC) ||
            ('\ua66b' == yyC) ||
            ('\ua66d' == yyC) ||
            ('\ua681' == yyC) ||
            ('\ua683' == yyC) ||
            ('\ua685' == yyC) ||
            ('\ua687' == yyC) ||
            ('\ua689' == yyC) ||
            ('\ua68b' == yyC) ||
            ('\ua68d' == yyC) ||
            ('\ua68f' == yyC) ||
            ('\ua691' == yyC) ||
            ('\ua693' == yyC) ||
            ('\ua695' == yyC) ||
            ('\ua697' == yyC) ||
            ('\ua723' == yyC) ||
            ('\ua725' == yyC) ||
            ('\ua727' == yyC) ||
            ('\ua729' == yyC) ||
            ('\ua72b' == yyC) ||
            ('\ua72d' == yyC) ||
            (('\ua72f' <= yyC) && (yyC <= '\ua731')) ||
            ('\ua733' == yyC) ||
            ('\ua735' == yyC) ||
            ('\ua737' == yyC) ||
            ('\ua739' == yyC) ||
            ('\ua73b' == yyC) ||
            ('\ua73d' == yyC) ||
            ('\ua73f' == yyC) ||
            ('\ua741' == yyC) ||
            ('\ua743' == yyC) ||
            ('\ua745' == yyC) ||
            ('\ua747' == yyC) ||
            ('\ua749' == yyC) ||
            ('\ua74b' == yyC) ||
            ('\ua74d' == yyC) ||
            ('\ua74f' == yyC) ||
            ('\ua751' == yyC) ||
            ('\ua753' == yyC) ||
            ('\ua755' == yyC) ||
            ('\ua757' == yyC) ||
            ('\ua759' == yyC) ||
            ('\ua75b' == yyC) ||
            ('\ua75d' == yyC) ||
            ('\ua75f' == yyC) ||
            ('\ua761' == yyC) ||
            ('\ua763' == yyC) ||
            ('\ua765' == yyC) ||
            ('\ua767' == yyC) ||
            ('\ua769' == yyC) ||
            ('\ua76b' == yyC) ||
            ('\ua76d' == yyC) ||
            ('\ua76f' == yyC) ||
            (('\ua771' <= yyC) && (yyC <= '\ua778')) ||
            ('\ua77a' == yyC) ||
            ('\ua77c' == yyC) ||
            ('\ua77f' == yyC) ||
            ('\ua781' == yyC) ||
            ('\ua783' == yyC) ||
            ('\ua785' == yyC) ||
            ('\ua787' == yyC) ||
            ('\ua78c' == yyC) ||
            (('\ufb00' <= yyC) && (yyC <= '\ufb06')) ||
            (('\ufb13' <= yyC) && (yyC <= '\ufb17')) ||
            (('\uff41' <= yyC) && (yyC <= '\uff5a'))) {

          yyRepetition1 = yyIndex;
          yyRepeated1   = true;
          continue;
        }
      }

      // Nested alternative 4.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case '\ud801':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if (('\udc28' <= yyC) && (yyC <= '\udc4f')) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '\ud835':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ((('\udc1a' <= yyC) && (yyC <= '\udc33')) ||
                  (('\udc4e' <= yyC) && (yyC <= '\udc54')) ||
                  (('\udc56' <= yyC) && (yyC <= '\udc67')) ||
                  (('\udc82' <= yyC) && (yyC <= '\udc9b')) ||
                  (('\udcb6' <= yyC) && (yyC <= '\udcb9')) ||
                  (('\udcbb' <= yyC) && (yyC <= '\udccf')) ||
                  (('\udcea' <= yyC) && (yyC <= '\udd03')) ||
                  (('\udd1e' <= yyC) && (yyC <= '\udd37')) ||
                  (('\udd52' <= yyC) && (yyC <= '\udd6b')) ||
                  (('\udd86' <= yyC) && (yyC <= '\udd9f')) ||
                  (('\uddba' <= yyC) && (yyC <= '\uddd3')) ||
                  (('\uddee' <= yyC) && (yyC <= '\ude07')) ||
                  (('\ude22' <= yyC) && (yyC <= '\ude3b')) ||
                  (('\ude56' <= yyC) && (yyC <= '\ude6f')) ||
                  (('\ude8a' <= yyC) && (yyC <= '\udea5')) ||
                  (('\udec2' <= yyC) && (yyC <= '\udeda')) ||
                  (('\udedc' <= yyC) && (yyC <= '\udee1')) ||
                  (('\udefc' <= yyC) && (yyC <= '\udf14')) ||
                  (('\udf16' <= yyC) && (yyC <= '\udf1b')) ||
                  (('\udf36' <= yyC) && (yyC <= '\udf4e')) ||
                  (('\udf50' <= yyC) && (yyC <= '\udf55')) ||
                  (('\udf70' <= yyC) && (yyC <= '\udf88')) ||
                  (('\udf8a' <= yyC) && (yyC <= '\udf8f')) ||
                  (('\udfaa' <= yyC) && (yyC <= '\udfc2')) ||
                  (('\udfc4' <= yyC) && (yyC <= '\udfc9')) ||
                  ('\udfcb' == yyC)) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        default:
          /* No match. */
        }
      }

      // Nested alternative 5.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;
        if ((('A' <= yyC) && (yyC <= 'Z')) ||
            (('\u00c0' <= yyC) && (yyC <= '\u00de')) ||
            ('\u0100' == yyC) ||
            ('\u0102' == yyC) ||
            ('\u0104' == yyC) ||
            ('\u0106' == yyC) ||
            ('\u0108' == yyC) ||
            ('\u010a' == yyC) ||
            ('\u010c' == yyC) ||
            ('\u010e' == yyC) ||
            ('\u0110' == yyC) ||
            ('\u0112' == yyC) ||
            ('\u0114' == yyC) ||
            ('\u0116' == yyC) ||
            ('\u0118' == yyC) ||
            ('\u011a' == yyC) ||
            ('\u011c' == yyC) ||
            ('\u011e' == yyC) ||
            ('\u0120' == yyC) ||
            ('\u0122' == yyC) ||
            ('\u0124' == yyC) ||
            ('\u0126' == yyC) ||
            ('\u0128' == yyC) ||
            ('\u012a' == yyC) ||
            ('\u012c' == yyC) ||
            ('\u012e' == yyC) ||
            ('\u0130' == yyC) ||
            ('\u0132' == yyC) ||
            ('\u0134' == yyC) ||
            ('\u0136' == yyC) ||
            ('\u0139' == yyC) ||
            ('\u013b' == yyC) ||
            ('\u013d' == yyC) ||
            ('\u013f' == yyC) ||
            ('\u0141' == yyC) ||
            ('\u0143' == yyC) ||
            ('\u0145' == yyC) ||
            ('\u0147' == yyC) ||
            ('\u014a' == yyC) ||
            ('\u014c' == yyC) ||
            ('\u014e' == yyC) ||
            ('\u0150' == yyC) ||
            ('\u0152' == yyC) ||
            ('\u0154' == yyC) ||
            ('\u0156' == yyC) ||
            ('\u0158' == yyC) ||
            ('\u015a' == yyC) ||
            ('\u015c' == yyC) ||
            ('\u015e' == yyC) ||
            ('\u0160' == yyC) ||
            ('\u0162' == yyC) ||
            ('\u0164' == yyC) ||
            ('\u0166' == yyC) ||
            ('\u0168' == yyC) ||
            ('\u016a' == yyC) ||
            ('\u016c' == yyC) ||
            ('\u016e' == yyC) ||
            ('\u0170' == yyC) ||
            ('\u0172' == yyC) ||
            ('\u0174' == yyC) ||
            ('\u0176' == yyC) ||
            (('\u0178' <= yyC) && (yyC <= '\u0179')) ||
            ('\u017b' == yyC) ||
            ('\u017d' == yyC) ||
            (('\u0181' <= yyC) && (yyC <= '\u0182')) ||
            ('\u0184' == yyC) ||
            (('\u0186' <= yyC) && (yyC <= '\u0187')) ||
            (('\u0189' <= yyC) && (yyC <= '\u018b')) ||
            (('\u018e' <= yyC) && (yyC <= '\u0191')) ||
            (('\u0193' <= yyC) && (yyC <= '\u0194')) ||
            (('\u0196' <= yyC) && (yyC <= '\u0198')) ||
            (('\u019c' <= yyC) && (yyC <= '\u019d')) ||
            (('\u019f' <= yyC) && (yyC <= '\u01a0')) ||
            ('\u01a2' == yyC) ||
            ('\u01a4' == yyC) ||
            (('\u01a6' <= yyC) && (yyC <= '\u01a7')) ||
            ('\u01a9' == yyC) ||
            ('\u01ac' == yyC) ||
            (('\u01ae' <= yyC) && (yyC <= '\u01af')) ||
            (('\u01b1' <= yyC) && (yyC <= '\u01b3')) ||
            ('\u01b5' == yyC) ||
            (('\u01b7' <= yyC) && (yyC <= '\u01b8')) ||
            ('\u01bc' == yyC) ||
            ('\u01c4' == yyC) ||
            ('\u01c7' == yyC) ||
            ('\u01ca' == yyC) ||
            ('\u01cd' == yyC) ||
            ('\u01cf' == yyC) ||
            ('\u01d1' == yyC) ||
            ('\u01d3' == yyC) ||
            ('\u01d5' == yyC) ||
            ('\u01d7' == yyC) ||
            ('\u01d9' == yyC) ||
            ('\u01db' == yyC) ||
            ('\u01de' == yyC) ||
            ('\u01e0' == yyC) ||
            ('\u01e2' == yyC) ||
            ('\u01e4' == yyC) ||
            ('\u01e6' == yyC) ||
            ('\u01e8' == yyC) ||
            ('\u01ea' == yyC) ||
            ('\u01ec' == yyC) ||
            ('\u01ee' == yyC) ||
            ('\u01f1' == yyC) ||
            ('\u01f4' == yyC) ||
            (('\u01f6' <= yyC) && (yyC <= '\u01f8')) ||
            ('\u01fa' == yyC) ||
            ('\u01fc' == yyC) ||
            ('\u01fe' == yyC) ||
            ('\u0200' == yyC) ||
            ('\u0202' == yyC) ||
            ('\u0204' == yyC) ||
            ('\u0206' == yyC) ||
            ('\u0208' == yyC) ||
            ('\u020a' == yyC) ||
            ('\u020c' == yyC) ||
            ('\u020e' == yyC) ||
            ('\u0210' == yyC) ||
            ('\u0212' == yyC) ||
            ('\u0214' == yyC) ||
            ('\u0216' == yyC) ||
            ('\u0218' == yyC) ||
            ('\u021a' == yyC) ||
            ('\u021c' == yyC) ||
            ('\u021e' == yyC) ||
            ('\u0220' == yyC) ||
            ('\u0222' == yyC) ||
            ('\u0224' == yyC) ||
            ('\u0226' == yyC) ||
            ('\u0228' == yyC) ||
            ('\u022a' == yyC) ||
            ('\u022c' == yyC) ||
            ('\u022e' == yyC) ||
            ('\u0230' == yyC) ||
            ('\u0232' == yyC) ||
            (('\u023a' <= yyC) && (yyC <= '\u023b')) ||
            (('\u023d' <= yyC) && (yyC <= '\u023e')) ||
            ('\u0241' == yyC) ||
            (('\u0243' <= yyC) && (yyC <= '\u0246')) ||
            ('\u0248' == yyC) ||
            ('\u024a' == yyC) ||
            ('\u024c' == yyC) ||
            ('\u024e' == yyC) ||
            ('\u0370' == yyC) ||
            ('\u0372' == yyC) ||
            ('\u0376' == yyC) ||
            ('\u0386' == yyC) ||
            (('\u0388' <= yyC) && (yyC <= '\u038a')) ||
            ('\u038c' == yyC) ||
            (('\u038e' <= yyC) && (yyC <= '\u038f')) ||
            (('\u0391' <= yyC) && (yyC <= '\u03a1')) ||
            (('\u03a3' <= yyC) && (yyC <= '\u03ab')) ||
            ('\u03cf' == yyC) ||
            (('\u03d2' <= yyC) && (yyC <= '\u03d4')) ||
            ('\u03d8' == yyC) ||
            ('\u03da' == yyC) ||
            ('\u03dc' == yyC) ||
            ('\u03de' == yyC) ||
            ('\u03e0' == yyC) ||
            ('\u03e2' == yyC) ||
            ('\u03e4' == yyC) ||
            ('\u03e6' == yyC) ||
            ('\u03e8' == yyC) ||
            ('\u03ea' == yyC) ||
            ('\u03ec' == yyC) ||
            ('\u03ee' == yyC) ||
            ('\u03f4' == yyC) ||
            ('\u03f7' == yyC) ||
            (('\u03f9' <= yyC) && (yyC <= '\u03fa')) ||
            (('\u03fd' <= yyC) && (yyC <= '\u042f')) ||
            ('\u0460' == yyC) ||
            ('\u0462' == yyC) ||
            ('\u0464' == yyC) ||
            ('\u0466' == yyC) ||
            ('\u0468' == yyC) ||
            ('\u046a' == yyC) ||
            ('\u046c' == yyC) ||
            ('\u046e' == yyC) ||
            ('\u0470' == yyC) ||
            ('\u0472' == yyC) ||
            ('\u0474' == yyC) ||
            ('\u0476' == yyC) ||
            ('\u0478' == yyC) ||
            ('\u047a' == yyC) ||
            ('\u047c' == yyC) ||
            ('\u047e' == yyC) ||
            ('\u0480' == yyC) ||
            ('\u048a' == yyC) ||
            ('\u048c' == yyC) ||
            ('\u048e' == yyC) ||
            ('\u0490' == yyC) ||
            ('\u0492' == yyC) ||
            ('\u0494' == yyC) ||
            ('\u0496' == yyC) ||
            ('\u0498' == yyC) ||
            ('\u049a' == yyC) ||
            ('\u049c' == yyC) ||
            ('\u049e' == yyC) ||
            ('\u04a0' == yyC) ||
            ('\u04a2' == yyC) ||
            ('\u04a4' == yyC) ||
            ('\u04a6' == yyC) ||
            ('\u04a8' == yyC) ||
            ('\u04aa' == yyC) ||
            ('\u04ac' == yyC) ||
            ('\u04ae' == yyC) ||
            ('\u04b0' == yyC) ||
            ('\u04b2' == yyC) ||
            ('\u04b4' == yyC) ||
            ('\u04b6' == yyC) ||
            ('\u04b8' == yyC) ||
            ('\u04ba' == yyC) ||
            ('\u04bc' == yyC) ||
            ('\u04be' == yyC) ||
            (('\u04c0' <= yyC) && (yyC <= '\u04c1')) ||
            ('\u04c3' == yyC) ||
            ('\u04c5' == yyC) ||
            ('\u04c7' == yyC) ||
            ('\u04c9' == yyC) ||
            ('\u04cb' == yyC) ||
            ('\u04cd' == yyC) ||
            ('\u04d0' == yyC) ||
            ('\u04d2' == yyC) ||
            ('\u04d4' == yyC) ||
            ('\u04d6' == yyC) ||
            ('\u04d8' == yyC) ||
            ('\u04da' == yyC) ||
            ('\u04dc' == yyC) ||
            ('\u04de' == yyC) ||
            ('\u04e0' == yyC) ||
            ('\u04e2' == yyC) ||
            ('\u04e4' == yyC) ||
            ('\u04e6' == yyC) ||
            ('\u04e8' == yyC) ||
            ('\u04ea' == yyC) ||
            ('\u04ec' == yyC) ||
            ('\u04ee' == yyC) ||
            ('\u04f0' == yyC) ||
            ('\u04f2' == yyC) ||
            ('\u04f4' == yyC) ||
            ('\u04f6' == yyC) ||
            ('\u04f8' == yyC) ||
            ('\u04fa' == yyC) ||
            ('\u04fc' == yyC) ||
            ('\u04fe' == yyC) ||
            ('\u0500' == yyC) ||
            ('\u0502' == yyC) ||
            ('\u0504' == yyC) ||
            ('\u0506' == yyC) ||
            ('\u0508' == yyC) ||
            ('\u050a' == yyC) ||
            ('\u050c' == yyC) ||
            ('\u050e' == yyC) ||
            ('\u0510' == yyC) ||
            ('\u0512' == yyC) ||
            ('\u0514' == yyC) ||
            ('\u0516' == yyC) ||
            ('\u0518' == yyC) ||
            ('\u051a' == yyC) ||
            ('\u051c' == yyC) ||
            ('\u051e' == yyC) ||
            ('\u0520' == yyC) ||
            ('\u0522' == yyC) ||
            (('\u0531' <= yyC) && (yyC <= '\u0556')) ||
            (('\u10a0' <= yyC) && (yyC <= '\u10c5')) ||
            ('\u1e00' == yyC) ||
            ('\u1e02' == yyC) ||
            ('\u1e04' == yyC) ||
            ('\u1e06' == yyC) ||
            ('\u1e08' == yyC) ||
            ('\u1e0a' == yyC) ||
            ('\u1e0c' == yyC) ||
            ('\u1e0e' == yyC) ||
            ('\u1e10' == yyC) ||
            ('\u1e12' == yyC) ||
            ('\u1e14' == yyC) ||
            ('\u1e16' == yyC) ||
            ('\u1e18' == yyC) ||
            ('\u1e1a' == yyC) ||
            ('\u1e1c' == yyC) ||
            ('\u1e1e' == yyC) ||
            ('\u1e20' == yyC) ||
            ('\u1e22' == yyC) ||
            ('\u1e24' == yyC) ||
            ('\u1e26' == yyC) ||
            ('\u1e28' == yyC) ||
            ('\u1e2a' == yyC) ||
            ('\u1e2c' == yyC) ||
            ('\u1e2e' == yyC) ||
            ('\u1e30' == yyC) ||
            ('\u1e32' == yyC) ||
            ('\u1e34' == yyC) ||
            ('\u1e36' == yyC) ||
            ('\u1e38' == yyC) ||
            ('\u1e3a' == yyC) ||
            ('\u1e3c' == yyC) ||
            ('\u1e3e' == yyC) ||
            ('\u1e40' == yyC) ||
            ('\u1e42' == yyC) ||
            ('\u1e44' == yyC) ||
            ('\u1e46' == yyC) ||
            ('\u1e48' == yyC) ||
            ('\u1e4a' == yyC) ||
            ('\u1e4c' == yyC) ||
            ('\u1e4e' == yyC) ||
            ('\u1e50' == yyC) ||
            ('\u1e52' == yyC) ||
            ('\u1e54' == yyC) ||
            ('\u1e56' == yyC) ||
            ('\u1e58' == yyC) ||
            ('\u1e5a' == yyC) ||
            ('\u1e5c' == yyC) ||
            ('\u1e5e' == yyC) ||
            ('\u1e60' == yyC) ||
            ('\u1e62' == yyC) ||
            ('\u1e64' == yyC) ||
            ('\u1e66' == yyC) ||
            ('\u1e68' == yyC) ||
            ('\u1e6a' == yyC) ||
            ('\u1e6c' == yyC) ||
            ('\u1e6e' == yyC) ||
            ('\u1e70' == yyC) ||
            ('\u1e72' == yyC) ||
            ('\u1e74' == yyC) ||
            ('\u1e76' == yyC) ||
            ('\u1e78' == yyC) ||
            ('\u1e7a' == yyC) ||
            ('\u1e7c' == yyC) ||
            ('\u1e7e' == yyC) ||
            ('\u1e80' == yyC) ||
            ('\u1e82' == yyC) ||
            ('\u1e84' == yyC) ||
            ('\u1e86' == yyC) ||
            ('\u1e88' == yyC) ||
            ('\u1e8a' == yyC) ||
            ('\u1e8c' == yyC) ||
            ('\u1e8e' == yyC) ||
            ('\u1e90' == yyC) ||
            ('\u1e92' == yyC) ||
            ('\u1e94' == yyC) ||
            ('\u1e9e' == yyC) ||
            ('\u1ea0' == yyC) ||
            ('\u1ea2' == yyC) ||
            ('\u1ea4' == yyC) ||
            ('\u1ea6' == yyC) ||
            ('\u1ea8' == yyC) ||
            ('\u1eaa' == yyC) ||
            ('\u1eac' == yyC) ||
            ('\u1eae' == yyC) ||
            ('\u1eb0' == yyC) ||
            ('\u1eb2' == yyC) ||
            ('\u1eb4' == yyC) ||
            ('\u1eb6' == yyC) ||
            ('\u1eb8' == yyC) ||
            ('\u1eba' == yyC) ||
            ('\u1ebc' == yyC) ||
            ('\u1ebe' == yyC) ||
            ('\u1ec0' == yyC) ||
            ('\u1ec2' == yyC) ||
            ('\u1ec4' == yyC) ||
            ('\u1ec6' == yyC) ||
            ('\u1ec8' == yyC) ||
            ('\u1eca' == yyC) ||
            ('\u1ecc' == yyC) ||
            ('\u1ece' == yyC) ||
            ('\u1ed0' == yyC) ||
            ('\u1ed2' == yyC) ||
            ('\u1ed4' == yyC) ||
            ('\u1ed6' == yyC) ||
            ('\u1ed8' == yyC) ||
            ('\u1eda' == yyC) ||
            ('\u1edc' == yyC) ||
            ('\u1ede' == yyC) ||
            ('\u1ee0' == yyC) ||
            ('\u1ee2' == yyC) ||
            ('\u1ee4' == yyC) ||
            ('\u1ee6' == yyC) ||
            ('\u1ee8' == yyC) ||
            ('\u1eea' == yyC) ||
            ('\u1eec' == yyC) ||
            ('\u1eee' == yyC) ||
            ('\u1ef0' == yyC) ||
            ('\u1ef2' == yyC) ||
            ('\u1ef4' == yyC) ||
            ('\u1ef6' == yyC) ||
            ('\u1ef8' == yyC) ||
            ('\u1efa' == yyC) ||
            ('\u1efc' == yyC) ||
            ('\u1efe' == yyC) ||
            (('\u1f08' <= yyC) && (yyC <= '\u1f0f')) ||
            (('\u1f18' <= yyC) && (yyC <= '\u1f1d')) ||
            (('\u1f28' <= yyC) && (yyC <= '\u1f2f')) ||
            (('\u1f38' <= yyC) && (yyC <= '\u1f3f')) ||
            (('\u1f48' <= yyC) && (yyC <= '\u1f4d')) ||
            ('\u1f59' == yyC) ||
            ('\u1f5b' == yyC) ||
            ('\u1f5d' == yyC) ||
            ('\u1f5f' == yyC) ||
            (('\u1f68' <= yyC) && (yyC <= '\u1f6f')) ||
            (('\u1fb8' <= yyC) && (yyC <= '\u1fbb')) ||
            (('\u1fc8' <= yyC) && (yyC <= '\u1fcb')) ||
            (('\u1fd8' <= yyC) && (yyC <= '\u1fdb')) ||
            (('\u1fe8' <= yyC) && (yyC <= '\u1fec')) ||
            (('\u1ff8' <= yyC) && (yyC <= '\u1ffb')) ||
            ('\u2102' == yyC) ||
            ('\u2107' == yyC) ||
            (('\u210b' <= yyC) && (yyC <= '\u210d')) ||
            (('\u2110' <= yyC) && (yyC <= '\u2112')) ||
            ('\u2115' == yyC) ||
            (('\u2119' <= yyC) && (yyC <= '\u211d')) ||
            ('\u2124' == yyC) ||
            ('\u2126' == yyC) ||
            ('\u2128' == yyC) ||
            (('\u212a' <= yyC) && (yyC <= '\u212d')) ||
            (('\u2130' <= yyC) && (yyC <= '\u2133')) ||
            (('\u213e' <= yyC) && (yyC <= '\u213f')) ||
            ('\u2145' == yyC) ||
            ('\u2183' == yyC) ||
            (('\u2c00' <= yyC) && (yyC <= '\u2c2e')) ||
            ('\u2c60' == yyC) ||
            (('\u2c62' <= yyC) && (yyC <= '\u2c64')) ||
            ('\u2c67' == yyC) ||
            ('\u2c69' == yyC) ||
            ('\u2c6b' == yyC) ||
            (('\u2c6d' <= yyC) && (yyC <= '\u2c6f')) ||
            ('\u2c72' == yyC) ||
            ('\u2c75' == yyC) ||
            ('\u2c80' == yyC) ||
            ('\u2c82' == yyC) ||
            ('\u2c84' == yyC) ||
            ('\u2c86' == yyC) ||
            ('\u2c88' == yyC) ||
            ('\u2c8a' == yyC) ||
            ('\u2c8c' == yyC) ||
            ('\u2c8e' == yyC) ||
            ('\u2c90' == yyC) ||
            ('\u2c92' == yyC) ||
            ('\u2c94' == yyC) ||
            ('\u2c96' == yyC) ||
            ('\u2c98' == yyC) ||
            ('\u2c9a' == yyC) ||
            ('\u2c9c' == yyC) ||
            ('\u2c9e' == yyC) ||
            ('\u2ca0' == yyC) ||
            ('\u2ca2' == yyC) ||
            ('\u2ca4' == yyC) ||
            ('\u2ca6' == yyC) ||
            ('\u2ca8' == yyC) ||
            ('\u2caa' == yyC) ||
            ('\u2cac' == yyC) ||
            ('\u2cae' == yyC) ||
            ('\u2cb0' == yyC) ||
            ('\u2cb2' == yyC) ||
            ('\u2cb4' == yyC) ||
            ('\u2cb6' == yyC) ||
            ('\u2cb8' == yyC) ||
            ('\u2cba' == yyC) ||
            ('\u2cbc' == yyC) ||
            ('\u2cbe' == yyC) ||
            ('\u2cc0' == yyC) ||
            ('\u2cc2' == yyC) ||
            ('\u2cc4' == yyC) ||
            ('\u2cc6' == yyC) ||
            ('\u2cc8' == yyC) ||
            ('\u2cca' == yyC) ||
            ('\u2ccc' == yyC) ||
            ('\u2cce' == yyC) ||
            ('\u2cd0' == yyC) ||
            ('\u2cd2' == yyC) ||
            ('\u2cd4' == yyC) ||
            ('\u2cd6' == yyC) ||
            ('\u2cd8' == yyC) ||
            ('\u2cda' == yyC) ||
            ('\u2cdc' == yyC) ||
            ('\u2cde' == yyC) ||
            ('\u2ce0' == yyC) ||
            ('\u2ce2' == yyC) ||
            ('\ua640' == yyC) ||
            ('\ua642' == yyC) ||
            ('\ua644' == yyC) ||
            ('\ua646' == yyC) ||
            ('\ua648' == yyC) ||
            ('\ua64a' == yyC) ||
            ('\ua64c' == yyC) ||
            ('\ua64e' == yyC) ||
            ('\ua650' == yyC) ||
            ('\ua652' == yyC) ||
            ('\ua654' == yyC) ||
            ('\ua656' == yyC) ||
            ('\ua658' == yyC) ||
            ('\ua65a' == yyC) ||
            ('\ua65c' == yyC) ||
            ('\ua65e' == yyC) ||
            ('\ua662' == yyC) ||
            ('\ua664' == yyC) ||
            ('\ua666' == yyC) ||
            ('\ua668' == yyC) ||
            ('\ua66a' == yyC) ||
            ('\ua66c' == yyC) ||
            ('\ua680' == yyC) ||
            ('\ua682' == yyC) ||
            ('\ua684' == yyC) ||
            ('\ua686' == yyC) ||
            ('\ua688' == yyC) ||
            ('\ua68a' == yyC) ||
            ('\ua68c' == yyC) ||
            ('\ua68e' == yyC) ||
            ('\ua690' == yyC) ||
            ('\ua692' == yyC) ||
            ('\ua694' == yyC) ||
            ('\ua696' == yyC) ||
            ('\ua722' == yyC) ||
            ('\ua724' == yyC) ||
            ('\ua726' == yyC) ||
            ('\ua728' == yyC) ||
            ('\ua72a' == yyC) ||
            ('\ua72c' == yyC) ||
            ('\ua72e' == yyC) ||
            ('\ua732' == yyC) ||
            ('\ua734' == yyC) ||
            ('\ua736' == yyC) ||
            ('\ua738' == yyC) ||
            ('\ua73a' == yyC) ||
            ('\ua73c' == yyC) ||
            ('\ua73e' == yyC) ||
            ('\ua740' == yyC) ||
            ('\ua742' == yyC) ||
            ('\ua744' == yyC) ||
            ('\ua746' == yyC) ||
            ('\ua748' == yyC) ||
            ('\ua74a' == yyC) ||
            ('\ua74c' == yyC) ||
            ('\ua74e' == yyC) ||
            ('\ua750' == yyC) ||
            ('\ua752' == yyC) ||
            ('\ua754' == yyC) ||
            ('\ua756' == yyC) ||
            ('\ua758' == yyC) ||
            ('\ua75a' == yyC) ||
            ('\ua75c' == yyC) ||
            ('\ua75e' == yyC) ||
            ('\ua760' == yyC) ||
            ('\ua762' == yyC) ||
            ('\ua764' == yyC) ||
            ('\ua766' == yyC) ||
            ('\ua768' == yyC) ||
            ('\ua76a' == yyC) ||
            ('\ua76c' == yyC) ||
            ('\ua76e' == yyC) ||
            ('\ua779' == yyC) ||
            ('\ua77b' == yyC) ||
            (('\ua77d' <= yyC) && (yyC <= '\ua77e')) ||
            ('\ua780' == yyC) ||
            ('\ua782' == yyC) ||
            ('\ua784' == yyC) ||
            ('\ua786' == yyC) ||
            ('\ua78b' == yyC) ||
            (('\uff21' <= yyC) && (yyC <= '\uff3a'))) {

          yyRepetition1 = yyIndex;
          yyRepeated1   = true;
          continue;
        }
      }

      // Nested alternative 6.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case '\ud801':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if (('7' == yyC) ||
                  (('\u1dc2' <= yyC) && (yyC <= '\udc00'))) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '\ud835':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ((('\udc00' <= yyC) && (yyC <= '\udc19')) ||
                  (('\udc34' <= yyC) && (yyC <= '\udc4d')) ||
                  (('\udc68' <= yyC) && (yyC <= '\udc81')) ||
                  ('\udc9c' == yyC) ||
                  (('\udc9e' <= yyC) && (yyC <= '\udc9f')) ||
                  ('\udca2' == yyC) ||
                  (('\udca5' <= yyC) && (yyC <= '\udca6')) ||
                  (('\udca9' <= yyC) && (yyC <= '\udcac')) ||
                  (('\udcae' <= yyC) && (yyC <= '\udcb5')) ||
                  (('\udcd0' <= yyC) && (yyC <= '\udce9')) ||
                  (('\udd04' <= yyC) && (yyC <= '\udd05')) ||
                  (('\udd07' <= yyC) && (yyC <= '\udd0a')) ||
                  (('\udd0d' <= yyC) && (yyC <= '\udd1c')) ||
                  (('\udd38' <= yyC) && (yyC <= '\udd39')) ||
                  (('\udd3b' <= yyC) && (yyC <= '\udd3e')) ||
                  (('\udd40' <= yyC) && (yyC <= '\udd44')) ||
                  ('\udd46' == yyC) ||
                  (('\udd4a' <= yyC) && (yyC <= '\udd50')) ||
                  (('\udd6c' <= yyC) && (yyC <= '\udd85')) ||
                  (('\udda0' <= yyC) && (yyC <= '\uddb9')) ||
                  (('\uddd4' <= yyC) && (yyC <= '\udded')) ||
                  (('\ude08' <= yyC) && (yyC <= '\ude21')) ||
                  (('\ude3c' <= yyC) && (yyC <= '\ude55')) ||
                  (('\ude70' <= yyC) && (yyC <= '\ude89')) ||
                  (('\udea8' <= yyC) && (yyC <= '\udec0')) ||
                  (('\udee2' <= yyC) && (yyC <= '\udefa')) ||
                  (('\udf1c' <= yyC) && (yyC <= '\udf34')) ||
                  (('\udf56' <= yyC) && (yyC <= '\udf6e')) ||
                  (('\udf90' <= yyC) && (yyC <= '\udfa8')) ||
                  ('\udfca' == yyC)) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        default:
          /* No match. */
        }
      }

      // Nested alternative 7.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;
        if (('\u01c5' == yyC) ||
            ('\u01c8' == yyC) ||
            ('\u01cb' == yyC) ||
            ('\u01f2' == yyC) ||
            (('\u1f88' <= yyC) && (yyC <= '\u1f8f')) ||
            (('\u1f98' <= yyC) && (yyC <= '\u1f9f')) ||
            (('\u1fa8' <= yyC) && (yyC <= '\u1faf')) ||
            ('\u1fbc' == yyC) ||
            ('\u1fcc' == yyC) ||
            ('\u1ffc' == yyC)) {

          yyRepetition1 = yyIndex;
          yyRepeated1   = true;
          continue;
        }
      }

      // Nested alternative 8.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;
        if (('\u01bb' == yyC) ||
            (('\u01c0' <= yyC) && (yyC <= '\u01c3')) ||
            ('\u0294' == yyC) ||
            (('\u05d0' <= yyC) && (yyC <= '\u05ea')) ||
            (('\u05f0' <= yyC) && (yyC <= '\u05f2')) ||
            (('\u0621' <= yyC) && (yyC <= '\u063f')) ||
            (('\u0641' <= yyC) && (yyC <= '\u064a')) ||
            (('\u066e' <= yyC) && (yyC <= '\u066f')) ||
            (('\u0671' <= yyC) && (yyC <= '\u06d3')) ||
            ('\u06d5' == yyC) ||
            (('\u06ee' <= yyC) && (yyC <= '\u06ef')) ||
            (('\u06fa' <= yyC) && (yyC <= '\u06fc')) ||
            ('\u06ff' == yyC) ||
            ('\u0710' == yyC) ||
            (('\u0712' <= yyC) && (yyC <= '\u072f')) ||
            (('\u074d' <= yyC) && (yyC <= '\u07a5')) ||
            ('\u07b1' == yyC) ||
            (('\u07ca' <= yyC) && (yyC <= '\u07ea')) ||
            (('\u0904' <= yyC) && (yyC <= '\u0939')) ||
            ('\u093d' == yyC) ||
            ('\u0950' == yyC) ||
            (('\u0958' <= yyC) && (yyC <= '\u0961')) ||
            ('\u0972' == yyC) ||
            (('\u097b' <= yyC) && (yyC <= '\u097f')) ||
            (('\u0985' <= yyC) && (yyC <= '\u098c')) ||
            (('\u098f' <= yyC) && (yyC <= '\u0990')) ||
            (('\u0993' <= yyC) && (yyC <= '\u09a8')) ||
            (('\u09aa' <= yyC) && (yyC <= '\u09b0')) ||
            ('\u09b2' == yyC) ||
            (('\u09b6' <= yyC) && (yyC <= '\u09b9')) ||
            ('\u09bd' == yyC) ||
            ('\u09ce' == yyC) ||
            (('\u09dc' <= yyC) && (yyC <= '\u09dd')) ||
            (('\u09df' <= yyC) && (yyC <= '\u09e1')) ||
            (('\u09f0' <= yyC) && (yyC <= '\u09f1')) ||
            (('\u0a05' <= yyC) && (yyC <= '\u0a0a')) ||
            (('\u0a0f' <= yyC) && (yyC <= '\u0a10')) ||
            (('\u0a13' <= yyC) && (yyC <= '\u0a28')) ||
            (('\u0a2a' <= yyC) && (yyC <= '\u0a30')) ||
            (('\u0a32' <= yyC) && (yyC <= '\u0a33')) ||
            (('\u0a35' <= yyC) && (yyC <= '\u0a36')) ||
            (('\u0a38' <= yyC) && (yyC <= '\u0a39')) ||
            (('\u0a59' <= yyC) && (yyC <= '\u0a5e')) ||
            (('\u0a72' <= yyC) && (yyC <= '\u0a74')) ||
            (('\u0a85' <= yyC) && (yyC <= '\u0aa8')) ||
            (('\u0aaa' <= yyC) && (yyC <= '\u0ab0')) ||
            (('\u0ab2' <= yyC) && (yyC <= '\u0ab3')) ||
            (('\u0ab5' <= yyC) && (yyC <= '\u0ab9')) ||
            ('\u0abd' == yyC) ||
            ('\u0ad0' == yyC) ||
            (('\u0ae0' <= yyC) && (yyC <= '\u0ae1')) ||
            (('\u0b05' <= yyC) && (yyC <= '\u0b0c')) ||
            (('\u0b0f' <= yyC) && (yyC <= '\u0b10')) ||
            (('\u0b13' <= yyC) && (yyC <= '\u0b28')) ||
            (('\u0b2a' <= yyC) && (yyC <= '\u0b30')) ||
            (('\u0b32' <= yyC) && (yyC <= '\u0b33')) ||
            (('\u0b35' <= yyC) && (yyC <= '\u0b39')) ||
            ('\u0b3d' == yyC) ||
            (('\u0b5c' <= yyC) && (yyC <= '\u0b5d')) ||
            (('\u0b5f' <= yyC) && (yyC <= '\u0b61')) ||
            ('\u0b71' == yyC) ||
            ('\u0b83' == yyC) ||
            (('\u0b85' <= yyC) && (yyC <= '\u0b8a')) ||
            (('\u0b8e' <= yyC) && (yyC <= '\u0b90')) ||
            (('\u0b92' <= yyC) && (yyC <= '\u0b95')) ||
            (('\u0b99' <= yyC) && (yyC <= '\u0b9a')) ||
            ('\u0b9c' == yyC) ||
            (('\u0b9e' <= yyC) && (yyC <= '\u0b9f')) ||
            (('\u0ba3' <= yyC) && (yyC <= '\u0ba4')) ||
            (('\u0ba8' <= yyC) && (yyC <= '\u0baa')) ||
            (('\u0bae' <= yyC) && (yyC <= '\u0bb9')) ||
            ('\u0bd0' == yyC) ||
            (('\u0c05' <= yyC) && (yyC <= '\u0c0c')) ||
            (('\u0c0e' <= yyC) && (yyC <= '\u0c10')) ||
            (('\u0c12' <= yyC) && (yyC <= '\u0c28')) ||
            (('\u0c2a' <= yyC) && (yyC <= '\u0c33')) ||
            (('\u0c35' <= yyC) && (yyC <= '\u0c39')) ||
            ('\u0c3d' == yyC) ||
            (('\u0c58' <= yyC) && (yyC <= '\u0c61')) ||
            (('\u0c85' <= yyC) && (yyC <= '\u0c90')) ||
            (('\u0c92' <= yyC) && (yyC <= '\u0ca8')) ||
            (('\u0caa' <= yyC) && (yyC <= '\u0cb9')) ||
            ('\u0cbd' == yyC) ||
            ('\u0cde' == yyC) ||
            (('\u0ce0' <= yyC) && (yyC <= '\u0ce1')) ||
            (('\u0d05' <= yyC) && (yyC <= '\u0d10')) ||
            (('\u0d12' <= yyC) && (yyC <= '\u0d28')) ||
            (('\u0d2a' <= yyC) && (yyC <= '\u0d39')) ||
            ('\u0d3d' == yyC) ||
            (('\u0d60' <= yyC) && (yyC <= '\u0d61')) ||
            (('\u0d7a' <= yyC) && (yyC <= '\u0d7f')) ||
            (('\u0d85' <= yyC) && (yyC <= '\u0d96')) ||
            (('\u0d9a' <= yyC) && (yyC <= '\u0dbb')) ||
            ('\u0dbd' == yyC) ||
            (('\u0dc0' <= yyC) && (yyC <= '\u0dc6')) ||
            (('\u0e01' <= yyC) && (yyC <= '\u0e30')) ||
            (('\u0e32' <= yyC) && (yyC <= '\u0e33')) ||
            (('\u0e40' <= yyC) && (yyC <= '\u0e45')) ||
            (('\u0e81' <= yyC) && (yyC <= '\u0e82')) ||
            ('\u0e84' == yyC) ||
            (('\u0e87' <= yyC) && (yyC <= '\u0e88')) ||
            ('\u0e8a' == yyC) ||
            ('\u0e8d' == yyC) ||
            (('\u0e94' <= yyC) && (yyC <= '\u0e97')) ||
            (('\u0e99' <= yyC) && (yyC <= '\u0e9f')) ||
            (('\u0ea1' <= yyC) && (yyC <= '\u0ea3')) ||
            ('\u0ea5' == yyC) ||
            ('\u0ea7' == yyC) ||
            (('\u0eaa' <= yyC) && (yyC <= '\u0eab')) ||
            (('\u0ead' <= yyC) && (yyC <= '\u0eb0')) ||
            (('\u0eb2' <= yyC) && (yyC <= '\u0eb3')) ||
            ('\u0ebd' == yyC) ||
            (('\u0ec0' <= yyC) && (yyC <= '\u0ec4')) ||
            (('\u0edc' <= yyC) && (yyC <= '\u0edd')) ||
            ('\u0f00' == yyC) ||
            (('\u0f40' <= yyC) && (yyC <= '\u0f47')) ||
            (('\u0f49' <= yyC) && (yyC <= '\u0f6c')) ||
            (('\u0f88' <= yyC) && (yyC <= '\u0f8b')) ||
            (('\u1000' <= yyC) && (yyC <= '\u102a')) ||
            ('\u103f' == yyC) ||
            (('\u1050' <= yyC) && (yyC <= '\u1055')) ||
            (('\u105a' <= yyC) && (yyC <= '\u105d')) ||
            ('\u1061' == yyC) ||
            (('\u1065' <= yyC) && (yyC <= '\u1066')) ||
            (('\u106e' <= yyC) && (yyC <= '\u1070')) ||
            (('\u1075' <= yyC) && (yyC <= '\u1081')) ||
            ('\u108e' == yyC) ||
            (('\u10d0' <= yyC) && (yyC <= '\u10fa')) ||
            (('\u1100' <= yyC) && (yyC <= '\u1159')) ||
            (('\u115f' <= yyC) && (yyC <= '\u11a2')) ||
            (('\u11a8' <= yyC) && (yyC <= '\u11f9')) ||
            (('\u1200' <= yyC) && (yyC <= '\u1248')) ||
            (('\u124a' <= yyC) && (yyC <= '\u124d')) ||
            (('\u1250' <= yyC) && (yyC <= '\u1258')) ||
            (('\u125a' <= yyC) && (yyC <= '\u125d')) ||
            (('\u1260' <= yyC) && (yyC <= '\u1288')) ||
            (('\u128a' <= yyC) && (yyC <= '\u128d')) ||
            (('\u1290' <= yyC) && (yyC <= '\u12b0')) ||
            (('\u12b2' <= yyC) && (yyC <= '\u12b5')) ||
            (('\u12b8' <= yyC) && (yyC <= '\u12be')) ||
            ('\u12c0' == yyC) ||
            (('\u12c2' <= yyC) && (yyC <= '\u12c5')) ||
            (('\u12c8' <= yyC) && (yyC <= '\u1310')) ||
            (('\u1312' <= yyC) && (yyC <= '\u1315')) ||
            (('\u1318' <= yyC) && (yyC <= '\u135a')) ||
            (('\u1380' <= yyC) && (yyC <= '\u13f4')) ||
            (('\u1401' <= yyC) && (yyC <= '\u1676')) ||
            (('\u1681' <= yyC) && (yyC <= '\u169a')) ||
            (('\u16a0' <= yyC) && (yyC <= '\u16ea')) ||
            (('\u1700' <= yyC) && (yyC <= '\u1731')) ||
            (('\u1740' <= yyC) && (yyC <= '\u1751')) ||
            (('\u1760' <= yyC) && (yyC <= '\u1770')) ||
            (('\u1780' <= yyC) && (yyC <= '\u17b3')) ||
            ('\u17dc' == yyC) ||
            (('\u1820' <= yyC) && (yyC <= '\u1842')) ||
            (('\u1844' <= yyC) && (yyC <= '\u1877')) ||
            (('\u1880' <= yyC) && (yyC <= '\u18a8')) ||
            (('\u18aa' <= yyC) && (yyC <= '\u191c')) ||
            (('\u1950' <= yyC) && (yyC <= '\u196d')) ||
            (('\u1970' <= yyC) && (yyC <= '\u1974')) ||
            (('\u1980' <= yyC) && (yyC <= '\u19a9')) ||
            (('\u19c1' <= yyC) && (yyC <= '\u19c7')) ||
            (('\u1a00' <= yyC) && (yyC <= '\u1b4b')) ||
            (('\u1b83' <= yyC) && (yyC <= '\u1ba0')) ||
            (('\u1bae' <= yyC) && (yyC <= '\u1baf')) ||
            (('\u1c00' <= yyC) && (yyC <= '\u1c23')) ||
            (('\u1c4d' <= yyC) && (yyC <= '\u1c4f')) ||
            (('\u1c5a' <= yyC) && (yyC <= '\u1c77')) ||
            (('\u2135' <= yyC) && (yyC <= '\u2138')) ||
            (('\u2d30' <= yyC) && (yyC <= '\u2d65')) ||
            (('\u2d80' <= yyC) && (yyC <= '\u2d96')) ||
            (('\u2da0' <= yyC) && (yyC <= '\u2dae')) ||
            (('\u2db0' <= yyC) && (yyC <= '\u2db6')) ||
            (('\u2db8' <= yyC) && (yyC <= '\u2dbe')) ||
            (('\u2dc0' <= yyC) && (yyC <= '\u2dc6')) ||
            (('\u2dc8' <= yyC) && (yyC <= '\u2dde')) ||
            ('\u3006' == yyC) ||
            ('\u303c' == yyC) ||
            (('\u3041' <= yyC) && (yyC <= '\u3096')) ||
            ('\u309f' == yyC) ||
            (('\u30a1' <= yyC) && (yyC <= '\u30fa')) ||
            ('\u30ff' == yyC) ||
            (('\u3105' <= yyC) && (yyC <= '\u312d')) ||
            (('\u3131' <= yyC) && (yyC <= '\u318e')) ||
            (('\u31a0' <= yyC) && (yyC <= '\u31b7')) ||
            (('\u31f0' <= yyC) && (yyC <= '\u31ff')) ||
            ('\u3400' == yyC) ||
            ('\u4db5' == yyC) ||
            ('\u4e00' == yyC) ||
            ('\u9fc3' == yyC) ||
            (('\ua000' <= yyC) && (yyC <= '\ua60b')) ||
            (('\ua610' <= yyC) && (yyC <= '\ua873')) ||
            (('\ua882' <= yyC) && (yyC <= '\ua8b3')) ||
            (('\ua90a' <= yyC) && (yyC <= '\ua925')) ||
            (('\ua930' <= yyC) && (yyC <= '\ua946')) ||
            (('\uaa00' <= yyC) && (yyC <= '\uaa4b')) ||
            ('\uac00' == yyC) ||
            ('\ud7a3' == yyC) ||
            (('\uf900' <= yyC) && (yyC <= '\ufa2d')) ||
            (('\ufa30' <= yyC) && (yyC <= '\ufa6a')) ||
            (('\ufa70' <= yyC) && (yyC <= '\ufb28')) ||
            (('\ufb2a' <= yyC) && (yyC <= '\ufb3e')) ||
            (('\ufb40' <= yyC) && (yyC <= '\ufb41')) ||
            (('\ufb43' <= yyC) && (yyC <= '\ufb44')) ||
            (('\ufb46' <= yyC) && (yyC <= '\ufbb1')) ||
            (('\ufbd3' <= yyC) && (yyC <= '\ufd3d')) ||
            (('\ufd50' <= yyC) && (yyC <= '\ufd8f')) ||
            (('\ufd92' <= yyC) && (yyC <= '\ufdc7')) ||
            (('\ufdf0' <= yyC) && (yyC <= '\ufdfb')) ||
            (('\ufe70' <= yyC) && (yyC <= '\ufe74')) ||
            (('\ufe76' <= yyC) && (yyC <= '\ufefc')) ||
            (('\uff66' <= yyC) && (yyC <= '\uff6f')) ||
            (('\uff71' <= yyC) && (yyC <= '\uff9d')) ||
            (('\uffa0' <= yyC) && (yyC <= '\uffbe')) ||
            (('\uffc2' <= yyC) && (yyC <= '\uffc7')) ||
            (('\uffca' <= yyC) && (yyC <= '\uffcf')) ||
            (('\uffd2' <= yyC) && (yyC <= '\uffd7')) ||
            (('\uffda' <= yyC) && (yyC <= '\uffdc'))) {

          yyRepetition1 = yyIndex;
          yyRepeated1   = true;
          continue;
        }
      }

      // Nested alternative 9.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case '\ud800':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ((('\udc00' <= yyC) && (yyC <= '\udc3a')) ||
                  (('\udc3c' <= yyC) && (yyC <= '\udc3d')) ||
                  (('\udc3f' <= yyC) && (yyC <= '\udc4d')) ||
                  (('\udc50' <= yyC) && (yyC <= '\udc5d')) ||
                  (('\udc80' <= yyC) && (yyC <= '\udcfa')) ||
                  (('\ude80' <= yyC) && (yyC <= '\ude9c')) ||
                  (('\udea0' <= yyC) && (yyC <= '\uded0')) ||
                  (('\udf00' <= yyC) && (yyC <= '\udf1e')) ||
                  (('\udf30' <= yyC) && (yyC <= '\udf40')) ||
                  (('\udf42' <= yyC) && (yyC <= '\udf49')) ||
                  (('\udf80' <= yyC) && (yyC <= '\udf9d')) ||
                  (('\udfa0' <= yyC) && (yyC <= '\udfc3')) ||
                  (('\udfc8' <= yyC) && (yyC <= '\udfff'))) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '\ud801':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if (('\udc00' <= yyC) && (yyC <= '\udc9d')) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '\ud802':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ((('\udc00' <= yyC) && (yyC <= '\udc05')) ||
                  ('\udc08' == yyC) ||
                  (('\udc0a' <= yyC) && (yyC <= '\udc38')) ||
                  ('\udc3c' == yyC) ||
                  ('\udc3f' == yyC) ||
                  (('\udd00' <= yyC) && (yyC <= '\udd15')) ||
                  (('\udd20' <= yyC) && (yyC <= '\udd39')) ||
                  (('\ude00' <= yyC) && (yyC <= '\ude13')) ||
                  (('\ude15' <= yyC) && (yyC <= '\ude17')) ||
                  (('\ude19' <= yyC) && (yyC <= '\ude33'))) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '\ud808':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if (('\udc00' <= yyC) && (yyC <= '\udf6e')) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '\ud840':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('\udc00' == yyC) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '\ud869':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('\uded6' == yyC) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '\ud87e':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if (('D' == yyC) ||
                  (('\u2de1' <= yyC) && (yyC <= '\udc00'))) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        default:
          /* No match. */
        }
      }

      // Nested alternative 10.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;
        if ((('\u16ee' <= yyC) && (yyC <= '\u16f0')) ||
            (('\u2160' <= yyC) && (yyC <= '\u2182')) ||
            (('\u2185' <= yyC) && (yyC <= '\u2188')) ||
            ('\u3007' == yyC) ||
            (('\u3021' <= yyC) && (yyC <= '\u3029')) ||
            (('\u3038' <= yyC) && (yyC <= '\u303a'))) {

          yyRepetition1 = yyIndex;
          yyRepeated1   = true;
          continue;
        }
      }

      // Nested alternative 11.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case '\ud800':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ((('\udd40' <= yyC) && (yyC <= '\udd74')) ||
                  ('\udf41' == yyC) ||
                  ('\udf4a' == yyC) ||
                  (('\udfd1' <= yyC) && (yyC <= '\udfd5'))) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '\ud809':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if (('\udc00' <= yyC) && (yyC <= '\udc62')) {

                yyRepetition1 = yyIndex;
                yyRepeated1   = true;
                continue;
              }
            }
          }
          break;

        case '$':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        case '_':
          {
            yyPredMatched = false;

            yyRepetition2 = yyIndex;
            yyRepeated2   = false;
            while (true) {

              yyPredResult = popchar(yyRepetition2);
              if (yyPredResult.hasValue()) {

                yyRepetition2 = yyPredResult.index;
                yyRepeated2   = true;
                continue;
              }
              break;
            }

            if (yyRepeated2) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyRepetition1 = yyIndex;
              yyRepeated1   = true;
              continue;
            } else {
              yyError = yyError.select("idrest expected", yyStart);
            }
          }
          break;

        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        default:
          /* No match. */
        }
      }
      break;
    }

    if (yyRepeated1) {

      yyOption1  = yyRepetition1;

      yyC = character(yyOption1);
      if ('_' == yyC) {
        yyIndex = yyOption1 + 1;

        yyResult = popIdentifier(yyIndex);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {

          yyOption1  = yyResult.index;
        }
      }

      yyValue = null;

      return new SemanticValue(yyValue, yyOption1, yyError);
    }

    // Alternative 2.

    yyC = character(yyStart);
    if ('_' == yyC) {
      yyIndex = yyStart + 1;

      yyRepetition1 = yyIndex;
      yyRepeated1   = false;
      while (true) {

        yyResult = popchar(yyRepetition1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyRepetition1 = yyResult.index;
          yyRepeated1   = true;
          continue;
        }
        break;
      }

      if (yyRepeated1) {

        yyValue = null;

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      }
    }

    // Done.
    yyError = yyError.select("idrest expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Identifier.opchar.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result popchar(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '!':
      case '#':
      case '%':
      case '&':
      case '*':
      case '+':
      case '-':
      case '/':
      case ':':
      case '<':
      case '=':
      case '>':
      case '?':
      case '@':
      case '\\':
      case '^':
      case '`':
      case '|':
      case '~':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Alternative 2.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if (('+' == yyC) ||
          (('<' <= yyC) && (yyC <= '>')) ||
          ('|' == yyC) ||
          ('~' == yyC) ||
          ('\u00ac' == yyC) ||
          ('\u00b1' == yyC) ||
          ('\u00d7' == yyC) ||
          ('\u00f7' == yyC) ||
          ('\u03f6' == yyC) ||
          (('\u0606' <= yyC) && (yyC <= '\u0608')) ||
          ('\u2044' == yyC) ||
          ('\u2052' == yyC) ||
          (('\u207a' <= yyC) && (yyC <= '\u207c')) ||
          (('\u208a' <= yyC) && (yyC <= '\u208c')) ||
          (('\u2140' <= yyC) && (yyC <= '\u2144')) ||
          ('\u214b' == yyC) ||
          (('\u2190' <= yyC) && (yyC <= '\u2194')) ||
          (('\u219a' <= yyC) && (yyC <= '\u219b')) ||
          ('\u21a0' == yyC) ||
          ('\u21a3' == yyC) ||
          ('\u21a6' == yyC) ||
          ('\u21ae' == yyC) ||
          (('\u21ce' <= yyC) && (yyC <= '\u21cf')) ||
          ('\u21d2' == yyC) ||
          ('\u21d4' == yyC) ||
          (('\u21f4' <= yyC) && (yyC <= '\u22ff')) ||
          (('\u2308' <= yyC) && (yyC <= '\u230b')) ||
          (('\u2320' <= yyC) && (yyC <= '\u2321')) ||
          ('\u237c' == yyC) ||
          (('\u239b' <= yyC) && (yyC <= '\u23b3')) ||
          (('\u23dc' <= yyC) && (yyC <= '\u23e1')) ||
          ('\u25b7' == yyC) ||
          ('\u25c1' == yyC) ||
          (('\u25f8' <= yyC) && (yyC <= '\u25ff')) ||
          ('\u266f' == yyC) ||
          (('\u27c0' <= yyC) && (yyC <= '\u27ca')) ||
          ('\u27cc' == yyC) ||
          (('\u27d0' <= yyC) && (yyC <= '\u27e5')) ||
          (('\u27f0' <= yyC) && (yyC <= '\u27ff')) ||
          (('\u2900' <= yyC) && (yyC <= '\u2982')) ||
          ('\u2999' == yyC) ||
          (('\u29c6' <= yyC) && (yyC <= '\u29d7')) ||
          (('\u29dc' <= yyC) && (yyC <= '\u29fb')) ||
          (('\u29fe' <= yyC) && (yyC <= '\u2aff')) ||
          (('\u2b30' <= yyC) && (yyC <= '\u2b44')) ||
          (('\u2b47' <= yyC) && (yyC <= '\u2b4c')) ||
          ('\ufb29' == yyC) ||
          ('\ufe62' == yyC) ||
          (('\ufe64' <= yyC) && (yyC <= '\ufe66')) ||
          ('\uff0b' == yyC) ||
          (('\uff1c' <= yyC) && (yyC <= '\uff1e')) ||
          ('\uff5c' == yyC) ||
          ('\uff5e' == yyC) ||
          ('\uffe2' == yyC) ||
          (('\uffe9' <= yyC) && (yyC <= '\uffec'))) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 3.

    yyC = character(yyStart);
    if ('\ud835' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if (-1 != yyC) {
        yyIndex = yyIndex + 1;

        switch (yyC) {
        case '\udec1':
        case '\udedb':
        case '\udefb':
        case '\udf15':
        case '\udf35':
        case '\udf4f':
        case '\udf6f':
        case '\udf89':
        case '\udfa9':
        case '\udfc3':
          {
            yyValue = null;

            return new SemanticValue(yyValue, yyIndex, yyError);
          }

        default:
          /* No match. */
        }
      }
    }

    // Alternative 4.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;
      if ((('\u00a6' <= yyC) && (yyC <= '\u00a7')) ||
          ('\u00a9' == yyC) ||
          ('\u00ae' == yyC) ||
          ('\u00b0' == yyC) ||
          ('\u00b6' == yyC) ||
          ('\u0482' == yyC) ||
          (('\u060e' <= yyC) && (yyC <= '\u060f')) ||
          ('\u06e9' == yyC) ||
          (('\u06fd' <= yyC) && (yyC <= '\u06fe')) ||
          ('\u07f6' == yyC) ||
          ('\u09fa' == yyC) ||
          ('\u0b70' == yyC) ||
          (('\u0bf3' <= yyC) && (yyC <= '\u0bf8')) ||
          ('\u0bfa' == yyC) ||
          ('\u0c7f' == yyC) ||
          (('\u0cf1' <= yyC) && (yyC <= '\u0cf2')) ||
          ('\u0d79' == yyC) ||
          (('\u0f01' <= yyC) && (yyC <= '\u0f03')) ||
          (('\u0f13' <= yyC) && (yyC <= '\u0f17')) ||
          (('\u0f1a' <= yyC) && (yyC <= '\u0f1f')) ||
          ('\u0f34' == yyC) ||
          ('\u0f36' == yyC) ||
          ('\u0f38' == yyC) ||
          (('\u0fbe' <= yyC) && (yyC <= '\u0fcf')) ||
          (('\u109e' <= yyC) && (yyC <= '\u109f')) ||
          ('\u1360' == yyC) ||
          (('\u1390' <= yyC) && (yyC <= '\u1399')) ||
          ('\u1940' == yyC) ||
          (('\u19e0' <= yyC) && (yyC <= '\u19ff')) ||
          (('\u1b61' <= yyC) && (yyC <= '\u1b6a')) ||
          (('\u1b74' <= yyC) && (yyC <= '\u1b7c')) ||
          (('\u2100' <= yyC) && (yyC <= '\u2106')) ||
          (('\u2108' <= yyC) && (yyC <= '\u2109')) ||
          ('\u2114' == yyC) ||
          (('\u2116' <= yyC) && (yyC <= '\u2118')) ||
          (('\u211e' <= yyC) && (yyC <= '\u2123')) ||
          ('\u2125' == yyC) ||
          ('\u2127' == yyC) ||
          ('\u2129' == yyC) ||
          ('\u212e' == yyC) ||
          (('\u213a' <= yyC) && (yyC <= '\u213b')) ||
          ('\u214a' == yyC) ||
          (('\u214c' <= yyC) && (yyC <= '\u214d')) ||
          ('\u214f' == yyC) ||
          (('\u2195' <= yyC) && (yyC <= '\u2199')) ||
          (('\u219c' <= yyC) && (yyC <= '\u219f')) ||
          (('\u21a1' <= yyC) && (yyC <= '\u21a2')) ||
          (('\u21a4' <= yyC) && (yyC <= '\u21a5')) ||
          (('\u21a7' <= yyC) && (yyC <= '\u21ad')) ||
          (('\u21af' <= yyC) && (yyC <= '\u21cd')) ||
          (('\u21d0' <= yyC) && (yyC <= '\u21d1')) ||
          ('\u21d3' == yyC) ||
          (('\u21d5' <= yyC) && (yyC <= '\u21f3')) ||
          (('\u2300' <= yyC) && (yyC <= '\u2307')) ||
          (('\u230c' <= yyC) && (yyC <= '\u231f')) ||
          (('\u2322' <= yyC) && (yyC <= '\u2328')) ||
          (('\u232b' <= yyC) && (yyC <= '\u237b')) ||
          (('\u237d' <= yyC) && (yyC <= '\u239a')) ||
          (('\u23b4' <= yyC) && (yyC <= '\u23db')) ||
          (('\u23e2' <= yyC) && (yyC <= '\u23e7')) ||
          (('\u2400' <= yyC) && (yyC <= '\u2426')) ||
          (('\u2440' <= yyC) && (yyC <= '\u244a')) ||
          (('\u249c' <= yyC) && (yyC <= '\u24e9')) ||
          (('\u2500' <= yyC) && (yyC <= '\u25b6')) ||
          (('\u25b8' <= yyC) && (yyC <= '\u25c0')) ||
          (('\u25c2' <= yyC) && (yyC <= '\u25f7')) ||
          (('\u2600' <= yyC) && (yyC <= '\u26bc')) ||
          (('\u26c0' <= yyC) && (yyC <= '\u26c3')) ||
          (('\u2701' <= yyC) && (yyC <= '\u2704')) ||
          (('\u2706' <= yyC) && (yyC <= '\u2709')) ||
          (('\u270c' <= yyC) && (yyC <= '\u2727')) ||
          (('\u2729' <= yyC) && (yyC <= '\u274b')) ||
          ('\u274d' == yyC) ||
          (('\u274f' <= yyC) && (yyC <= '\u2752')) ||
          ('\u2756' == yyC) ||
          (('\u2758' <= yyC) && (yyC <= '\u275e')) ||
          (('\u2761' <= yyC) && (yyC <= '\u2767')) ||
          ('\u2794' == yyC) ||
          (('\u2798' <= yyC) && (yyC <= '\u27af')) ||
          (('\u27b1' <= yyC) && (yyC <= '\u27be')) ||
          (('\u2800' <= yyC) && (yyC <= '\u2b2f')) ||
          (('\u2b45' <= yyC) && (yyC <= '\u2b46')) ||
          (('\u2b50' <= yyC) && (yyC <= '\u2b54')) ||
          (('\u2ce5' <= yyC) && (yyC <= '\u2cea')) ||
          (('\u2e80' <= yyC) && (yyC <= '\u2e99')) ||
          (('\u2e9b' <= yyC) && (yyC <= '\u2ef3')) ||
          (('\u2f00' <= yyC) && (yyC <= '\u2fd5')) ||
          (('\u2ff0' <= yyC) && (yyC <= '\u2ffb')) ||
          ('\u3004' == yyC) ||
          (('\u3012' <= yyC) && (yyC <= '\u3013')) ||
          ('\u3020' == yyC) ||
          (('\u3036' <= yyC) && (yyC <= '\u3037')) ||
          (('\u303e' <= yyC) && (yyC <= '\u303f')) ||
          (('\u3190' <= yyC) && (yyC <= '\u3191')) ||
          (('\u3196' <= yyC) && (yyC <= '\u31e3')) ||
          (('\u3200' <= yyC) && (yyC <= '\u321e')) ||
          (('\u322a' <= yyC) && (yyC <= '\u3243')) ||
          ('\u3250' == yyC) ||
          (('\u3260' <= yyC) && (yyC <= '\u327f')) ||
          (('\u328a' <= yyC) && (yyC <= '\u32b0')) ||
          (('\u32c0' <= yyC) && (yyC <= '\u32fe')) ||
          (('\u3300' <= yyC) && (yyC <= '\ua4c6')) ||
          (('\ua828' <= yyC) && (yyC <= '\ua82b')) ||
          ('\ufdfd' == yyC) ||
          ('\uffe4' == yyC) ||
          ('\uffe8' == yyC) ||
          (('\uffed' <= yyC) && (yyC <= '\uffee')) ||
          (('\ufffc' <= yyC) && (yyC <= '\ufffd'))) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Alternative 5.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '\ud800':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if (('\udd02' == yyC) ||
                (('\udd37' <= yyC) && (yyC <= '\udd3f')) ||
                (('\udd79' <= yyC) && (yyC <= '\udd9b')) ||
                (('\uddd0' <= yyC) && (yyC <= '\uddfc'))) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      case '\ud834':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if ((('\udc00' <= yyC) && (yyC <= '\udcf5')) ||
                (('\udd00' <= yyC) && (yyC <= '\udd6c')) ||
                (('\udd83' <= yyC) && (yyC <= '\udd84')) ||
                (('\udd8c' <= yyC) && (yyC <= '\udda9')) ||
                (('\uddae' <= yyC) && (yyC <= '\ude41')) ||
                ('\ude45' == yyC) ||
                (('\udf00' <= yyC) && (yyC <= '\udf56'))) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      case '\ud83c':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if (('\udc00' <= yyC) && (yyC <= '\udc93')) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("opchar expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Keyword.ThisKey.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pThisKey(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk6) yyColumn.chunk6 = new Chunk6();
    if (null == yyColumn.chunk6.fThisKey)
      yyColumn.chunk6.fThisKey = pThisKey$1(yyStart);
    return yyColumn.chunk6.fThisKey;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.Keyword.ThisKey. */
  private Result pThisKey$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("this")) {
      String v$g$1 = "this";

      yyValue = GNode.create("ThisKey", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("this key expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Keyword.SuperKey.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSuperKey(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("super")) {
      String v$g$1 = "super";

      yyValue = GNode.create("SuperKey", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("super key expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Keyword.WildKey.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pWildKey(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk7) yyColumn.chunk7 = new Chunk7();
    if (null == yyColumn.chunk7.fWildKey)
      yyColumn.chunk7.fWildKey = pWildKey$1(yyStart);
    return yyColumn.chunk7.fWildKey;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.Keyword.WildKey. */
  private Result pWildKey$1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pkey(yyStart);
    if (yyResult.hasValue("_")) {
      String v$g$1 = "_";

      yyValue = GNode.create("WildKey", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("wild key expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Keyword.key.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pkey(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk7) yyColumn.chunk7 = new Chunk7();
    if (null == yyColumn.chunk7.fkey) yyColumn.chunk7.fkey = pkey$1(yyStart);
    return yyColumn.chunk7.fkey;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.Keyword.key. */
  private Result pkey$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSKIP_N(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("catch")) {
        yyValue = "catch";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'catch' expected", yyBase);
      }

      // Nested alternative 2.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("else")) {
        yyValue = "else";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'else' expected", yyBase);
      }

      // Nested alternative 3.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("extends")) {
        yyValue = "extends";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'extends' expected", yyBase);
      }

      // Nested alternative 4.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("finally")) {
        yyValue = "finally";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'finally' expected", yyBase);
      }

      // Nested alternative 5.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("forSome")) {
        yyValue = "forSome";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'forSome' expected", yyBase);
      }

      // Nested alternative 6.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("match")) {
        yyValue = "match";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'match' expected", yyBase);
      }

      // Nested alternative 7.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("requires")) {
        yyValue = "requires";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'requires' expected", yyBase);
      }

      // Nested alternative 8.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("with")) {
        yyValue = "with";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'with' expected", yyBase);
      }

      // Nested alternative 9.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("yield")) {
        yyValue = "yield";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'yield' expected", yyBase);
      }

      // Nested alternative 10.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("=>")) {
        yyValue = "=>";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'=>' expected", yyBase);
      }

      // Nested alternative 11.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("\u21d2")) {
        yyValue = "\u21d2";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'\\u21d2' expected", yyBase);
      }

      // Nested alternative 12.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("<-")) {
        yyValue = "<-";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'<-' expected", yyBase);
      }

      // Nested alternative 13.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("\u2190")) {
        yyValue = "\u2190";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'\\u2190' expected", yyBase);
      }

      // Nested alternative 14.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("<:")) {
        yyValue = "<:";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'<:' expected", yyBase);
      }

      // Nested alternative 15.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("<%")) {
        yyValue = "<%";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'<%' expected", yyBase);
      }

      // Nested alternative 16.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue(">:")) {
        yyValue = ">:";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'>:' expected", yyBase);
      }

      // Nested alternative 17.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("#")) {
        yyValue = "#";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'#' expected", yyBase);
      }

      // Nested alternative 18.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("=")) {
        yyValue = "=";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'=' expected", yyBase);
      }

      // Nested alternative 19.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue(":")) {
        yyValue = ":";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("':' expected", yyBase);
      }
    }

    // Alternative 2.

    yyResult = pSKIP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("this")) {
        yyValue = "this";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'this' expected", yyBase);
      }

      // Nested alternative 2.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("null")) {
        yyValue = "null";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'null' expected", yyBase);
      }

      // Nested alternative 3.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("true")) {
        yyValue = "true";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'true' expected", yyBase);
      }

      // Nested alternative 4.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("false")) {
        yyValue = "false";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'false' expected", yyBase);
      }

      // Nested alternative 5.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("return")) {
        yyValue = "return";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'return' expected", yyBase);
      }

      // Nested alternative 6.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("type")) {
        yyValue = "type";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'type' expected", yyBase);
      }

      // Nested alternative 7.

      yyBase   = yyChoice1;
      yyResult = pkeyword(yyBase);
      if (yyResult.hasValue("_")) {
        yyValue = "_";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'_' expected", yyBase);
      }

      // Nested alternative 8.

      yyResult = pkeyword(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Keyword.keyword.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pkeyword(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk7) yyColumn.chunk7 = new Chunk7();
    if (null == yyColumn.chunk7.fkeyword)
      yyColumn.chunk7.fkeyword = pkeyword$1(yyStart);
    return yyColumn.chunk7.fkeyword;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.Keyword.keyword. */
  private Result pkeyword$1(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyPredResult;
    boolean    yyPredMatched;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyPredMatched = false;

    yyC = character(yyStart);
    if ('\'' == yyC) {

      yyPredMatched = true;
    }

    if (! yyPredMatched) {

      final int yyChoice1 = yyStart;

      // Nested alternative 1.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case 'a':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('b' == yyC) {

                yyC = character(yyIndex);
                if (-1 != yyC) {
                  yyIndex = yyIndex + 1;
                  if ('s' == yyC) {

                    yyC = character(yyIndex);
                    if (-1 != yyC) {
                      yyIndex = yyIndex + 1;
                      if ('t' == yyC) {

                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('r' == yyC) {

                            yyC = character(yyIndex);
                            if (-1 != yyC) {
                              yyIndex = yyIndex + 1;
                              if ('a' == yyC) {

                                yyC = character(yyIndex);
                                if (-1 != yyC) {
                                  yyIndex = yyIndex + 1;
                                  if ('c' == yyC) {

                                    yyC = character(yyIndex);
                                    if (-1 != yyC) {
                                      yyIndex = yyIndex + 1;
                                      if ('t' == yyC) {

                                        yyPredMatched = false;

                                        yyPredResult = pidrest(yyIndex);
                                        if (yyPredResult.hasValue()) {

                                          yyPredMatched = true;
                                        }

                                        if (! yyPredMatched) {

                                          yyValue = "abstract";

                                          return new SemanticValue(yyValue, yyIndex, yyError);
                                        } else {
                                          yyError = yyError.select("keyword expected", yyStart);
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          break;

        case 'c':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'a':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;

                    switch (yyC) {
                    case 's':
                      {
                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('e' == yyC) {

                            yyPredMatched = false;

                            yyPredResult = pidrest(yyIndex);
                            if (yyPredResult.hasValue()) {

                              yyPredMatched = true;
                            }

                            if (! yyPredMatched) {

                              yyValue = "case";

                              return new SemanticValue(yyValue, yyIndex, yyError);
                            } else {
                              yyError = yyError.select("keyword expected", yyStart);
                            }
                          }
                        }
                      }
                      break;

                    case 't':
                      {
                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('c' == yyC) {

                            yyC = character(yyIndex);
                            if (-1 != yyC) {
                              yyIndex = yyIndex + 1;
                              if ('h' == yyC) {

                                yyPredMatched = false;

                                yyPredResult = pidrest(yyIndex);
                                if (yyPredResult.hasValue()) {

                                  yyPredMatched = true;
                                }

                                if (! yyPredMatched) {

                                  yyValue = "catch";

                                  return new SemanticValue(yyValue, yyIndex, yyError);
                                } else {
                                  yyError = yyError.select("keyword expected", yyStart);
                                }
                              }
                            }
                          }
                        }
                      }
                      break;

                    default:
                      /* No match. */
                    }
                  }
                }
                break;

              case 'l':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('a' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('s' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('s' == yyC) {

                              yyPredMatched = false;

                              yyPredResult = pidrest(yyIndex);
                              if (yyPredResult.hasValue()) {

                                yyPredMatched = true;
                              }

                              if (! yyPredMatched) {

                                yyValue = "class";

                                return new SemanticValue(yyValue, yyIndex, yyError);
                              } else {
                                yyError = yyError.select("keyword expected", yyStart);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'd':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'e':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('f' == yyC) {

                      yyPredMatched = false;

                      yyPredResult = pidrest(yyIndex);
                      if (yyPredResult.hasValue()) {

                        yyPredMatched = true;
                      }

                      if (! yyPredMatched) {

                        yyValue = "def";

                        return new SemanticValue(yyValue, yyIndex, yyError);
                      } else {
                        yyError = yyError.select("keyword expected", yyStart);
                      }
                    }
                  }
                }
                break;

              case 'o':
                {
                  yyPredMatched = false;

                  yyPredResult = pidrest(yyIndex);
                  if (yyPredResult.hasValue()) {

                    yyPredMatched = true;
                  }

                  if (! yyPredMatched) {

                    yyValue = "do";

                    return new SemanticValue(yyValue, yyIndex, yyError);
                  } else {
                    yyError = yyError.select("keyword expected", yyStart);
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'e':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'l':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('s' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('e' == yyC) {

                          yyPredMatched = false;

                          yyPredResult = pidrest(yyIndex);
                          if (yyPredResult.hasValue()) {

                            yyPredMatched = true;
                          }

                          if (! yyPredMatched) {

                            yyValue = "else";

                            return new SemanticValue(yyValue, yyIndex, yyError);
                          } else {
                            yyError = yyError.select("keyword expected", yyStart);
                          }
                        }
                      }
                    }
                  }
                }
                break;

              case 'x':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('t' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('e' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('n' == yyC) {

                              yyC = character(yyIndex);
                              if (-1 != yyC) {
                                yyIndex = yyIndex + 1;
                                if ('d' == yyC) {

                                  yyC = character(yyIndex);
                                  if (-1 != yyC) {
                                    yyIndex = yyIndex + 1;
                                    if ('s' == yyC) {

                                      yyPredMatched = false;

                                      yyPredResult = pidrest(yyIndex);
                                      if (yyPredResult.hasValue()) {

                                        yyPredMatched = true;
                                      }

                                      if (! yyPredMatched) {

                                        yyValue = "extends";

                                        return new SemanticValue(yyValue, yyIndex, yyError);
                                      } else {
                                        yyError = yyError.select("keyword expected", yyStart);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'f':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'a':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('l' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('s' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('e' == yyC) {

                              yyPredMatched = false;

                              yyPredResult = pidrest(yyIndex);
                              if (yyPredResult.hasValue()) {

                                yyPredMatched = true;
                              }

                              if (! yyPredMatched) {

                                yyValue = "false";

                                return new SemanticValue(yyValue, yyIndex, yyError);
                              } else {
                                yyError = yyError.select("keyword expected", yyStart);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              case 'i':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('n' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('a' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('l' == yyC) {

                              final int yyChoice2 = yyIndex;

                              // Nested alternative 1.

                              yyPredMatched = false;

                              yyPredResult = pidrest(yyChoice2);
                              if (yyPredResult.hasValue()) {

                                yyPredMatched = true;
                              }

                              if (! yyPredMatched) {

                                yyValue = "final";

                                return new SemanticValue(yyValue, yyChoice2, yyError);
                              } else {
                                yyError = yyError.select("keyword expected", yyStart);
                              }

                              // Nested alternative 2.

                              yyC = character(yyChoice2);
                              if (-1 != yyC) {
                                yyIndex = yyChoice2 + 1;
                                if ('l' == yyC) {

                                  yyC = character(yyIndex);
                                  if (-1 != yyC) {
                                    yyIndex = yyIndex + 1;
                                    if ('y' == yyC) {

                                      yyPredMatched = false;

                                      yyPredResult = pidrest(yyIndex);
                                      if (yyPredResult.hasValue()) {

                                        yyPredMatched = true;
                                      }

                                      if (! yyPredMatched) {

                                        yyValue = "finally";

                                        return new SemanticValue(yyValue, yyIndex, yyError);
                                      } else {
                                        yyError = yyError.select("keyword expected", yyStart);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              case 'o':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('r' == yyC) {

                      final int yyChoice2 = yyIndex;

                      // Nested alternative 1.

                      yyPredMatched = false;

                      yyPredResult = pidrest(yyChoice2);
                      if (yyPredResult.hasValue()) {

                        yyPredMatched = true;
                      }

                      if (! yyPredMatched) {

                        yyValue = "for";

                        return new SemanticValue(yyValue, yyChoice2, yyError);
                      } else {
                        yyError = yyError.select("keyword expected", yyStart);
                      }

                      // Nested alternative 2.

                      yyC = character(yyChoice2);
                      if (-1 != yyC) {
                        yyIndex = yyChoice2 + 1;
                        if ('S' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('o' == yyC) {

                              yyC = character(yyIndex);
                              if (-1 != yyC) {
                                yyIndex = yyIndex + 1;
                                if ('m' == yyC) {

                                  yyC = character(yyIndex);
                                  if (-1 != yyC) {
                                    yyIndex = yyIndex + 1;
                                    if ('e' == yyC) {

                                      yyPredMatched = false;

                                      yyPredResult = pidrest(yyIndex);
                                      if (yyPredResult.hasValue()) {

                                        yyPredMatched = true;
                                      }

                                      if (! yyPredMatched) {

                                        yyValue = "forSome";

                                        return new SemanticValue(yyValue, yyIndex, yyError);
                                      } else {
                                        yyError = yyError.select("keyword expected", yyStart);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'i':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'f':
                {
                  yyPredMatched = false;

                  yyPredResult = pidrest(yyIndex);
                  if (yyPredResult.hasValue()) {

                    yyPredMatched = true;
                  }

                  if (! yyPredMatched) {

                    yyValue = "if";

                    return new SemanticValue(yyValue, yyIndex, yyError);
                  } else {
                    yyError = yyError.select("keyword expected", yyStart);
                  }
                }
                break;

              case 'm':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('p' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;

                        switch (yyC) {
                        case 'l':
                          {
                            yyC = character(yyIndex);
                            if (-1 != yyC) {
                              yyIndex = yyIndex + 1;
                              if ('i' == yyC) {

                                yyC = character(yyIndex);
                                if (-1 != yyC) {
                                  yyIndex = yyIndex + 1;
                                  if ('c' == yyC) {

                                    yyC = character(yyIndex);
                                    if (-1 != yyC) {
                                      yyIndex = yyIndex + 1;
                                      if ('i' == yyC) {

                                        yyC = character(yyIndex);
                                        if (-1 != yyC) {
                                          yyIndex = yyIndex + 1;
                                          if ('t' == yyC) {

                                            yyPredMatched = false;

                                            yyPredResult = pidrest(yyIndex);
                                            if (yyPredResult.hasValue()) {

                                              yyPredMatched = true;
                                            }

                                            if (! yyPredMatched) {

                                              yyValue = "implicit";

                                              return new SemanticValue(yyValue, yyIndex, yyError);
                                            } else {
                                              yyError = yyError.select("keyword expected", yyStart);
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                          break;

                        case 'o':
                          {
                            yyC = character(yyIndex);
                            if (-1 != yyC) {
                              yyIndex = yyIndex + 1;
                              if ('r' == yyC) {

                                yyC = character(yyIndex);
                                if (-1 != yyC) {
                                  yyIndex = yyIndex + 1;
                                  if ('t' == yyC) {

                                    yyPredMatched = false;

                                    yyPredResult = pidrest(yyIndex);
                                    if (yyPredResult.hasValue()) {

                                      yyPredMatched = true;
                                    }

                                    if (! yyPredMatched) {

                                      yyValue = "import";

                                      return new SemanticValue(yyValue, yyIndex, yyError);
                                    } else {
                                      yyError = yyError.select("keyword expected", yyStart);
                                    }
                                  }
                                }
                              }
                            }
                          }
                          break;

                        default:
                          /* No match. */
                        }
                      }
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'l':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('a' == yyC) {

                yyC = character(yyIndex);
                if (-1 != yyC) {
                  yyIndex = yyIndex + 1;
                  if ('z' == yyC) {

                    yyC = character(yyIndex);
                    if (-1 != yyC) {
                      yyIndex = yyIndex + 1;
                      if ('y' == yyC) {

                        yyPredMatched = false;

                        yyPredResult = pidrest(yyIndex);
                        if (yyPredResult.hasValue()) {

                          yyPredMatched = true;
                        }

                        if (! yyPredMatched) {

                          yyValue = "lazy";

                          return new SemanticValue(yyValue, yyIndex, yyError);
                        } else {
                          yyError = yyError.select("keyword expected", yyStart);
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          break;

        case 'm':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('a' == yyC) {

                yyC = character(yyIndex);
                if (-1 != yyC) {
                  yyIndex = yyIndex + 1;
                  if ('t' == yyC) {

                    yyC = character(yyIndex);
                    if (-1 != yyC) {
                      yyIndex = yyIndex + 1;
                      if ('c' == yyC) {

                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('h' == yyC) {

                            yyPredMatched = false;

                            yyPredResult = pidrest(yyIndex);
                            if (yyPredResult.hasValue()) {

                              yyPredMatched = true;
                            }

                            if (! yyPredMatched) {

                              yyValue = "match";

                              return new SemanticValue(yyValue, yyIndex, yyError);
                            } else {
                              yyError = yyError.select("keyword expected", yyStart);
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          break;

        case 'n':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'e':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('w' == yyC) {

                      yyPredMatched = false;

                      yyPredResult = pidrest(yyIndex);
                      if (yyPredResult.hasValue()) {

                        yyPredMatched = true;
                      }

                      if (! yyPredMatched) {

                        yyValue = "new";

                        return new SemanticValue(yyValue, yyIndex, yyError);
                      } else {
                        yyError = yyError.select("keyword expected", yyStart);
                      }
                    }
                  }
                }
                break;

              case 'u':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('l' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('l' == yyC) {

                          yyPredMatched = false;

                          yyPredResult = pidrest(yyIndex);
                          if (yyPredResult.hasValue()) {

                            yyPredMatched = true;
                          }

                          if (! yyPredMatched) {

                            yyValue = "null";

                            return new SemanticValue(yyValue, yyIndex, yyError);
                          } else {
                            yyError = yyError.select("keyword expected", yyStart);
                          }
                        }
                      }
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'o':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'b':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('j' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('e' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('c' == yyC) {

                              yyC = character(yyIndex);
                              if (-1 != yyC) {
                                yyIndex = yyIndex + 1;
                                if ('t' == yyC) {

                                  yyPredMatched = false;

                                  yyPredResult = pidrest(yyIndex);
                                  if (yyPredResult.hasValue()) {

                                    yyPredMatched = true;
                                  }

                                  if (! yyPredMatched) {

                                    yyValue = "object";

                                    return new SemanticValue(yyValue, yyIndex, yyError);
                                  } else {
                                    yyError = yyError.select("keyword expected", yyStart);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              case 'v':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('e' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('r' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('r' == yyC) {

                              yyC = character(yyIndex);
                              if (-1 != yyC) {
                                yyIndex = yyIndex + 1;
                                if ('i' == yyC) {

                                  yyC = character(yyIndex);
                                  if (-1 != yyC) {
                                    yyIndex = yyIndex + 1;
                                    if ('d' == yyC) {

                                      yyC = character(yyIndex);
                                      if (-1 != yyC) {
                                        yyIndex = yyIndex + 1;
                                        if ('e' == yyC) {

                                          yyPredMatched = false;

                                          yyPredResult = pidrest(yyIndex);
                                          if (yyPredResult.hasValue()) {

                                            yyPredMatched = true;
                                          }

                                          if (! yyPredMatched) {

                                            yyValue = "override";

                                            return new SemanticValue(yyValue, yyIndex, yyError);
                                          } else {
                                            yyError = yyError.select("keyword expected", yyStart);
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'p':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'a':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('c' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('k' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('a' == yyC) {

                              yyC = character(yyIndex);
                              if (-1 != yyC) {
                                yyIndex = yyIndex + 1;
                                if ('g' == yyC) {

                                  yyC = character(yyIndex);
                                  if (-1 != yyC) {
                                    yyIndex = yyIndex + 1;
                                    if ('e' == yyC) {

                                      yyPredMatched = false;

                                      yyPredResult = pidrest(yyIndex);
                                      if (yyPredResult.hasValue()) {

                                        yyPredMatched = true;
                                      }

                                      if (! yyPredMatched) {

                                        yyValue = "package";

                                        return new SemanticValue(yyValue, yyIndex, yyError);
                                      } else {
                                        yyError = yyError.select("keyword expected", yyStart);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              case 'r':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;

                    switch (yyC) {
                    case 'i':
                      {
                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('v' == yyC) {

                            yyC = character(yyIndex);
                            if (-1 != yyC) {
                              yyIndex = yyIndex + 1;
                              if ('a' == yyC) {

                                yyC = character(yyIndex);
                                if (-1 != yyC) {
                                  yyIndex = yyIndex + 1;
                                  if ('t' == yyC) {

                                    yyC = character(yyIndex);
                                    if (-1 != yyC) {
                                      yyIndex = yyIndex + 1;
                                      if ('e' == yyC) {

                                        yyPredMatched = false;

                                        yyPredResult = pidrest(yyIndex);
                                        if (yyPredResult.hasValue()) {

                                          yyPredMatched = true;
                                        }

                                        if (! yyPredMatched) {

                                          yyValue = "private";

                                          return new SemanticValue(yyValue, yyIndex, yyError);
                                        } else {
                                          yyError = yyError.select("keyword expected", yyStart);
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                      break;

                    case 'o':
                      {
                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('t' == yyC) {

                            yyC = character(yyIndex);
                            if (-1 != yyC) {
                              yyIndex = yyIndex + 1;
                              if ('e' == yyC) {

                                yyC = character(yyIndex);
                                if (-1 != yyC) {
                                  yyIndex = yyIndex + 1;
                                  if ('c' == yyC) {

                                    yyC = character(yyIndex);
                                    if (-1 != yyC) {
                                      yyIndex = yyIndex + 1;
                                      if ('t' == yyC) {

                                        yyC = character(yyIndex);
                                        if (-1 != yyC) {
                                          yyIndex = yyIndex + 1;
                                          if ('e' == yyC) {

                                            yyC = character(yyIndex);
                                            if (-1 != yyC) {
                                              yyIndex = yyIndex + 1;
                                              if ('d' == yyC) {

                                                yyPredMatched = false;

                                                yyPredResult =
                                                  pidrest(yyIndex);
                                                if (yyPredResult.hasValue()) {

                                                  yyPredMatched = true;
                                                }

                                                if (! yyPredMatched) {

                                                  yyValue = "protected";

                                                  return new SemanticValue(yyValue, yyIndex, yyError);
                                                } else {
                                                  yyError = yyError.select("keyword expected", yyStart);
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                      break;

                    default:
                      /* No match. */
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'r':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('e' == yyC) {

                yyC = character(yyIndex);
                if (-1 != yyC) {
                  yyIndex = yyIndex + 1;

                  switch (yyC) {
                  case 'q':
                    {
                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('u' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('i' == yyC) {

                              yyC = character(yyIndex);
                              if (-1 != yyC) {
                                yyIndex = yyIndex + 1;
                                if ('r' == yyC) {

                                  yyC = character(yyIndex);
                                  if (-1 != yyC) {
                                    yyIndex = yyIndex + 1;
                                    if ('e' == yyC) {

                                      yyC = character(yyIndex);
                                      if (-1 != yyC) {
                                        yyIndex = yyIndex + 1;
                                        if ('s' == yyC) {

                                          yyPredMatched = false;

                                          yyPredResult = pidrest(yyIndex);
                                          if (yyPredResult.hasValue()) {

                                            yyPredMatched = true;
                                          }

                                          if (! yyPredMatched) {

                                            yyValue = "requires";

                                            return new SemanticValue(yyValue, yyIndex, yyError);
                                          } else {
                                            yyError = yyError.select("keyword expected", yyStart);
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                    break;

                  case 't':
                    {
                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('u' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('r' == yyC) {

                              yyC = character(yyIndex);
                              if (-1 != yyC) {
                                yyIndex = yyIndex + 1;
                                if ('n' == yyC) {

                                  yyPredMatched = false;

                                  yyPredResult = pidrest(yyIndex);
                                  if (yyPredResult.hasValue()) {

                                    yyPredMatched = true;
                                  }

                                  if (! yyPredMatched) {

                                    yyValue = "return";

                                    return new SemanticValue(yyValue, yyIndex, yyError);
                                  } else {
                                    yyError = yyError.select("keyword expected", yyStart);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                    break;

                  default:
                    /* No match. */
                  }
                }
              }
            }
          }
          break;

        case 's':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'e':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('a' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('l' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('e' == yyC) {

                              yyC = character(yyIndex);
                              if (-1 != yyC) {
                                yyIndex = yyIndex + 1;
                                if ('d' == yyC) {

                                  yyPredMatched = false;

                                  yyPredResult = pidrest(yyIndex);
                                  if (yyPredResult.hasValue()) {

                                    yyPredMatched = true;
                                  }

                                  if (! yyPredMatched) {

                                    yyValue = "sealed";

                                    return new SemanticValue(yyValue, yyIndex, yyError);
                                  } else {
                                    yyError = yyError.select("keyword expected", yyStart);
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              case 'u':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('p' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('e' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('r' == yyC) {

                              yyPredMatched = false;

                              yyPredResult = pidrest(yyIndex);
                              if (yyPredResult.hasValue()) {

                                yyPredMatched = true;
                              }

                              if (! yyPredMatched) {

                                yyValue = "super";

                                return new SemanticValue(yyValue, yyIndex, yyError);
                              } else {
                                yyError = yyError.select("keyword expected", yyStart);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 't':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'h':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;

                    switch (yyC) {
                    case 'i':
                      {
                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('s' == yyC) {

                            yyPredMatched = false;

                            yyPredResult = pidrest(yyIndex);
                            if (yyPredResult.hasValue()) {

                              yyPredMatched = true;
                            }

                            if (! yyPredMatched) {

                              yyValue = "this";

                              return new SemanticValue(yyValue, yyIndex, yyError);
                            } else {
                              yyError = yyError.select("keyword expected", yyStart);
                            }
                          }
                        }
                      }
                      break;

                    case 'r':
                      {
                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('o' == yyC) {

                            yyC = character(yyIndex);
                            if (-1 != yyC) {
                              yyIndex = yyIndex + 1;
                              if ('w' == yyC) {

                                yyPredMatched = false;

                                yyPredResult = pidrest(yyIndex);
                                if (yyPredResult.hasValue()) {

                                  yyPredMatched = true;
                                }

                                if (! yyPredMatched) {

                                  yyValue = "throw";

                                  return new SemanticValue(yyValue, yyIndex, yyError);
                                } else {
                                  yyError = yyError.select("keyword expected", yyStart);
                                }
                              }
                            }
                          }
                        }
                      }
                      break;

                    default:
                      /* No match. */
                    }
                  }
                }
                break;

              case 'r':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;

                    switch (yyC) {
                    case 'a':
                      {
                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('i' == yyC) {

                            yyC = character(yyIndex);
                            if (-1 != yyC) {
                              yyIndex = yyIndex + 1;
                              if ('t' == yyC) {

                                yyPredMatched = false;

                                yyPredResult = pidrest(yyIndex);
                                if (yyPredResult.hasValue()) {

                                  yyPredMatched = true;
                                }

                                if (! yyPredMatched) {

                                  yyValue = "trait";

                                  return new SemanticValue(yyValue, yyIndex, yyError);
                                } else {
                                  yyError = yyError.select("keyword expected", yyStart);
                                }
                              }
                            }
                          }
                        }
                      }
                      break;

                    case 'y':
                      {
                        yyPredMatched = false;

                        yyPredResult = pidrest(yyIndex);
                        if (yyPredResult.hasValue()) {

                          yyPredMatched = true;
                        }

                        if (! yyPredMatched) {

                          yyValue = "try";

                          return new SemanticValue(yyValue, yyIndex, yyError);
                        } else {
                          yyError = yyError.select("keyword expected", yyStart);
                        }
                      }
                      break;

                    case 'u':
                      {
                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('e' == yyC) {

                            yyPredMatched = false;

                            yyPredResult = pidrest(yyIndex);
                            if (yyPredResult.hasValue()) {

                              yyPredMatched = true;
                            }

                            if (! yyPredMatched) {

                              yyValue = "true";

                              return new SemanticValue(yyValue, yyIndex, yyError);
                            } else {
                              yyError = yyError.select("keyword expected", yyStart);
                            }
                          }
                        }
                      }
                      break;

                    default:
                      /* No match. */
                    }
                  }
                }
                break;

              case 'y':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('p' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('e' == yyC) {

                          yyPredMatched = false;

                          yyPredResult = pidrest(yyIndex);
                          if (yyPredResult.hasValue()) {

                            yyPredMatched = true;
                          }

                          if (! yyPredMatched) {

                            yyValue = "type";

                            return new SemanticValue(yyValue, yyIndex, yyError);
                          } else {
                            yyError = yyError.select("keyword expected", yyStart);
                          }
                        }
                      }
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'v':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('a' == yyC) {

                yyC = character(yyIndex);
                if (-1 != yyC) {
                  yyIndex = yyIndex + 1;

                  switch (yyC) {
                  case 'l':
                    {
                      yyPredMatched = false;

                      yyPredResult = pidrest(yyIndex);
                      if (yyPredResult.hasValue()) {

                        yyPredMatched = true;
                      }

                      if (! yyPredMatched) {

                        yyValue = "val";

                        return new SemanticValue(yyValue, yyIndex, yyError);
                      } else {
                        yyError = yyError.select("keyword expected", yyStart);
                      }
                    }
                    break;

                  case 'r':
                    {
                      yyPredMatched = false;

                      yyPredResult = pidrest(yyIndex);
                      if (yyPredResult.hasValue()) {

                        yyPredMatched = true;
                      }

                      if (! yyPredMatched) {

                        yyValue = "var";

                        return new SemanticValue(yyValue, yyIndex, yyError);
                      } else {
                        yyError = yyError.select("keyword expected", yyStart);
                      }
                    }
                    break;

                  default:
                    /* No match. */
                  }
                }
              }
            }
          }
          break;

        case 'w':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case 'h':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('i' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('l' == yyC) {

                          yyC = character(yyIndex);
                          if (-1 != yyC) {
                            yyIndex = yyIndex + 1;
                            if ('e' == yyC) {

                              yyPredMatched = false;

                              yyPredResult = pidrest(yyIndex);
                              if (yyPredResult.hasValue()) {

                                yyPredMatched = true;
                              }

                              if (! yyPredMatched) {

                                yyValue = "while";

                                return new SemanticValue(yyValue, yyIndex, yyError);
                              } else {
                                yyError = yyError.select("keyword expected", yyStart);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
                break;

              case 'i':
                {
                  yyC = character(yyIndex);
                  if (-1 != yyC) {
                    yyIndex = yyIndex + 1;
                    if ('t' == yyC) {

                      yyC = character(yyIndex);
                      if (-1 != yyC) {
                        yyIndex = yyIndex + 1;
                        if ('h' == yyC) {

                          yyPredMatched = false;

                          yyPredResult = pidrest(yyIndex);
                          if (yyPredResult.hasValue()) {

                            yyPredMatched = true;
                          }

                          if (! yyPredMatched) {

                            yyValue = "with";

                            return new SemanticValue(yyValue, yyIndex, yyError);
                          } else {
                            yyError = yyError.select("keyword expected", yyStart);
                          }
                        }
                      }
                    }
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case 'y':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('i' == yyC) {

                yyC = character(yyIndex);
                if (-1 != yyC) {
                  yyIndex = yyIndex + 1;
                  if ('e' == yyC) {

                    yyC = character(yyIndex);
                    if (-1 != yyC) {
                      yyIndex = yyIndex + 1;
                      if ('l' == yyC) {

                        yyC = character(yyIndex);
                        if (-1 != yyC) {
                          yyIndex = yyIndex + 1;
                          if ('d' == yyC) {

                            yyPredMatched = false;

                            yyPredResult = pidrest(yyIndex);
                            if (yyPredResult.hasValue()) {

                              yyPredMatched = true;
                            }

                            if (! yyPredMatched) {

                              yyValue = "yield";

                              return new SemanticValue(yyValue, yyIndex, yyError);
                            } else {
                              yyError = yyError.select("keyword expected", yyStart);
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          break;

        case '_':
          {
            yyPredMatched = false;

            yyPredResult = pidrest(yyIndex);
            if (yyPredResult.hasValue()) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyValue = "_";

              return new SemanticValue(yyValue, yyIndex, yyError);
            } else {
              yyError = yyError.select("keyword expected", yyStart);
            }
          }
          break;

        case '=':
          {
            final int yyChoice2 = yyIndex;

            // Nested alternative 1.

            yyC = character(yyChoice2);
            if (-1 != yyC) {
              yyIndex = yyChoice2 + 1;
              if ('>' == yyC) {

                yyPredMatched = false;

                yyPredResult = popchar(yyIndex);
                if (yyPredResult.hasValue()) {

                  yyPredMatched = true;
                }

                if (! yyPredMatched) {

                  yyValue = "=>";

                  return new SemanticValue(yyValue, yyIndex, yyError);
                } else {
                  yyError = yyError.select("keyword expected", yyStart);
                }
              }
            }

            // Nested alternative 2.

            yyPredMatched = false;

            yyPredResult = popchar(yyChoice2);
            if (yyPredResult.hasValue()) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyValue = "=";

              return new SemanticValue(yyValue, yyChoice2, yyError);
            } else {
              yyError = yyError.select("keyword expected", yyStart);
            }
          }
          break;

        case '\u21d2':
          {
            yyPredMatched = false;

            yyPredResult = popchar(yyIndex);
            if (yyPredResult.hasValue()) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyValue = "\u21d2";

              return new SemanticValue(yyValue, yyIndex, yyError);
            } else {
              yyError = yyError.select("keyword expected", yyStart);
            }
          }
          break;

        case '<':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;

              switch (yyC) {
              case '-':
                {
                  yyPredMatched = false;

                  yyPredResult = popchar(yyIndex);
                  if (yyPredResult.hasValue()) {

                    yyPredMatched = true;
                  }

                  if (! yyPredMatched) {

                    yyValue = "<-";

                    return new SemanticValue(yyValue, yyIndex, yyError);
                  } else {
                    yyError = yyError.select("keyword expected", yyStart);
                  }
                }
                break;

              case ':':
                {
                  yyPredMatched = false;

                  yyPredResult = popchar(yyIndex);
                  if (yyPredResult.hasValue()) {

                    yyPredMatched = true;
                  }

                  if (! yyPredMatched) {

                    yyValue = "<:";

                    return new SemanticValue(yyValue, yyIndex, yyError);
                  } else {
                    yyError = yyError.select("keyword expected", yyStart);
                  }
                }
                break;

              case '%':
                {
                  yyPredMatched = false;

                  yyPredResult = popchar(yyIndex);
                  if (yyPredResult.hasValue()) {

                    yyPredMatched = true;
                  }

                  if (! yyPredMatched) {

                    yyValue = "<%";

                    return new SemanticValue(yyValue, yyIndex, yyError);
                  } else {
                    yyError = yyError.select("keyword expected", yyStart);
                  }
                }
                break;

              default:
                /* No match. */
              }
            }
          }
          break;

        case '\u2190':
          {
            yyPredMatched = false;

            yyPredResult = popchar(yyIndex);
            if (yyPredResult.hasValue()) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyValue = "\u2190";

              return new SemanticValue(yyValue, yyIndex, yyError);
            } else {
              yyError = yyError.select("keyword expected", yyStart);
            }
          }
          break;

        case '>':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if (':' == yyC) {

                yyPredMatched = false;

                yyPredResult = popchar(yyIndex);
                if (yyPredResult.hasValue()) {

                  yyPredMatched = true;
                }

                if (! yyPredMatched) {

                  yyValue = ">:";

                  return new SemanticValue(yyValue, yyIndex, yyError);
                } else {
                  yyError = yyError.select("keyword expected", yyStart);
                }
              }
            }
          }
          break;

        case ':':
          {
            yyPredMatched = false;

            yyPredResult = popchar(yyIndex);
            if (yyPredResult.hasValue()) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyValue = ":";

              return new SemanticValue(yyValue, yyIndex, yyError);
            } else {
              yyError = yyError.select("keyword expected", yyStart);
            }
          }
          break;

        case '#':
          {
            yyPredMatched = false;

            yyPredResult = popchar(yyIndex);
            if (yyPredResult.hasValue()) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyValue = "#";

              return new SemanticValue(yyValue, yyIndex, yyError);
            } else {
              yyError = yyError.select("keyword expected", yyStart);
            }
          }
          break;

        case '@':
          {
            yyPredMatched = false;

            yyPredResult = popchar(yyIndex);
            if (yyPredResult.hasValue()) {

              yyPredMatched = true;
            }

            if (! yyPredMatched) {

              yyValue = "@";

              return new SemanticValue(yyValue, yyIndex, yyError);
            } else {
              yyError = yyError.select("keyword expected", yyStart);
            }
          }
          break;

        default:
          /* No match. */
        }
      }
    } else {
      yyError = yyError.select("keyword expected", yyStart);
    }

    // Done.
    yyError = yyError.select("keyword expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.IntegerLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pIntegerLiteral(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pintegerLiteral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("IntegerLiteral", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.integerLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pintegerLiteral(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyOption1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = phexNumeral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;

      yyC = character(yyOption1);
      if (-1 != yyC) {
        yyIndex = yyOption1 + 1;

        switch (yyC) {
        case 'L':
        case 'l':
          {
            yyOption1  = yyIndex;
          }
          break;

        default:
          /* No match. */
        }
      }

      yyValue = difference(yyStart, yyOption1);

      return new SemanticValue(yyValue, yyOption1, yyError);
    }

    // Alternative 2.

    yyResult = poctalNumeral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;

      yyC = character(yyOption1);
      if (-1 != yyC) {
        yyIndex = yyOption1 + 1;

        switch (yyC) {
        case 'L':
        case 'l':
          {
            yyOption1  = yyIndex;
          }
          break;

        default:
          /* No match. */
        }
      }

      yyValue = difference(yyStart, yyOption1);

      return new SemanticValue(yyValue, yyOption1, yyError);
    }

    // Alternative 3.

    yyResult = pdecimalNumeral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyOption1  = yyResult.index;

      yyC = character(yyOption1);
      if (-1 != yyC) {
        yyIndex = yyOption1 + 1;

        switch (yyC) {
        case 'L':
        case 'l':
          {
            yyOption1  = yyIndex;
          }
          break;

        default:
          /* No match. */
        }
      }

      yyValue = difference(yyStart, yyOption1);

      return new SemanticValue(yyValue, yyOption1, yyError);
    }

    // Done.
    yyError = yyError.select("integer literal expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.FloatingPointLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pFloatingPointLiteral(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pfloatingPointLiteral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("FloatingPointLiteral", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.floatingPointLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pfloatingPointLiteral(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyRepetition1;
    boolean    yyRepeated1;
    int        yyOption1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepeated1   = false;
    while (true) {

      yyC = character(yyRepetition1);
      if (-1 != yyC) {
        yyIndex = yyRepetition1 + 1;

        switch (yyC) {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        default:
          /* No match. */
        }
      }
      break;
    }

    if (yyRepeated1) {

      yyC = character(yyRepetition1);
      if ('.' == yyC) {
        yyIndex = yyRepetition1 + 1;

        yyRepetition1 = yyIndex;
        while (true) {

          yyC = character(yyRepetition1);
          if (-1 != yyC) {
            yyIndex = yyRepetition1 + 1;

            switch (yyC) {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
              {
                yyRepetition1 = yyIndex;
                continue;
              }

            default:
              /* No match. */
            }
          }
          break;
        }

        yyOption1  = yyRepetition1;

        yyResult = pexponent(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {

          yyOption1  = yyResult.index;
        }


        yyC = character(yyOption1);
        if (-1 != yyC) {
          yyIndex = yyOption1 + 1;

          switch (yyC) {
          case 'D':
          case 'F':
          case 'd':
          case 'f':
            {
              yyOption1  = yyIndex;
            }
            break;

          default:
            /* No match. */
          }
        }

        yyValue = difference(yyStart, yyOption1);

        return new SemanticValue(yyValue, yyOption1, yyError);
      }
    }

    // Alternative 2.

    yyC = character(yyStart);
    if ('.' == yyC) {
      yyIndex = yyStart + 1;

      yyRepetition1 = yyIndex;
      yyRepeated1   = false;
      while (true) {

        yyC = character(yyRepetition1);
        if (-1 != yyC) {
          yyIndex = yyRepetition1 + 1;

          switch (yyC) {
          case '0':
          case '1':
          case '2':
          case '3':
          case '4':
          case '5':
          case '6':
          case '7':
          case '8':
          case '9':
            {
              yyRepetition1 = yyIndex;
              yyRepeated1   = true;
              continue;
            }

          default:
            /* No match. */
          }
        }
        break;
      }

      if (yyRepeated1) {

        yyOption1  = yyRepetition1;

        yyResult = pexponent(yyOption1);
        yyError  = yyResult.select(yyError, yyOption1);
        if (yyResult.hasValue()) {

          yyOption1  = yyResult.index;
        }


        yyC = character(yyOption1);
        if (-1 != yyC) {
          yyIndex = yyOption1 + 1;

          switch (yyC) {
          case 'D':
          case 'F':
          case 'd':
          case 'f':
            {
              yyOption1  = yyIndex;
            }
            break;

          default:
            /* No match. */
          }
        }

        yyValue = difference(yyStart, yyOption1);

        return new SemanticValue(yyValue, yyOption1, yyError);
      }
    }

    // Alternative 3.

    yyRepetition1 = yyStart;
    yyRepeated1   = false;
    while (true) {

      yyC = character(yyRepetition1);
      if (-1 != yyC) {
        yyIndex = yyRepetition1 + 1;

        switch (yyC) {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        default:
          /* No match. */
        }
      }
      break;
    }

    if (yyRepeated1) {

      final int yyChoice1 = yyRepetition1;

      // Nested alternative 1.

      yyResult = pexponent(yyChoice1);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;

        yyC = character(yyOption1);
        if (-1 != yyC) {
          yyIndex = yyOption1 + 1;

          switch (yyC) {
          case 'D':
          case 'F':
          case 'd':
          case 'f':
            {
              yyOption1  = yyIndex;
            }
            break;

          default:
            /* No match. */
          }
        }

        yyValue = difference(yyStart, yyOption1);

        return new SemanticValue(yyValue, yyOption1, yyError);
      }

      // Nested alternative 2.

      yyOption1  = yyChoice1;

      yyResult = pexponent(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;
      }

      yyC = character(yyOption1);
      if (-1 != yyC) {
        yyIndex = yyOption1 + 1;

        switch (yyC) {
        case 'D':
        case 'F':
        case 'd':
        case 'f':
          {
            yyValue = difference(yyStart, yyIndex);

            return new SemanticValue(yyValue, yyIndex, yyError);
          }

        default:
          /* No match. */
        }
      }
    }

    // Done.
    yyError = yyError.select("floating point literal expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Literal.exponent.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pexponent(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    int        yyRepetition1;
    boolean    yyRepeated1;
    int        yyOption1;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case 'E':
      case 'e':
        {
          yyOption1  = yyIndex;

          yyC = character(yyOption1);
          if (-1 != yyC) {
            yyIndex = yyOption1 + 1;

            switch (yyC) {
            case '+':
            case '-':
              {
                yyOption1  = yyIndex;
              }
              break;

            default:
              /* No match. */
            }
          }

          yyRepetition1 = yyOption1;
          yyRepeated1   = false;
          while (true) {

            yyC = character(yyRepetition1);
            if (-1 != yyC) {
              yyIndex = yyRepetition1 + 1;

              switch (yyC) {
              case '0':
              case '1':
              case '2':
              case '3':
              case '4':
              case '5':
              case '6':
              case '7':
              case '8':
              case '9':
                {
                  yyRepetition1 = yyIndex;
                  yyRepeated1   = true;
                  continue;
                }

              default:
                /* No match. */
              }
            }
            break;
          }

          if (yyRepeated1) {

            yyValue = null;

            return new SemanticValue(yyValue, yyRepetition1, yyError);
          }
        }
        break;

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("exponent expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.CharacterLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pCharacterLiteral(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pcharacterLiteral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("CharacterLiteral", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.characterLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pcharacterLiteral(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyOption1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('\'' == yyC) {
      yyIndex = yyStart + 1;

      yyOption1  = yyIndex;

      yyResult = pcharacterChar(yyOption1);
      yyError  = yyResult.select(yyError, yyOption1);
      if (yyResult.hasValue()) {

        yyOption1  = yyResult.index;
      }

      yyC = character(yyOption1);
      if ('\'' == yyC) {
        yyIndex = yyOption1 + 1;

        yyValue = difference(yyStart, yyIndex);

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("character literal expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.StringLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pStringLiteral(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pstringLiteral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("StringLiteral", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.stringLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pstringLiteral(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyRepetition1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('\"' == yyC) {
      yyIndex = yyStart + 1;

      final int yyChoice1 = yyIndex;

      // Nested alternative 1.

      yyC = character(yyChoice1);
      if ('\"' == yyC) {
        yyIndex = yyChoice1 + 1;

        yyC = character(yyIndex);
        if ('\"' == yyC) {
          yyIndex = yyIndex + 1;

          yyRepetition1 = yyIndex;
          while (true) {

            yyResult = pmultiLineChar(yyRepetition1);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {

              yyRepetition1 = yyResult.index;
              continue;
            }
            break;
          }

          yyC = character(yyRepetition1);
          if ('\"' == yyC) {
            yyIndex = yyRepetition1 + 1;

            yyC = character(yyIndex);
            if ('\"' == yyC) {
              yyIndex = yyIndex + 1;

              yyC = character(yyIndex);
              if ('\"' == yyC) {
                yyIndex = yyIndex + 1;

                yyValue = difference(yyStart, yyIndex);

                return new SemanticValue(yyValue, yyIndex, yyError);
              }
            }
          }
        }
      }

      // Nested alternative 2.

      yyRepetition1 = yyChoice1;
      while (true) {

        yyResult = pstringChar(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {

          yyRepetition1 = yyResult.index;
          continue;
        }
        break;
      }

      yyC = character(yyRepetition1);
      if ('\"' == yyC) {
        yyIndex = yyRepetition1 + 1;

        yyValue = difference(yyStart, yyIndex);

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("string literal expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.multiLineChar.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pmultiLineChar(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    int        yyOption1;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyOption1  = yyStart;

    yyC = character(yyOption1);
    if ('\"' == yyC) {
      yyIndex = yyOption1 + 1;

      yyOption1  = yyIndex;
    }


    yyC = character(yyOption1);
    if ('\"' == yyC) {
      yyIndex = yyOption1 + 1;

      yyOption1  = yyIndex;
    }

    yyC = character(yyOption1);
    if (-1 != yyC) {
      yyIndex = yyOption1 + 1;
      if ('\"' != yyC) {

        yyValue = null;

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("multi line char expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.SymbolLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSymbolLiteral(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = psymbolLiteral(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("SymbolLiteral", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Literal.symbolLiteral.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result psymbolLiteral(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyRepetition1;
    boolean    yyRepeated1;
    int        yyOption1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('\'' == yyC) {
      yyIndex = yyStart + 1;

      final int yyChoice1 = yyIndex;

      // Nested alternative 1.

      yyRepetition1 = yyChoice1;
      yyRepeated1   = false;
      while (true) {

        yyResult = popchar(yyRepetition1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyRepetition1 = yyResult.index;
          yyRepeated1   = true;
          continue;
        }
        break;
      }

      if (yyRepeated1) {

        yyValue = difference(yyStart, yyRepetition1);

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      }

      // Nested alternative 2.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;
        if (('a' <= yyC) && (yyC <= 'z')) {

          yyOption1  = yyIndex;

          yyResult = pidrest(yyOption1);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {

            yyOption1  = yyResult.index;
          }

          yyValue = difference(yyStart, yyOption1);

          return new SemanticValue(yyValue, yyOption1, yyError);
        }
      }

      // Nested alternative 3.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;
        if (('A' <= yyC) && (yyC <= 'Z')) {

          yyOption1  = yyIndex;

          yyResult = pidrest(yyOption1);
          yyError  = yyResult.select(yyError, yyOption1);
          if (yyResult.hasValue()) {

            yyOption1  = yyResult.index;
          }

          yyValue = difference(yyStart, yyOption1);

          return new SemanticValue(yyValue, yyOption1, yyError);
        }
      }

      // Nested alternative 4.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case '$':
        case '_':
          {
            yyOption1  = yyIndex;

            yyResult = pidrest(yyOption1);
            yyError  = yyResult.select(yyError, yyOption1);
            if (yyResult.hasValue()) {

              yyOption1  = yyResult.index;
            }

            yyValue = difference(yyStart, yyOption1);

            return new SemanticValue(yyValue, yyOption1, yyError);
          }

        default:
          /* No match. */
        }
      }
    }

    // Done.
    yyError = yyError.select("symbol literal expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.DocComment.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pDocComment(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pDocCommentStart(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pDocComment$$Choice1(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
          continue;
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyResult = pDocCommentEnd(yyRepetition1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("DocComment", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.DocComment$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pDocComment$$Choice1(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pDocComment(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pBlockComment(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 3.

    yyResult = pCommentTag(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 4.

    yyResult = pDocCommentData(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 5.

    yyResult = pNl(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.DocCommentStart.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pDocCommentStart(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('/' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('*' == yyC) {
        yyIndex = yyIndex + 1;

        yyC = character(yyIndex);
        if ('*' == yyC) {
          yyIndex = yyIndex + 1;
          String v$g$1 = "/**";

          yyValue = GNode.create("DocCommentStart", v$g$1);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyIndex, yyError);
        }
      }
    }

    // Done.
    yyError = yyError.select("doc comment start expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.DocCommentEnd.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pDocCommentEnd(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('*' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('/' == yyC) {
        yyIndex = yyIndex + 1;
        String v$g$1 = "*/";

        yyValue = GNode.create("DocCommentEnd", v$g$1);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("doc comment end expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.DocCommentData.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pDocCommentData(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pblockedCommentData(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("DocCommentData", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.BlockComment.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlockComment(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyRepetition1;
    Pair<Node> yyRepValue1;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pBlockCommentStart(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      Node v$g$1 = yyResult.semanticValue();

      yyRepetition1 = yyResult.index;
      yyRepValue1   = Pair.empty();
      while (true) {

        yyResult = pBlockComment$$Choice1(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          Node v$el$1 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = new Pair<Node>(v$el$1, yyRepValue1);
          continue;
        }
        break;
      }
      { // Start scope for v$g$2.
        Pair<Node> v$g$2 = yyRepValue1.reverse();

        yyResult = pBlockCommentEnd(yyRepetition1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {
          Node v$g$3 = yyResult.semanticValue();

          yyValue = GNode.create("BlockComment", v$g$1, v$g$2, v$g$3);
          yyValue.setLocation(location(yyStart));

          return yyResult.createValue(yyValue, yyError);
        }
      } // End scope for v$g$2.
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.BlockComment$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlockComment$$Choice1(final int yyStart)
    throws IOException {

    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pDocComment(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 2.

    yyResult = pBlockComment(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 3.

    yyResult = pCommentTag(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 4.

    yyResult = pBlockCommentData(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Alternative 5.

    yyResult = pNl(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      yyValue = yyResult.semanticValue();

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.BlockCommentStart.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlockCommentStart(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    boolean    yyPredMatched;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('/' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('*' == yyC) {
        yyIndex = yyIndex + 1;
        String v$g$1 = "/*";

        yyPredMatched = false;

        yyC = character(yyIndex);
        if ('*' == yyC) {

          yyPredMatched = true;
        }

        if (! yyPredMatched) {

          yyValue = GNode.create("BlockCommentStart", v$g$1);
          yyValue.setLocation(location(yyStart));

          return new SemanticValue(yyValue, yyIndex, yyError);
        } else {
          yyError = yyError.select("block comment start expected", yyStart);
        }
      }
    }

    // Done.
    yyError = yyError.select("block comment start expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.BlockCommentEnd.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlockCommentEnd(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('*' == yyC) {
      yyIndex = yyStart + 1;

      yyC = character(yyIndex);
      if ('/' == yyC) {
        yyIndex = yyIndex + 1;
        String v$g$1 = "*/";

        yyValue = GNode.create("BlockCommentEnd", v$g$1);
        yyValue.setLocation(location(yyStart));

        return new SemanticValue(yyValue, yyIndex, yyError);
      }
    }

    // Done.
    yyError = yyError.select("block comment end expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.BlockCommentData.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pBlockCommentData(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pblockedCommentData(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("BlockCommentData", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.blockedCommentData.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pblockedCommentData(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyPredResult;
    boolean    yyPredMatched;
    int        yyRepetition1;
    boolean    yyRepeated1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepeated1   = false;
    while (true) {

      yyPredMatched = false;

      yyPredResult = pblockedCommentData$$Choice1(yyRepetition1);
      if (yyPredResult.hasValue()) {

        yyPredMatched = true;
      }

      if (! yyPredMatched) {

        yyC = character(yyRepetition1);
        if (-1 != yyC) {
          yyIndex = yyRepetition1 + 1;

          yyRepetition1 = yyIndex;
          yyRepeated1   = true;
          continue;
        }
      } else {
        yyError = yyError.select("blocked comment data expected", yyStart);
      }
      break;
    }

    if (yyRepeated1) {

      yyValue = difference(yyStart, yyRepetition1);

      return new SemanticValue(yyValue, yyRepetition1, yyError);
    }

    // Done.
    yyError = yyError.select("blocked comment data expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse synthetic nonterminal
   * org.netbeans.modules.scala.core.rats.ParserScala.blockedCommentData$$Choice1.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pblockedCommentData$$Choice1(final int yyStart)
    throws IOException {

    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyRepetition1;
    boolean    yyRepeated1;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '@':
        {
          yyRepetition1 = yyIndex;
          yyRepeated1   = false;
          while (true) {

            yyResult = pletter(yyRepetition1);
            yyError  = yyResult.select(yyError);
            if (yyResult.hasValue()) {

              yyRepetition1 = yyResult.index;
              yyRepeated1   = true;
              continue;
            }
            break;
          }

          if (yyRepeated1) {

            yyValue = null;

            return new SemanticValue(yyValue, yyRepetition1, yyError);
          }
        }
        break;

      case '*':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if ('/' == yyC) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      case '/':
        {
          yyC = character(yyIndex);
          if (-1 != yyC) {
            yyIndex = yyIndex + 1;
            if ('*' == yyC) {

              yyValue = null;

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }
        }
        break;

      case '\n':
      case '\r':
        {
          yyValue = null;

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("blocked comment data expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.CommentTag.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pCommentTag(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pcommentTag(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("CommentTag", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.commentTag.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pcommentTag(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyRepetition1;
    boolean    yyRepeated1;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if ('@' == yyC) {
      yyIndex = yyStart + 1;

      yyRepetition1 = yyIndex;
      yyRepeated1   = false;
      while (true) {

        yyResult = pletter(yyRepetition1);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyRepetition1 = yyResult.index;
          yyRepeated1   = true;
          continue;
        }
        break;
      }

      if (yyRepeated1) {

        yyValue = difference(yyStart, yyRepetition1);

        return new SemanticValue(yyValue, yyRepetition1, yyError);
      }
    }

    // Done.
    yyError = yyError.select("comment tag expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Spacing.N.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pN(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    int        yyRepetition2;
    boolean    yyRepeated2;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    while (true) {

      final int yyChoice1 = yyRepetition1;

      // Nested alternative 1.

      yyRepetition2 = yyChoice1;
      yyRepeated2   = false;
      while (true) {

        final int yyChoice2 = yyRepetition2;

        // Nested alternative 1.

        yyC = character(yyChoice2);
        if (-1 != yyC) {
          yyIndex = yyChoice2 + 1;

          switch (yyC) {
          case ' ':
            {
              yyRepetition2 = yyIndex;
              yyRepeated2   = true;
              continue;
            }

          case '\f':
            {
              yyRepetition2 = yyIndex;
              yyRepeated2   = true;
              continue;
            }

          case '\t':
            {
              yyRepetition2 = yyIndex;
              yyRepeated2   = true;
              continue;
            }

          default:
            /* No match. */
          }
        }
        break;
      }

      if (yyRepeated2) {

        yyRepetition1 = yyRepetition2;
        continue;
      }

      // Nested alternative 2.

      yyResult = pDocComment(yyChoice1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        continue;
      }

      // Nested alternative 3.

      yyResult = pBlockComment(yyChoice1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        continue;
      }

      // Nested alternative 4.

      yyBase = yyChoice1;
      yyC    = character(yyBase);
      if ('/' == yyC) {
        yyIndex = yyChoice1 + 1;

        yyC = character(yyIndex);
        if ('/' == yyC) {
          yyIndex = yyIndex + 1;

          yyRepetition2 = yyIndex;
          while (true) {

            yyC = character(yyRepetition2);
            if (-1 != yyC) {
              yyIndex = yyRepetition2 + 1;

              switch (yyC) {
              case '\n':
              case '\r':
                /* No match. */
                break;

              default:
                {
                  yyRepetition2 = yyIndex;
                  continue;
                }
              }
            }
            break;
          }

          yyRepetition1 = yyRepetition2;
          continue;
        } else {
          yyError = yyError.select("'//' expected", yyBase);
        }
      } else {
        yyError = yyError.select("'//' expected", yyBase);
      }
      break;
    }

    yyResult = pn(yyRepetition1);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyValue = null;

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    yyError = yyError.select("N expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.Spacing.SKIP_TILL_N.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSKIP_TILL_N(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    int        yyRepetition2;
    boolean    yyRepeated2;
    int        yyRepetition3;
    boolean    yyRepeated3;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    while (true) {

      yyRepetition2 = yyRepetition1;
      while (true) {

        final int yyChoice1 = yyRepetition2;

        // Nested alternative 1.

        yyRepetition3 = yyChoice1;
        yyRepeated3   = false;
        while (true) {

          final int yyChoice2 = yyRepetition3;

          // Nested alternative 1.

          yyC = character(yyChoice2);
          if (-1 != yyC) {
            yyIndex = yyChoice2 + 1;

            switch (yyC) {
            case ' ':
              {
                yyRepetition3 = yyIndex;
                yyRepeated3   = true;
                continue;
              }

            case '\f':
              {
                yyRepetition3 = yyIndex;
                yyRepeated3   = true;
                continue;
              }

            case '\t':
              {
                yyRepetition3 = yyIndex;
                yyRepeated3   = true;
                continue;
              }

            default:
              /* No match. */
            }
          }
          break;
        }

        if (yyRepeated3) {

          yyRepetition2 = yyRepetition3;
          continue;
        }

        // Nested alternative 2.

        yyResult = pDocComment(yyChoice1);
        yyError  = yyResult.select(yyError, yyRepetition2);
        if (yyResult.hasValue()) {

          yyRepetition2 = yyResult.index;
          continue;
        }

        // Nested alternative 3.

        yyResult = pBlockComment(yyChoice1);
        yyError  = yyResult.select(yyError, yyRepetition2);
        if (yyResult.hasValue()) {

          yyRepetition2 = yyResult.index;
          continue;
        }

        // Nested alternative 4.

        yyBase = yyChoice1;
        yyC    = character(yyBase);
        if ('/' == yyC) {
          yyIndex = yyChoice1 + 1;

          yyC = character(yyIndex);
          if ('/' == yyC) {
            yyIndex = yyIndex + 1;

            yyRepetition3 = yyIndex;
            while (true) {

              yyC = character(yyRepetition3);
              if (-1 != yyC) {
                yyIndex = yyRepetition3 + 1;

                switch (yyC) {
                case '\n':
                case '\r':
                  /* No match. */
                  break;

                default:
                  {
                    yyRepetition3 = yyIndex;
                    continue;
                  }
                }
              }
              break;
            }

            yyRepetition2 = yyRepetition3;
            continue;
          } else {
            yyError = yyError.select("'//' expected", yyBase);
          }
        } else {
          yyError = yyError.select("'//' expected", yyBase);
        }
        break;
      }

      yyRepeated2   = false;
      while (true) {

        yyResult = pn(yyRepetition2);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          yyRepetition2 = yyResult.index;
          yyRepeated2   = true;
          continue;
        }
        break;
      }

      if (yyRepeated2) {

        yyRepetition1 = yyRepetition2;
        continue;
      }
      break;
    }

    yyValue = null;

    return new SemanticValue(yyValue, yyRepetition1, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Spacing.SKIP_N.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSKIP_N(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyRepetition1;
    int        yyRepetition2;
    boolean    yyRepeated2;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    while (true) {

      final int yyChoice1 = yyRepetition1;

      // Nested alternative 1.

      yyRepetition2 = yyChoice1;
      yyRepeated2   = false;
      while (true) {

        final int yyChoice2 = yyRepetition2;

        // Nested alternative 1.

        yyC = character(yyChoice2);
        if (-1 != yyC) {
          yyIndex = yyChoice2 + 1;

          switch (yyC) {
          case ' ':
            {
              yyRepetition2 = yyIndex;
              yyRepeated2   = true;
              continue;
            }

          case '\f':
            {
              yyRepetition2 = yyIndex;
              yyRepeated2   = true;
              continue;
            }

          case '\t':
            {
              yyRepetition2 = yyIndex;
              yyRepeated2   = true;
              continue;
            }

          default:
            /* No match. */
          }
        }
        break;
      }

      if (yyRepeated2) {

        yyRepetition1 = yyRepetition2;
        continue;
      }

      // Nested alternative 2.

      yyResult = pDocComment(yyChoice1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        continue;
      }

      // Nested alternative 3.

      yyResult = pBlockComment(yyChoice1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        continue;
      }

      // Nested alternative 4.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case '/':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('/' == yyC) {

                yyRepetition2 = yyIndex;
                while (true) {

                  yyC = character(yyRepetition2);
                  if (-1 != yyC) {
                    yyIndex = yyRepetition2 + 1;

                    switch (yyC) {
                    case '\n':
                    case '\r':
                      /* No match. */
                      break;

                    default:
                      {
                        yyRepetition2 = yyIndex;
                        continue;
                      }
                    }
                  }
                  break;
                }

                yyRepetition1 = yyRepetition2;
                continue;
              }
            }
          }
          break;

        case '\r':
          {
            final int yyChoice2 = yyIndex;

            // Nested alternative 1.

            yyC = character(yyChoice2);
            if (-1 != yyC) {
              yyIndex = yyChoice2 + 1;
              if ('\n' == yyC) {

                yyRepetition1 = yyIndex;
                continue;
              }
            }

            // Nested alternative 2.

            yyRepetition1 = yyChoice2;
            continue;
          }

        case '\n':
          {
            yyRepetition1 = yyIndex;
            continue;
          }

        default:
          /* No match. */
        }
      }
      break;
    }

    yyValue = null;

    return new SemanticValue(yyValue, yyRepetition1, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Spacing.SKIP.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pSKIP(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    Result     yyResult;
    int        yyBase;
    int        yyRepetition1;
    int        yyRepetition2;
    boolean    yyRepeated2;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    if (yyState.newlineEnable()) {

      yyRepetition1 = yyStart;
      while (true) {

        final int yyChoice1 = yyRepetition1;

        // Nested alternative 1.

        yyRepetition2 = yyChoice1;
        yyRepeated2   = false;
        while (true) {

          final int yyChoice2 = yyRepetition2;

          // Nested alternative 1.

          yyC = character(yyChoice2);
          if (-1 != yyC) {
            yyIndex = yyChoice2 + 1;

            switch (yyC) {
            case ' ':
              {
                yyRepetition2 = yyIndex;
                yyRepeated2   = true;
                continue;
              }

            case '\f':
              {
                yyRepetition2 = yyIndex;
                yyRepeated2   = true;
                continue;
              }

            case '\t':
              {
                yyRepetition2 = yyIndex;
                yyRepeated2   = true;
                continue;
              }

            default:
              /* No match. */
            }
          }
          break;
        }

        if (yyRepeated2) {

          yyRepetition1 = yyRepetition2;
          continue;
        }

        // Nested alternative 2.

        yyResult = pDocComment(yyChoice1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {

          yyRepetition1 = yyResult.index;
          continue;
        }

        // Nested alternative 3.

        yyResult = pBlockComment(yyChoice1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {

          yyRepetition1 = yyResult.index;
          continue;
        }

        // Nested alternative 4.

        yyBase = yyChoice1;
        yyC    = character(yyBase);
        if ('/' == yyC) {
          yyIndex = yyChoice1 + 1;

          yyC = character(yyIndex);
          if ('/' == yyC) {
            yyIndex = yyIndex + 1;

            yyRepetition2 = yyIndex;
            while (true) {

              yyC = character(yyRepetition2);
              if (-1 != yyC) {
                yyIndex = yyRepetition2 + 1;

                switch (yyC) {
                case '\n':
                case '\r':
                  /* No match. */
                  break;

                default:
                  {
                    yyRepetition2 = yyIndex;
                    continue;
                  }
                }
              }
              break;
            }

            yyRepetition1 = yyRepetition2;
            continue;
          } else {
            yyError = yyError.select("'//' expected", yyBase);
          }
        } else {
          yyError = yyError.select("'//' expected", yyBase);
        }
        break;
      }

      yyValue = null;

      return new SemanticValue(yyValue, yyRepetition1, yyError);
    }

    // Alternative 2.

    yyRepetition1 = yyStart;
    while (true) {

      final int yyChoice1 = yyRepetition1;

      // Nested alternative 1.

      yyRepetition2 = yyChoice1;
      yyRepeated2   = false;
      while (true) {

        final int yyChoice2 = yyRepetition2;

        // Nested alternative 1.

        yyC = character(yyChoice2);
        if (-1 != yyC) {
          yyIndex = yyChoice2 + 1;

          switch (yyC) {
          case ' ':
            {
              yyRepetition2 = yyIndex;
              yyRepeated2   = true;
              continue;
            }

          case '\f':
            {
              yyRepetition2 = yyIndex;
              yyRepeated2   = true;
              continue;
            }

          case '\t':
            {
              yyRepetition2 = yyIndex;
              yyRepeated2   = true;
              continue;
            }

          default:
            /* No match. */
          }
        }
        break;
      }

      if (yyRepeated2) {

        yyRepetition1 = yyRepetition2;
        continue;
      }

      // Nested alternative 2.

      yyResult = pDocComment(yyChoice1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        continue;
      }

      // Nested alternative 3.

      yyResult = pBlockComment(yyChoice1);
      yyError  = yyResult.select(yyError, yyRepetition1);
      if (yyResult.hasValue()) {

        yyRepetition1 = yyResult.index;
        continue;
      }

      // Nested alternative 4.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case '/':
          {
            yyC = character(yyIndex);
            if (-1 != yyC) {
              yyIndex = yyIndex + 1;
              if ('/' == yyC) {

                yyRepetition2 = yyIndex;
                while (true) {

                  yyC = character(yyRepetition2);
                  if (-1 != yyC) {
                    yyIndex = yyRepetition2 + 1;

                    switch (yyC) {
                    case '\n':
                    case '\r':
                      /* No match. */
                      break;

                    default:
                      {
                        yyRepetition2 = yyIndex;
                        continue;
                      }
                    }
                  }
                  break;
                }

                yyRepetition1 = yyRepetition2;
                continue;
              }
            }
          }
          break;

        case '\r':
          {
            final int yyChoice2 = yyIndex;

            // Nested alternative 1.

            yyC = character(yyChoice2);
            if (-1 != yyC) {
              yyIndex = yyChoice2 + 1;
              if ('\n' == yyC) {

                yyRepetition1 = yyIndex;
                continue;
              }
            }

            // Nested alternative 2.

            yyRepetition1 = yyChoice2;
            continue;
          }

        case '\n':
          {
            yyRepetition1 = yyIndex;
            continue;
          }

        default:
          /* No match. */
        }
      }
      break;
    }

    yyValue = null;

    return new SemanticValue(yyValue, yyRepetition1, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Spacing.Nl.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pNl(final int yyStart) throws IOException {
    Result     yyResult;
    Node       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pn(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      String v$g$1 = yyResult.semanticValue();

      yyValue = GNode.create("Nl", v$g$1);
      yyValue.setLocation(location(yyStart));

      return yyResult.createValue(yyValue, yyError);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Spacing.n.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pn(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '\r':
        {
          final int yyChoice1 = yyIndex;

          // Nested alternative 1.

          yyC = character(yyChoice1);
          if (-1 != yyC) {
            yyIndex = yyChoice1 + 1;
            if ('\n' == yyC) {

              yyValue = "\r\n";

              return new SemanticValue(yyValue, yyIndex, yyError);
            }
          }

          // Nested alternative 2.

          yyValue = "\r";

          return new SemanticValue(yyValue, yyChoice1, yyError);
        }

      case '\n':
        {
          yyValue = "\n";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("n expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Spacing.w.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pw(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    int        yyRepetition1;
    boolean    yyRepeated1;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyRepetition1 = yyStart;
    yyRepeated1   = false;
    while (true) {

      final int yyChoice1 = yyRepetition1;

      // Nested alternative 1.

      yyC = character(yyChoice1);
      if (-1 != yyC) {
        yyIndex = yyChoice1 + 1;

        switch (yyC) {
        case ' ':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        case '\f':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        case '\t':
          {
            yyRepetition1 = yyIndex;
            yyRepeated1   = true;
            continue;
          }

        default:
          /* No match. */
        }
      }
      break;
    }

    if (yyRepeated1) {

      yyValue = null;

      return new SemanticValue(yyValue, yyRepetition1, yyError);
    }

    // Done.
    yyError = yyError.select("w expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Spacing.EOF.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pEOF(final int yyStart) throws IOException {
    int        yyC;
    boolean    yyPredMatched;
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyPredMatched = false;

    yyC = character(yyStart);
    if (-1 != yyC) {

      yyPredMatched = true;
    }

    if (! yyPredMatched) {

      yyValue = null;

      return new SemanticValue(yyValue, yyStart, yyError);
    } else {
      yyError = yyError.select("EOF expected", yyStart);
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Symbol.sep.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result psep(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk7) yyColumn.chunk7 = new Chunk7();
    if (null == yyColumn.chunk7.fsep) yyColumn.chunk7.fsep = psep$1(yyStart);
    return yyColumn.chunk7.fsep;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.Symbol.sep. */
  private Result psep$1(final int yyStart) throws IOException {
    Result     yyResult;
    int        yyBase;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyResult = pSKIP_N(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      final int yyChoice1 = yyResult.index;

      // Nested alternative 1.

      yyBase   = yyChoice1;
      yyResult = pseparator(yyBase);
      if (yyResult.hasValue(",")) {
        yyValue = ",";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("',' expected", yyBase);
      }

      // Nested alternative 2.

      yyBase   = yyChoice1;
      yyResult = pseparator(yyBase);
      if (yyResult.hasValue(".")) {
        yyValue = ".";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'.' expected", yyBase);
      }

      // Nested alternative 3.

      yyBase   = yyChoice1;
      yyResult = pseparator(yyBase);
      if (yyResult.hasValue(";")) {
        yyValue = ";";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("';' expected", yyBase);
      }

      // Nested alternative 4.

      yyBase   = yyChoice1;
      yyResult = pseparator(yyBase);
      if (yyResult.hasValue("[")) {
        yyValue = "[";

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      } else {
        yyError = yyError.select("'[' expected", yyBase);
      }

      // Nested alternative 5.

      yyBase   = yyChoice1;
      yyResult = pseparator(yyBase);
      if (yyResult.hasValue(")")) {
        yyValue = ")";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("')' expected", yyBase);
      }

      // Nested alternative 6.

      yyBase   = yyChoice1;
      yyResult = pseparator(yyBase);
      if (yyResult.hasValue("]")) {
        yyValue = "]";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("']' expected", yyBase);
      }

      // Nested alternative 7.

      yyBase   = yyChoice1;
      yyResult = pseparator(yyBase);
      if (yyResult.hasValue("}")) {
        yyValue = "}";

        return yyResult.createValue(yyValue, yyError);
      } else {
        yyError = yyError.select("'}' expected", yyBase);
      }
    }

    // Alternative 2.

    yyResult = pSKIP(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {

      yyResult = pseparator(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        yyValue = yyResult.semanticValue();

        yyResult = pSKIP_TILL_N(yyResult.index);
        yyError  = yyResult.select(yyError);
        if (yyResult.hasValue()) {

          return yyResult.createValue(yyValue, yyError);
        }
      }
    }

    // Done.
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal org.netbeans.modules.scala.core.rats.Symbol.separator.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pseparator(final int yyStart) throws IOException {
    ParserScalaColumn yyColumn = (ParserScalaColumn)column(yyStart);
    if (null == yyColumn.chunk7) yyColumn.chunk7 = new Chunk7();
    if (null == yyColumn.chunk7.fseparator)
      yyColumn.chunk7.fseparator = pseparator$1(yyStart);
    return yyColumn.chunk7.fseparator;
  }

  /** Actually parse org.netbeans.modules.scala.core.rats.Symbol.separator. */
  private Result pseparator$1(final int yyStart) throws IOException {
    int        yyC;
    int        yyIndex;
    String     yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyC = character(yyStart);
    if (-1 != yyC) {
      yyIndex = yyStart + 1;

      switch (yyC) {
      case '(':
        {
          yyValue = "(";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case ')':
        {
          yyValue = ")";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case '[':
        {
          yyValue = "[";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case ']':
        {
          yyValue = "]";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case '{':
        {
          yyValue = "{";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case '}':
        {
          yyValue = "}";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case ',':
        {
          yyValue = ",";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case ';':
        {
          yyValue = ";";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case '.':
        {
          yyValue = ".";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      case '|':
        {
          yyValue = "|";

          return new SemanticValue(yyValue, yyIndex, yyError);
        }

      default:
        /* No match. */
      }
    }

    // Done.
    yyError = yyError.select("separator expected", yyStart);
    return yyError;
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.State.ENTER_NL_ENABLE.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pENTER_NL_ENABLE(final int yyStart) throws IOException {
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyState.enterNewlineEnable();

    yyValue = null;

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.State.EXIT_NL_ENABLE.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pEXIT_NL_ENABLE(final int yyStart) throws IOException {
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyState.exitNewlineEnable();

    yyValue = null;

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.State.ENTER_NL_DISABLE.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pENTER_NL_DISABLE(final int yyStart) throws IOException {
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyState.enterNewlineDisable();

    yyValue = null;

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  /**
   * Parse nonterminal
   * org.netbeans.modules.scala.core.rats.State.EXIT_NL_DISABLE.
   *
   * @param yyStart The index.
   * @return The result.
   * @throws IOException Signals an I/O error.
   */
  private Result pEXIT_NL_DISABLE(final int yyStart) throws IOException {
    Void       yyValue;
    ParseError yyError = ParseError.DUMMY;

    // Alternative 1.

    yyState.exitNewlineDisable();

    yyValue = null;

    return new SemanticValue(yyValue, yyStart, yyError);
  }

  // =========================================================================

  static {
    add(SCALA_KEYWORDS, new String[] {
      "abstract",
      "case",
      "catch",
      "class",
      "def",
      "do",
      "else",
      "extends",
      "false",
      "final",
      "finally",
      "for",
      "forSome",
      "if",
      "implicit",
      "import",
      "lazy",
      "match",
      "new",
      "null",
      "object",
      "override",
      "package",
      "private",
      "protected",
      "requires",
      "return",
      "sealed",
      "super",
      "this",
      "throw",
      "trait",
      "try",
      "true",
      "type",
      "val",
      "var",
      "while",
      "with",
      "yield",
      "_",
      ":",
      "=",
      "=>",
      "\u21D2",
      "<-",
      "\u2190",
      "<:",
      "<%",
      ">:",
      "#",
      "@"
    });
  }

  // =========================================================================

  /**
   * Get the specified text.
   *
   * @param s The text.
   * @return The text.
   */
  protected static final String toText(String s) {
    return s;
  }

  // =========================================================================

  /**
   * Add the specified values to the specified set.
   *
   * @param set The set.
   * @param values The new values.
   */
  protected static final <T> void add(Set<T> set, T[] values) {
    for (T v : values) set.add(v);
  }

  /**
   * Check whether the specified set contains the specified value.
   *
   * @param set The set.
   * @param value The value.
   * @return <code>true</code> if the set contains the value.
   */
  protected static final <T> boolean contains(Set<T> set, T value) {
    return set.contains(value);
  }

}
TOP

Related Classes of org.netbeans.modules.scala.core.rats.ParserScala

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.