* @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.