private Result pDirectDeclarator(final int yyStart) throws IOException {
    Result             yyResult;
    int                yyBase;
    int                yyRepetition1;
    Pair<Action<Node>> yyRepValue1;
    Node               yyValue;
    ParseError         yyError = ParseError.DUMMY;

    // Alternative <FullBase>.

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

      yyResult = pAttributedDeclarator(yyResult.index);
      yyError  = yyResult.select(yyError);
      if (yyResult.hasValue()) {
        final Node v$g$7 = yyResult.semanticValue();

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

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

            yyResult = pDirectDeclarator$$Tail1(yyRepetition1);
            yyError  = yyResult.select(yyError, yyRepetition1);
            if (yyResult.hasValue()) {
              final Action<Node> v$8 = yyResult.semanticValue();

              yyRepetition1 = yyResult.index;
              yyRepValue1   = new Pair<Action<Node>>(v$8, yyRepValue1);
              continue;
            }
            break;
          }
          { // Start scope for v$9.
            final Pair<Action<Node>> v$9 = yyRepValue1.reverse();

            yyValue = apply(v$9, v$g$7, yyStart);

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

    // Alternative <SimpleBase>.

    yyResult = pSimpleDeclarator(yyStart);
    yyError  = yyResult.select(yyError);
    if (yyResult.hasValue()) {
      final Node v$g$10 = yyResult.semanticValue();

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

        yyResult = pDirectDeclarator$$Tail1(yyRepetition1);
        yyError  = yyResult.select(yyError, yyRepetition1);
        if (yyResult.hasValue()) {
          final Action<Node> v$11 = yyResult.semanticValue();

          yyRepetition1 = yyResult.index;
          yyRepValue1   = new Pair<Action<Node>>(v$11, yyRepValue1);
          continue;
        }
        break;
      }
      { // Start scope for v$12.
        final Pair<Action<Node>> v$12 = yyRepValue1.reverse();

        yyValue = apply(v$12, v$g$10, yyStart);

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

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