00001: // ===========================================================================
00002: // This file has been generated by
00003: // Rats! Parser Generator, version 1.13.2,
00004: // (C) 2004-2007 Robert Grimm,
00005: // on Tuesday, November 27, 2007 at 1:37:19 PM.
00006: // Edit at your own risk.
00007: // ===========================================================================
00008:
00009: package xtc.lang.jeannie;
00010:
00011: import java.io.Reader;
00012: import java.io.BufferedReader;
00013: import java.io.BufferedWriter;
00014: import java.io.File;
00015: import java.io.FileReader;
00016: import java.io.OutputStreamWriter;
00017: import java.io.IOException;
00018:
00019: import java.util.HashSet;
00020: import java.util.Set;
00021:
00022: import xtc.util.Action;
00023: import xtc.util.Pair;
00024:
00025: import xtc.tree.Node;
00026: import xtc.tree.GNode;
00027: import xtc.tree.Printer;
00028:
00029: import xtc.parser.ParserBase;
00030: import xtc.parser.Column;
00031: import xtc.parser.Result;
00032: import xtc.parser.SemanticValue;
00033: import xtc.parser.ParseError;
00034:
00035: import xtc.lang.CParserState;
00036:
00037: /**
00038: * Packrat parser for grammar <code>xtc.lang.jeannie.Jeannie</code>.
00039: *
00040: * <p />This class has been generated by the <i>Rats!</i> parser
00041: * generator, version 1.13.2, (C) 2004-2007 Robert Grimm.
00042: */
00043: public final class JeannieParser extends ParserBase {
00044:
00045: /** The RELOCATE flag. */
00046: public static final boolean RELOCATE = true;
00047:
00048: /** The C_KEYWORDS set. */
00049: public static final Set<String> C_KEYWORDS = new HashSet<String>();
00050:
00051: /** The GCC flag. */
00052: public static final boolean GCC = true;
00053:
00054: /** The JAVA_KEYWORDS set. */
00055: public static final Set<String> JAVA_KEYWORDS = new HashSet<String>();
00056:
00057: /** The C99 flag. */
00058: public static final boolean C99 = true;
00059:
00060: // =========================================================================
00061:
00062: /** Chunk 1 of memoized results. */
00063: static final class Chunk1 {
00064: Result fCConstant$Exponent;
00065: Result f$$Shared10;
00066: Result fBinaryExponent;
00067: Result fCConstant$CharacterLiteral;
00068: Result fCConstant$CharacterLiteral$$Plus1;
00069: Result fCConstant$StringConstant;
00070: Result fCConstant$StringConstant$$Plus1;
00071: Result fCConstant$StringLiteral;
00072: Result fCConstant$StringLiteral$$Star1;
00073: Result fSymbol;
00074: }
00075:
00076: /** Chunk 2 of memoized results. */
00077: static final class Chunk2 {
00078: Result fCIdentifier$Identifier;
00079: Result fKeyword;
00080: Result fCIdentifier$Word;
00081: Result fResultType;
00082: Result fType;
00083: Result fJavaType$TypeName;
00084: Result fPrimitiveType;
00085: Result fDimensions;
00086: Result fDimensions$$Plus1;
00087: Result fQualifiedIdentifier;
00088: }
00089:
00090: /** Chunk 3 of memoized results. */
00091: static final class Chunk3 {
00092: Result fQualifiedIdentifier$$Star1;
00093: Result fJavaIdentifier$Identifier;
00094: Result fJavaIdentifier$Word;
00095: Result fPrelude;
00096: Result fExternalDeclaration;
00097: Result fDeclarationSpecifiers;
00098: Result fInitializedDeclaratorList;
00099: Result fInitializedDeclaratorList$$Star1;
00100: Result fSpecifierQualifierList;
00101: Result fAttributedDeclarator;
00102: }
00103:
00104: /** Chunk 4 of memoized results. */
00105: static final class Chunk4 {
00106: Result fJeannieC$Declarator;
00107: Result fPointer;
00108: Result fParameterTypeList;
00109: Result fAbstractDeclarator;
00110: Result fJeannieC$TypeName;
00111: Result fAttributeSpecifierList;
00112: Result fAttributeSpecifier;
00113: Result fJeannieC$Statement;
00114: Result fCompoundStatement;
00115: Result fCommaExpression;
00116: }
00117:
00118: /** Chunk 5 of memoized results. */
00119: static final class Chunk5 {
00120: Result fAssignmentExpression;
00121: Result fJeannieC$ConditionalExpression;
00122: Result fJeannieC$LogicalOrExpression;
00123: Result f$$Shared7;
00124: Result f$$Shared8;
00125: Result f$$Shared9;
00126: Result fJeannieC$CastExpression;
00127: Result fJeannieC$UnaryExpression;
00128: Result fJeannieC$ExpressionList;
00129: Result fJeannieC$ExpressionList$$Star1;
00130: }
00131:
00132: /** Chunk 6 of memoized results. */
00133: static final class Chunk6 {
00134: Result fSimpleAssemblyExpression;
00135: Result fAssemblyOperands;
00136: Result fAssemblyOperands$$Star1;
00137: Result fAssemblyOperand;
00138: Result fAsmKeyword;
00139: Result fJavaInC;
00140: Result fCInCBlock;
00141: Result fCInCBlock$$Star1;
00142: Result fCInCBlock$$Star2;
00143: Result fJavaThrows;
00144: }
00145:
00146: /** Chunk 7 of memoized results. */
00147: static final class Chunk7 {
00148: Result fModifiers;
00149: Result fFormalParameters;
00150: Result fFormalParameters$$Star1;
00151: Result fDeclarators;
00152: Result fDeclarators$$Star1;
00153: Result fBlock;
00154: Result fParExpression;
00155: Result fCatchClause;
00156: Result fJeannieJava$Expression;
00157: Result fJeannieJava$ConditionalExpression;
00158: }
00159:
00160: /** Chunk 8 of memoized results. */
00161: static final class Chunk8 {
00162: Result fJeannieJava$LogicalOrExpression;
00163: Result fJeannieJava$RelationalExpression;
00164: Result fVariableInitializer;
00165: Result fCInJava;
00166: Result fJavaInJavaBlock;
00167: Result fJavaInJavaBlock$$Star1;
00168: }
00169:
00170: // =========================================================================
00171:
00172: /** Memoization table column. */
00173: static final class JeannieParserColumn extends Column {
00174: Chunk1 chunk1;
00175: Chunk2 chunk2;
00176: Chunk3 chunk3;
00177: Chunk4 chunk4;
00178: Chunk5 chunk5;
00179: Chunk6 chunk6;
00180: Chunk7 chunk7;
00181: Chunk8 chunk8;
00182: }
00183:
00184: // =========================================================================
00185:
00186: /** The global state object. */
00187: protected final CParserState yyState;
00188:
00189: // =========================================================================
00190:
00191: /**
00192: * Create a new packrat parser.
00193: *
00194: * @param reader The reader.
00195: * @param file The file name.
00196: */
00197: public JeannieParser(final Reader reader, final String file) {
00198: super (reader, file);
00199: yyState = new CParserState();
00200: }
00201:
00202: /**
00203: * Create a new packrat parser.
00204: *
00205: * @param reader The file reader.
00206: * @param file The file name.
00207: * @param size The file size.
00208: */
00209: public JeannieParser(final Reader reader, final String file,
00210: final int size) {
00211: super (reader, file, size);
00212: yyState = new CParserState();
00213: }
00214:
00215: // =========================================================================
00216:
00217: protected Column newColumn() {
00218: return new JeannieParserColumn();
00219: }
00220:
00221: // =========================================================================
00222:
00223: /**
00224: * Parse nonterminal xtc.lang.jeannie.Jeannie.File.
00225: *
00226: * @param yyStart The index.
00227: * @return The result.
00228: * @throws IOException Signals an I/O error.
00229: */
00230: public Result pFile(final int yyStart) throws IOException {
00231: Result yyResult;
00232: Node yyValue;
00233: ParseError yyError = ParseError.DUMMY;
00234:
00235: // Alternative <JavaFile>.
00236:
00237: yyResult = pCompilationUnit(yyStart);
00238: yyError = yyResult.select(yyError);
00239: if (yyResult.hasValue()) {
00240: yyValue = yyResult.semanticValue();
00241:
00242: return yyResult.createValue(yyValue, yyError);
00243: }
00244:
00245: // Alternative <CFile>.
00246:
00247: yyResult = pTranslationUnit(yyStart);
00248: yyError = yyResult.select(yyError);
00249: if (yyResult.hasValue()) {
00250: yyValue = yyResult.semanticValue();
00251:
00252: return yyResult.createValue(yyValue, yyError);
00253: }
00254:
00255: // Done.
00256: return yyError;
00257: }
00258:
00259: // =========================================================================
00260:
00261: /**
00262: * Parse nonterminal xtc.lang.CConstant.Constant.
00263: *
00264: * @param yyStart The index.
00265: * @return The result.
00266: * @throws IOException Signals an I/O error.
00267: */
00268: private Result pConstant(final int yyStart) throws IOException {
00269: Result yyResult;
00270: Node yyValue;
00271: ParseError yyError = ParseError.DUMMY;
00272:
00273: // Alternative 1.
00274:
00275: yyResult = pFloatingConstant(yyStart);
00276: yyError = yyResult.select(yyError);
00277: if (yyResult.hasValue()) {
00278: yyValue = yyResult.semanticValue();
00279:
00280: yyResult = pSpacing(yyResult.index);
00281: yyError = yyResult.select(yyError);
00282: if (yyResult.hasValue()) {
00283:
00284: return yyResult.createValue(yyValue, yyError);
00285: }
00286: }
00287:
00288: // Alternative 2.
00289:
00290: yyResult = pIntegerConstant(yyStart);
00291: yyError = yyResult.select(yyError);
00292: if (yyResult.hasValue()) {
00293: yyValue = yyResult.semanticValue();
00294:
00295: yyResult = pSpacing(yyResult.index);
00296: yyError = yyResult.select(yyError);
00297: if (yyResult.hasValue()) {
00298:
00299: return yyResult.createValue(yyValue, yyError);
00300: }
00301: }
00302:
00303: // Alternative 3.
00304:
00305: yyResult = pCConstant$CharacterConstant(yyStart);
00306: yyError = yyResult.select(yyError);
00307: if (yyResult.hasValue()) {
00308: yyValue = yyResult.semanticValue();
00309:
00310: return yyResult.createValue(yyValue, yyError);
00311: }
00312:
00313: // Alternative 4.
00314:
00315: yyResult = pCConstant$StringConstant(yyStart);
00316: yyError = yyResult.select(yyError);
00317: if (yyResult.hasValue()) {
00318: yyValue = yyResult.semanticValue();
00319:
00320: return yyResult.createValue(yyValue, yyError);
00321: }
00322:
00323: // Done.
00324: return yyError;
00325: }
00326:
00327: // =========================================================================
00328:
00329: /**
00330: * Parse nonterminal xtc.lang.CConstant.IntegerConstant.
00331: *
00332: * @param yyStart The index.
00333: * @return The result.
00334: * @throws IOException Signals an I/O error.
00335: */
00336: private Result pIntegerConstant(final int yyStart)
00337: throws IOException {
00338: Result yyResult;
00339: Node yyValue;
00340: ParseError yyError = ParseError.DUMMY;
00341:
00342: // Alternative <Hex>.
00343:
00344: yyResult = pHexConstant(yyStart);
00345: yyError = yyResult.select(yyError);
00346: if (yyResult.hasValue()) {
00347: final String v$g$1 = yyResult.semanticValue();
00348:
00349: yyValue = GNode.create("IntegerConstant", v$g$1);
00350: yyValue.setLocation(location(yyStart));
00351:
00352: return yyResult.createValue(yyValue, yyError);
00353: }
00354:
00355: // Alternative <Octal>.
00356:
00357: yyResult = pOctalConstant(yyStart);
00358: yyError = yyResult.select(yyError);
00359: if (yyResult.hasValue()) {
00360: final String v$g$2 = yyResult.semanticValue();
00361:
00362: yyValue = GNode.create("IntegerConstant", v$g$2);
00363: yyValue.setLocation(location(yyStart));
00364:
00365: return yyResult.createValue(yyValue, yyError);
00366: }
00367:
00368: // Alternative <Decimal>.
00369:
00370: yyResult = pDecimalConstant(yyStart);
00371: yyError = yyResult.select(yyError);
00372: if (yyResult.hasValue()) {
00373: final String v$g$3 = yyResult.semanticValue();
00374:
00375: yyValue = GNode.create("IntegerConstant", v$g$3);
00376: yyValue.setLocation(location(yyStart));
00377:
00378: return yyResult.createValue(yyValue, yyError);
00379: }
00380:
00381: // Done.
00382: return yyError;
00383: }
00384:
00385: // =========================================================================
00386:
00387: /**
00388: * Parse nonterminal xtc.lang.CConstant.DecimalConstant.
00389: *
00390: * @param yyStart The index.
00391: * @return The result.
00392: * @throws IOException Signals an I/O error.
00393: */
00394: private Result pDecimalConstant(final int yyStart)
00395: throws IOException {
00396: int yyC;
00397: int yyIndex;
00398: Result yyResult;
00399: int yyRepetition1;
00400: int yyOption1;
00401: String yyValue;
00402: ParseError yyError = ParseError.DUMMY;
00403:
00404: // Alternative 1.
00405:
00406: yyC = character(yyStart);
00407: if (-1 != yyC) {
00408: yyIndex = yyStart + 1;
00409:
00410: switch (yyC) {
00411: case '1':
00412: case '2':
00413: case '3':
00414: case '4':
00415: case '5':
00416: case '6':
00417: case '7':
00418: case '8':
00419: case '9': {
00420: yyRepetition1 = yyIndex;
00421: while (true) {
00422:
00423: yyC = character(yyRepetition1);
00424: if (-1 != yyC) {
00425: yyIndex = yyRepetition1 + 1;
00426:
00427: switch (yyC) {
00428: case '0':
00429: case '1':
00430: case '2':
00431: case '3':
00432: case '4':
00433: case '5':
00434: case '6':
00435: case '7':
00436: case '8':
00437: case '9': {
00438: yyRepetition1 = yyIndex;
00439: continue;
00440: }
00441:
00442: default:
00443: /* No match. */
00444: }
00445: }
00446: break;
00447: }
00448:
00449: yyOption1 = yyRepetition1;
00450:
00451: yyResult = pIntegerSuffix(yyOption1);
00452: yyError = yyResult.select(yyError);
00453: if (yyResult.hasValue()) {
00454:
00455: yyOption1 = yyResult.index;
00456: }
00457:
00458: yyValue = difference(yyStart, yyOption1);
00459:
00460: return new SemanticValue(yyValue, yyOption1, yyError);
00461: }
00462:
00463: default:
00464: /* No match. */
00465: }
00466: }
00467:
00468: // Done.
00469: yyError = yyError.select("decimal constant expected", yyStart);
00470: return yyError;
00471: }
00472:
00473: // =========================================================================
00474:
00475: /**
00476: * Parse nonterminal xtc.lang.CConstant.HexConstant.
00477: *
00478: * @param yyStart The index.
00479: * @return The result.
00480: * @throws IOException Signals an I/O error.
00481: */
00482: private Result pHexConstant(final int yyStart) throws IOException {
00483: int yyC;
00484: int yyIndex;
00485: Result yyResult;
00486: int yyRepetition1;
00487: boolean yyRepeated1;
00488: int yyOption1;
00489: String yyValue;
00490: ParseError yyError = ParseError.DUMMY;
00491:
00492: // Alternative 1.
00493:
00494: yyResult = pHexPrefix(yyStart);
00495: yyError = yyResult.select(yyError);
00496: if (yyResult.hasValue()) {
00497:
00498: yyRepetition1 = yyResult.index;
00499: yyRepeated1 = false;
00500: while (true) {
00501:
00502: yyC = character(yyRepetition1);
00503: if (-1 != yyC) {
00504: yyIndex = yyRepetition1 + 1;
00505:
00506: switch (yyC) {
00507: case '0':
00508: case '1':
00509: case '2':
00510: case '3':
00511: case '4':
00512: case '5':
00513: case '6':
00514: case '7':
00515: case '8':
00516: case '9':
00517: case 'A':
00518: case 'B':
00519: case 'C':
00520: case 'D':
00521: case 'E':
00522: case 'F':
00523: case 'a':
00524: case 'b':
00525: case 'c':
00526: case 'd':
00527: case 'e':
00528: case 'f': {
00529: yyRepetition1 = yyIndex;
00530: yyRepeated1 = true;
00531: continue;
00532: }
00533:
00534: default:
00535: /* No match. */
00536: }
00537: }
00538: break;
00539: }
00540:
00541: if (yyRepeated1) {
00542:
00543: yyOption1 = yyRepetition1;
00544:
00545: yyResult = pIntegerSuffix(yyOption1);
00546: yyError = yyResult.select(yyError);
00547: if (yyResult.hasValue()) {
00548:
00549: yyOption1 = yyResult.index;
00550: }
00551:
00552: yyValue = difference(yyStart, yyOption1);
00553:
00554: return new SemanticValue(yyValue, yyOption1, yyError);
00555: }
00556: }
00557:
00558: // Done.
00559: yyError = yyError.select("hex constant expected", yyStart);
00560: return yyError;
00561: }
00562:
00563: // =========================================================================
00564:
00565: /**
00566: * Parse nonterminal xtc.lang.CConstant.HexPrefix.
00567: *
00568: * @param yyStart The index.
00569: * @return The result.
00570: * @throws IOException Signals an I/O error.
00571: */
00572: private Result pHexPrefix(final int yyStart) throws IOException {
00573: int yyC;
00574: int yyIndex;
00575: Void yyValue;
00576: ParseError yyError = ParseError.DUMMY;
00577:
00578: // Alternative 1.
00579:
00580: yyC = character(yyStart);
00581: if ('0' == yyC) {
00582: yyIndex = yyStart + 1;
00583:
00584: yyC = character(yyIndex);
00585: if (-1 != yyC) {
00586: yyIndex = yyIndex + 1;
00587:
00588: switch (yyC) {
00589: case 'X':
00590: case 'x': {
00591: yyValue = null;
00592:
00593: return new SemanticValue(yyValue, yyIndex, yyError);
00594: }
00595:
00596: default:
00597: /* No match. */
00598: }
00599: }
00600: }
00601:
00602: // Done.
00603: yyError = yyError.select("hex prefix expected", yyStart);
00604: return yyError;
00605: }
00606:
00607: // =========================================================================
00608:
00609: /**
00610: * Parse nonterminal xtc.lang.CConstant.OctalConstant.
00611: *
00612: * @param yyStart The index.
00613: * @return The result.
00614: * @throws IOException Signals an I/O error.
00615: */
00616: private Result pOctalConstant(final int yyStart) throws IOException {
00617: int yyC;
00618: int yyIndex;
00619: Result yyResult;
00620: int yyRepetition1;
00621: int yyOption1;
00622: String yyValue;
00623: ParseError yyError = ParseError.DUMMY;
00624:
00625: // Alternative 1.
00626:
00627: yyC = character(yyStart);
00628: if ('0' == yyC) {
00629: yyIndex = yyStart + 1;
00630:
00631: yyRepetition1 = yyIndex;
00632: while (true) {
00633:
00634: yyC = character(yyRepetition1);
00635: if (-1 != yyC) {
00636: yyIndex = yyRepetition1 + 1;
00637:
00638: switch (yyC) {
00639: case '0':
00640: case '1':
00641: case '2':
00642: case '3':
00643: case '4':
00644: case '5':
00645: case '6':
00646: case '7': {
00647: yyRepetition1 = yyIndex;
00648: continue;
00649: }
00650:
00651: default:
00652: /* No match. */
00653: }
00654: }
00655: break;
00656: }
00657:
00658: yyOption1 = yyRepetition1;
00659:
00660: yyResult = pIntegerSuffix(yyOption1);
00661: yyError = yyResult.select(yyError);
00662: if (yyResult.hasValue()) {
00663:
00664: yyOption1 = yyResult.index;
00665: }
00666:
00667: yyValue = difference(yyStart, yyOption1);
00668:
00669: return new SemanticValue(yyValue, yyOption1, yyError);
00670: }
00671:
00672: // Done.
00673: yyError = yyError.select("octal constant expected", yyStart);
00674: return yyError;
00675: }
00676:
00677: // =========================================================================
00678:
00679: /**
00680: * Parse nonterminal xtc.lang.CConstant.IntegerSuffix.
00681: *
00682: * @param yyStart The index.
00683: * @return The result.
00684: * @throws IOException Signals an I/O error.
00685: */
00686: private Result pIntegerSuffix(final int yyStart) throws IOException {
00687: int yyC;
00688: int yyIndex;
00689: Result yyResult;
00690: Void yyValue;
00691: ParseError yyError = ParseError.DUMMY;
00692:
00693: // Alternative 1.
00694:
00695: yyResult = pLongLongSuffix(yyStart);
00696: yyError = yyResult.select(yyError);
00697: if (yyResult.hasValue()) {
00698:
00699: final int yyChoice1 = yyResult.index;
00700:
00701: // Nested alternative 1.
00702:
00703: yyC = character(yyChoice1);
00704: if (-1 != yyC) {
00705: yyIndex = yyChoice1 + 1;
00706:
00707: switch (yyC) {
00708: case 'U':
00709: case 'u': {
00710: yyValue = null;
00711:
00712: return new SemanticValue(yyValue, yyIndex, yyError);
00713: }
00714:
00715: default:
00716: /* No match. */
00717: }
00718: }
00719:
00720: // Nested alternative 2.
00721:
00722: yyValue = null;
00723:
00724: return new SemanticValue(yyValue, yyChoice1, yyError);
00725: }
00726:
00727: // Alternative 2.
00728:
00729: yyC = character(yyStart);
00730: if (-1 != yyC) {
00731: yyIndex = yyStart + 1;
00732:
00733: switch (yyC) {
00734: case 'L':
00735: case 'l': {
00736: final int yyChoice1 = yyIndex;
00737:
00738: // Nested alternative 1.
00739:
00740: yyC = character(yyChoice1);
00741: if (-1 != yyC) {
00742: yyIndex = yyChoice1 + 1;
00743:
00744: switch (yyC) {
00745: case 'U':
00746: case 'u': {
00747: yyValue = null;
00748:
00749: return new SemanticValue(yyValue, yyIndex,
00750: yyError);
00751: }
00752:
00753: default:
00754: /* No match. */
00755: }
00756: }
00757:
00758: // Nested alternative 2.
00759:
00760: yyValue = null;
00761:
00762: return new SemanticValue(yyValue, yyChoice1, yyError);
00763: }
00764:
00765: case 'U':
00766: case 'u': {
00767: final int yyChoice1 = yyIndex;
00768:
00769: // Nested alternative 1.
00770:
00771: yyC = character(yyChoice1);
00772: if (-1 != yyC) {
00773: yyIndex = yyChoice1 + 1;
00774:
00775: switch (yyC) {
00776: case 'l': {
00777: yyC = character(yyIndex);
00778: if (-1 != yyC) {
00779: yyIndex = yyIndex + 1;
00780: if ('l' == yyC) {
00781:
00782: yyValue = null;
00783:
00784: return new SemanticValue(yyValue,
00785: yyIndex, yyError);
00786: }
00787: }
00788: }
00789: break;
00790:
00791: case 'L': {
00792: yyC = character(yyIndex);
00793: if (-1 != yyC) {
00794: yyIndex = yyIndex + 1;
00795: if ('L' == yyC) {
00796:
00797: yyValue = null;
00798:
00799: return new SemanticValue(yyValue,
00800: yyIndex, yyError);
00801: }
00802: }
00803: }
00804: break;
00805:
00806: default:
00807: /* No match. */
00808: }
00809: }
00810:
00811: // Nested alternative 2.
00812:
00813: yyC = character(yyChoice1);
00814: if (-1 != yyC) {
00815: yyIndex = yyChoice1 + 1;
00816:
00817: switch (yyC) {
00818: case 'L':
00819: case 'l': {
00820: yyValue = null;
00821:
00822: return new SemanticValue(yyValue, yyIndex,
00823: yyError);
00824: }
00825:
00826: default:
00827: /* No match. */
00828: }
00829: }
00830:
00831: // Nested alternative 3.
00832:
00833: yyValue = null;
00834:
00835: return new SemanticValue(yyValue, yyChoice1, yyError);
00836: }
00837:
00838: default:
00839: /* No match. */
00840: }
00841: }
00842:
00843: // Done.
00844: yyError = yyError.select("integer suffix expected", yyStart);
00845: return yyError;
00846: }
00847:
00848: // =========================================================================
00849:
00850: /**
00851: * Parse nonterminal xtc.lang.CConstant.LongLongSuffix.
00852: *
00853: * @param yyStart The index.
00854: * @return The result.
00855: * @throws IOException Signals an I/O error.
00856: */
00857: private Result pLongLongSuffix(final int yyStart)
00858: throws IOException {
00859: int yyC;
00860: int yyIndex;
00861: Void yyValue;
00862: ParseError yyError = ParseError.DUMMY;
00863:
00864: // Alternative 1.
00865:
00866: yyC = character(yyStart);
00867: if (-1 != yyC) {
00868: yyIndex = yyStart + 1;
00869:
00870: switch (yyC) {
00871: case 'l': {
00872: yyC = character(yyIndex);
00873: if (-1 != yyC) {
00874: yyIndex = yyIndex + 1;
00875: if ('l' == yyC) {
00876:
00877: yyValue = null;
00878:
00879: return new SemanticValue(yyValue, yyIndex,
00880: yyError);
00881: }
00882: }
00883: }
00884: break;
00885:
00886: case 'L': {
00887: yyC = character(yyIndex);
00888: if (-1 != yyC) {
00889: yyIndex = yyIndex + 1;
00890: if ('L' == yyC) {
00891:
00892: yyValue = null;
00893:
00894: return new SemanticValue(yyValue, yyIndex,
00895: yyError);
00896: }
00897: }
00898: }
00899: break;
00900:
00901: default:
00902: /* No match. */
00903: }
00904: }
00905:
00906: // Done.
00907: yyError = yyError.select("long long suffix expected", yyStart);
00908: return yyError;
00909: }
00910:
00911: // =========================================================================
00912:
00913: /**
00914: * Parse nonterminal xtc.lang.CConstant.FloatingConstant.
00915: *
00916: * @param yyStart The index.
00917: * @return The result.
00918: * @throws IOException Signals an I/O error.
00919: */
00920: private Result pFloatingConstant(final int yyStart)
00921: throws IOException {
00922: Result yyResult;
00923: Node yyValue;
00924: ParseError yyError = ParseError.DUMMY;
00925:
00926: // Alternative <Decimal>.
00927:
00928: yyResult = pDecimalFloatingConstant(yyStart);
00929: yyError = yyResult.select(yyError);
00930: if (yyResult.hasValue()) {
00931: final String v$g$1 = yyResult.semanticValue();
00932:
00933: yyValue = GNode.create("FloatingConstant", v$g$1);
00934: yyValue.setLocation(location(yyStart));
00935:
00936: return yyResult.createValue(yyValue, yyError);
00937: }
00938:
00939: // Alternative <Hex>.
00940:
00941: yyResult = pHexFloatingConstant(yyStart);
00942: yyError = yyResult.select(yyError);
00943: if (yyResult.hasValue()) {
00944: final String v$g$2 = yyResult.semanticValue();
00945:
00946: yyValue = GNode.create("FloatingConstant", v$g$2);
00947: yyValue.setLocation(location(yyStart));
00948:
00949: return yyResult.createValue(yyValue, yyError);
00950: }
00951:
00952: // Done.
00953: return yyError;
00954: }
00955:
00956: // =========================================================================
00957:
00958: /**
00959: * Parse nonterminal xtc.lang.CConstant.DecimalFloatingConstant.
00960: *
00961: * @param yyStart The index.
00962: * @return The result.
00963: * @throws IOException Signals an I/O error.
00964: */
00965: private Result pDecimalFloatingConstant(final int yyStart)
00966: throws IOException {
00967:
00968: int yyC;
00969: int yyIndex;
00970: Result yyResult;
00971: int yyRepetition1;
00972: boolean yyRepeated1;
00973: int yyOption1;
00974: String yyValue;
00975: ParseError yyError = ParseError.DUMMY;
00976:
00977: // Alternative 1.
00978:
00979: yyRepetition1 = yyStart;
00980: yyRepeated1 = false;
00981: while (true) {
00982:
00983: yyC = character(yyRepetition1);
00984: if (-1 != yyC) {
00985: yyIndex = yyRepetition1 + 1;
00986:
00987: switch (yyC) {
00988: case '0':
00989: case '1':
00990: case '2':
00991: case '3':
00992: case '4':
00993: case '5':
00994: case '6':
00995: case '7':
00996: case '8':
00997: case '9': {
00998: yyRepetition1 = yyIndex;
00999: yyRepeated1 = true;
01000: continue;
01001: }
01002:
01003: default:
01004: /* No match. */
01005: }
01006: }
01007: break;
01008: }
01009:
01010: if (yyRepeated1) {
01011:
01012: yyC = character(yyRepetition1);
01013: if ('.' == yyC) {
01014: yyIndex = yyRepetition1 + 1;
01015:
01016: yyRepetition1 = yyIndex;
01017: while (true) {
01018:
01019: yyC = character(yyRepetition1);
01020: if (-1 != yyC) {
01021: yyIndex = yyRepetition1 + 1;
01022:
01023: switch (yyC) {
01024: case '0':
01025: case '1':
01026: case '2':
01027: case '3':
01028: case '4':
01029: case '5':
01030: case '6':
01031: case '7':
01032: case '8':
01033: case '9': {
01034: yyRepetition1 = yyIndex;
01035: continue;
01036: }
01037:
01038: default:
01039: /* No match. */
01040: }
01041: }
01042: break;
01043: }
01044:
01045: yyOption1 = yyRepetition1;
01046:
01047: yyResult = pCConstant$Exponent(yyOption1);
01048: yyError = yyResult.select(yyError);
01049: if (yyResult.hasValue()) {
01050:
01051: yyOption1 = yyResult.index;
01052: }
01053:
01054: yyC = character(yyOption1);
01055: if (-1 != yyC) {
01056: yyIndex = yyOption1 + 1;
01057:
01058: switch (yyC) {
01059: case 'F':
01060: case 'L':
01061: case 'f':
01062: case 'l': {
01063: yyOption1 = yyIndex;
01064: }
01065:
01066: default:
01067: /* No match. */
01068: }
01069: }
01070:
01071: yyValue = difference(yyStart, yyOption1);
01072:
01073: return new SemanticValue(yyValue, yyOption1, yyError);
01074: }
01075: }
01076:
01077: // Alternative 2.
01078:
01079: yyC = character(yyStart);
01080: if ('.' == yyC) {
01081: yyIndex = yyStart + 1;
01082:
01083: yyRepetition1 = yyIndex;
01084: yyRepeated1 = false;
01085: while (true) {
01086:
01087: yyC = character(yyRepetition1);
01088: if (-1 != yyC) {
01089: yyIndex = yyRepetition1 + 1;
01090:
01091: switch (yyC) {
01092: case '0':
01093: case '1':
01094: case '2':
01095: case '3':
01096: case '4':
01097: case '5':
01098: case '6':
01099: case '7':
01100: case '8':
01101: case '9': {
01102: yyRepetition1 = yyIndex;
01103: yyRepeated1 = true;
01104: continue;
01105: }
01106:
01107: default:
01108: /* No match. */
01109: }
01110: }
01111: break;
01112: }
01113:
01114: if (yyRepeated1) {
01115:
01116: yyOption1 = yyRepetition1;
01117:
01118: yyResult = pCConstant$Exponent(yyOption1);
01119: yyError = yyResult.select(yyError);
01120: if (yyResult.hasValue()) {
01121:
01122: yyOption1 = yyResult.index;
01123: }
01124:
01125: yyC = character(yyOption1);
01126: if (-1 != yyC) {
01127: yyIndex = yyOption1 + 1;
01128:
01129: switch (yyC) {
01130: case 'F':
01131: case 'L':
01132: case 'f':
01133: case 'l': {
01134: yyOption1 = yyIndex;
01135: }
01136:
01137: default:
01138: /* No match. */
01139: }
01140: }
01141:
01142: yyValue = difference(yyStart, yyOption1);
01143:
01144: return new SemanticValue(yyValue, yyOption1, yyError);
01145: }
01146: }
01147:
01148: // Alternative 3.
01149:
01150: yyRepetition1 = yyStart;
01151: yyRepeated1 = false;
01152: while (true) {
01153:
01154: yyC = character(yyRepetition1);
01155: if (-1 != yyC) {
01156: yyIndex = yyRepetition1 + 1;
01157:
01158: switch (yyC) {
01159: case '0':
01160: case '1':
01161: case '2':
01162: case '3':
01163: case '4':
01164: case '5':
01165: case '6':
01166: case '7':
01167: case '8':
01168: case '9': {
01169: yyRepetition1 = yyIndex;
01170: yyRepeated1 = true;
01171: continue;
01172: }
01173:
01174: default:
01175: /* No match. */
01176: }
01177: }
01178: break;
01179: }
01180:
01181: if (yyRepeated1) {
01182:
01183: yyResult = pCConstant$Exponent(yyRepetition1);
01184: yyError = yyResult.select(yyError);
01185: if (yyResult.hasValue()) {
01186:
01187: yyOption1 = yyResult.index;
01188:
01189: yyC = character(yyOption1);
01190: if (-1 != yyC) {
01191: yyIndex = yyOption1 + 1;
01192:
01193: switch (yyC) {
01194: case 'F':
01195: case 'L':
01196: case 'f':
01197: case 'l': {
01198: yyOption1 = yyIndex;
01199: }
01200:
01201: default:
01202: /* No match. */
01203: }
01204: }
01205:
01206: yyValue = difference(yyStart, yyOption1);
01207:
01208: return new SemanticValue(yyValue, yyOption1, yyError);
01209: }
01210: }
01211:
01212: // Done.
01213: yyError = yyError.select("decimal floating constant expected",
01214: yyStart);
01215: return yyError;
01216: }
01217:
01218: // =========================================================================
01219:
01220: /**
01221: * Parse nonterminal xtc.lang.CConstant.HexFloatingConstant.
01222: *
01223: * @param yyStart The index.
01224: * @return The result.
01225: * @throws IOException Signals an I/O error.
01226: */
01227: private Result pHexFloatingConstant(final int yyStart)
01228: throws IOException {
01229: int yyC;
01230: int yyIndex;
01231: Result yyResult;
01232: int yyRepetition1;
01233: boolean yyRepeated1;
01234: int yyOption1;
01235: String yyValue;
01236: ParseError yyError = ParseError.DUMMY;
01237:
01238: // Alternative 1.
01239:
01240: yyResult = pHexPrefix(yyStart);
01241: yyError = yyResult.select(yyError);
01242: if (yyResult.hasValue()) {
01243:
01244: final int yyChoice1 = yyResult.index;
01245:
01246: // Nested alternative 1.
01247:
01248: yyRepetition1 = yyChoice1;
01249: yyRepeated1 = false;
01250: while (true) {
01251:
01252: yyC = character(yyRepetition1);
01253: if (-1 != yyC) {
01254: yyIndex = yyRepetition1 + 1;
01255:
01256: switch (yyC) {
01257: case '0':
01258: case '1':
01259: case '2':
01260: case '3':
01261: case '4':
01262: case '5':
01263: case '6':
01264: case '7':
01265: case '8':
01266: case '9':
01267: case 'A':
01268: case 'B':
01269: case 'C':
01270: case 'D':
01271: case 'E':
01272: case 'F':
01273: case 'a':
01274: case 'b':
01275: case 'c':
01276: case 'd':
01277: case 'e':
01278: case 'f': {
01279: yyRepetition1 = yyIndex;
01280: yyRepeated1 = true;
01281: continue;
01282: }
01283:
01284: default:
01285: /* No match. */
01286: }
01287: }
01288: break;
01289: }
01290:
01291: if (yyRepeated1) {
01292:
01293: yyC = character(yyRepetition1);
01294: if ('.' == yyC) {
01295: yyIndex = yyRepetition1 + 1;
01296:
01297: yyRepetition1 = yyIndex;
01298: while (true) {
01299:
01300: yyC = character(yyRepetition1);
01301: if (-1 != yyC) {
01302: yyIndex = yyRepetition1 + 1;
01303:
01304: switch (yyC) {
01305: case '0':
01306: case '1':
01307: case '2':
01308: case '3':
01309: case '4':
01310: case '5':
01311: case '6':
01312: case '7':
01313: case '8':
01314: case '9':
01315: case 'A':
01316: case 'B':
01317: case 'C':
01318: case 'D':
01319: case 'E':
01320: case 'F':
01321: case 'a':
01322: case 'b':
01323: case 'c':
01324: case 'd':
01325: case 'e':
01326: case 'f': {
01327: yyRepetition1 = yyIndex;
01328: continue;
01329: }
01330:
01331: default:
01332: /* No match. */
01333: }
01334: }
01335: break;
01336: }
01337:
01338: yyResult = pBinaryExponent(yyRepetition1);
01339: yyError = yyResult.select(yyError);
01340: if (yyResult.hasValue()) {
01341:
01342: yyOption1 = yyResult.index;
01343:
01344: yyC = character(yyOption1);
01345: if (-1 != yyC) {
01346: yyIndex = yyOption1 + 1;
01347:
01348: switch (yyC) {
01349: case 'F':
01350: case 'L':
01351: case 'f':
01352: case 'l': {
01353: yyOption1 = yyIndex;
01354: }
01355:
01356: default:
01357: /* No match. */
01358: }
01359: }
01360:
01361: yyValue = difference(yyStart, yyOption1);
01362:
01363: return new SemanticValue(yyValue, yyOption1,
01364: yyError);
01365: }
01366: }
01367: }
01368:
01369: // Nested alternative 2.
01370:
01371: yyC = character(yyChoice1);
01372: if ('.' == yyC) {
01373: yyIndex = yyChoice1 + 1;
01374:
01375: yyRepetition1 = yyIndex;
01376: yyRepeated1 = false;
01377: while (true) {
01378:
01379: yyC = character(yyRepetition1);
01380: if (-1 != yyC) {
01381: yyIndex = yyRepetition1 + 1;
01382:
01383: switch (yyC) {
01384: case '0':
01385: case '1':
01386: case '2':
01387: case '3':
01388: case '4':
01389: case '5':
01390: case '6':
01391: case '7':
01392: case '8':
01393: case '9':
01394: case 'A':
01395: case 'B':
01396: case 'C':
01397: case 'D':
01398: case 'E':
01399: case 'F':
01400: case 'a':
01401: case 'b':
01402: case 'c':
01403: case 'd':
01404: case 'e':
01405: case 'f': {
01406: yyRepetition1 = yyIndex;
01407: yyRepeated1 = true;
01408: continue;
01409: }
01410:
01411: default:
01412: /* No match. */
01413: }
01414: }
01415: break;
01416: }
01417:
01418: if (yyRepeated1) {
01419:
01420: yyResult = pBinaryExponent(yyRepetition1);
01421: yyError = yyResult.select(yyError);
01422: if (yyResult.hasValue()) {
01423:
01424: yyOption1 = yyResult.index;
01425:
01426: yyC = character(yyOption1);
01427: if (-1 != yyC) {
01428: yyIndex = yyOption1 + 1;
01429:
01430: switch (yyC) {
01431: case 'F':
01432: case 'L':
01433: case 'f':
01434: case 'l': {
01435: yyOption1 = yyIndex;
01436: }
01437:
01438: default:
01439: /* No match. */
01440: }
01441: }
01442:
01443: yyValue = difference(yyStart, yyOption1);
01444:
01445: return new SemanticValue(yyValue, yyOption1,
01446: yyError);
01447: }
01448: }
01449: }
01450:
01451: // Nested alternative 3.
01452:
01453: yyRepetition1 = yyChoice1;
01454: yyRepeated1 = false;
01455: while (true) {
01456:
01457: yyC = character(yyRepetition1);
01458: if (-1 != yyC) {
01459: yyIndex = yyRepetition1 + 1;
01460:
01461: switch (yyC) {
01462: case '0':
01463: case '1':
01464: case '2':
01465: case '3':
01466: case '4':
01467: case '5':
01468: case '6':
01469: case '7':
01470: case '8':
01471: case '9':
01472: case 'A':
01473: case 'B':
01474: case 'C':
01475: case 'D':
01476: case 'E':
01477: case 'F':
01478: case 'a':
01479: case 'b':
01480: case 'c':
01481: case 'd':
01482: case 'e':
01483: case 'f': {
01484: yyRepetition1 = yyIndex;
01485: yyRepeated1 = true;
01486: continue;
01487: }
01488:
01489: default:
01490: /* No match. */
01491: }
01492: }
01493: break;
01494: }
01495:
01496: if (yyRepeated1) {
01497:
01498: yyResult = pBinaryExponent(yyRepetition1);
01499: yyError = yyResult.select(yyError);
01500: if (yyResult.hasValue()) {
01501:
01502: yyOption1 = yyResult.index;
01503:
01504: yyC = character(yyOption1);
01505: if (-1 != yyC) {
01506: yyIndex = yyOption1 + 1;
01507:
01508: switch (yyC) {
01509: case 'F':
01510: case 'L':
01511: case 'f':
01512: case 'l': {
01513: yyOption1 = yyIndex;
01514: }
01515:
01516: default:
01517: /* No match. */
01518: }
01519: }
01520:
01521: yyValue = difference(yyStart, yyOption1);
01522:
01523: return new SemanticValue(yyValue, yyOption1,
01524: yyError);
01525: }
01526: }
01527: }
01528:
01529: // Done.
01530: yyError = yyError.select("hex floating constant expected",
01531: yyStart);
01532: return yyError;
01533: }
01534:
01535: // =========================================================================
01536:
01537: /**
01538: * Parse nonterminal xtc.lang.CConstant.Exponent.
01539: *
01540: * @param yyStart The index.
01541: * @return The result.
01542: * @throws IOException Signals an I/O error.
01543: */
01544: private Result pCConstant$Exponent(final int yyStart)
01545: throws IOException {
01546: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
01547: if (null == yyColumn.chunk1)
01548: yyColumn.chunk1 = new Chunk1();
01549: if (null == yyColumn.chunk1.fCConstant$Exponent)
01550: yyColumn.chunk1.fCConstant$Exponent = pCConstant$Exponent$1(yyStart);
01551: return yyColumn.chunk1.fCConstant$Exponent;
01552: }
01553:
01554: /** Actually parse xtc.lang.CConstant.Exponent. */
01555: private Result pCConstant$Exponent$1(final int yyStart)
01556: throws IOException {
01557: int yyC;
01558: int yyIndex;
01559: Result yyResult;
01560: int yyOption1;
01561: Void yyValue;
01562: ParseError yyError = ParseError.DUMMY;
01563:
01564: // Alternative 1.
01565:
01566: yyC = character(yyStart);
01567: if (-1 != yyC) {
01568: yyIndex = yyStart + 1;
01569:
01570: switch (yyC) {
01571: case 'E':
01572: case 'e': {
01573: yyOption1 = yyIndex;
01574:
01575: yyC = character(yyOption1);
01576: if (-1 != yyC) {
01577: yyIndex = yyOption1 + 1;
01578:
01579: switch (yyC) {
01580: case '+':
01581: case '-': {
01582: yyOption1 = yyIndex;
01583: }
01584:
01585: default:
01586: /* No match. */
01587: }
01588: }
01589:
01590: yyResult = p$$Shared10(yyOption1);
01591: yyError = yyResult.select(yyError);
01592: if (yyResult.hasValue()) {
01593:
01594: yyValue = null;
01595:
01596: return yyResult.createValue(yyValue, yyError);
01597: }
01598: }
01599: break;
01600:
01601: default:
01602: /* No match. */
01603: }
01604: }
01605:
01606: // Done.
01607: yyError = yyError.select("exponent expected", yyStart);
01608: return yyError;
01609: }
01610:
01611: // =========================================================================
01612:
01613: /**
01614: * Parse synthetic nonterminal xtc.lang.jeannie.Jeannie.$$Shared10.
01615: * This nonterminal represents the duplicate productions
01616: * CConstant.Exponent$$Plus1
01617: * and xtc.lang.jeannie.Jeannie.BinaryExponent$$Plus1.
01618: *
01619: * @param yyStart The index.
01620: * @return The result.
01621: * @throws IOException Signals an I/O error.
01622: */
01623: private Result p$$Shared10(final int yyStart) throws IOException {
01624: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
01625: if (null == yyColumn.chunk1)
01626: yyColumn.chunk1 = new Chunk1();
01627: if (null == yyColumn.chunk1.f$$Shared10)
01628: yyColumn.chunk1.f$$Shared10 = p$$Shared10$1(yyStart);
01629: return yyColumn.chunk1.f$$Shared10;
01630: }
01631:
01632: /** Actually parse xtc.lang.jeannie.Jeannie.$$Shared10. */
01633: private Result p$$Shared10$1(final int yyStart) throws IOException {
01634: int yyC;
01635: int yyIndex;
01636: Result yyResult;
01637: Void yyValue;
01638: ParseError yyError = ParseError.DUMMY;
01639:
01640: // Alternative 1.
01641:
01642: yyC = character(yyStart);
01643: if (-1 != yyC) {
01644: yyIndex = yyStart + 1;
01645:
01646: switch (yyC) {
01647: case '0':
01648: case '1':
01649: case '2':
01650: case '3':
01651: case '4':
01652: case '5':
01653: case '6':
01654: case '7':
01655: case '8':
01656: case '9': {
01657: final int yyChoice1 = yyIndex;
01658:
01659: // Nested alternative 1.
01660:
01661: yyResult = p$$Shared10(yyChoice1);
01662: yyError = yyResult.select(yyError);
01663: if (yyResult.hasValue()) {
01664:
01665: yyValue = null;
01666:
01667: return yyResult.createValue(yyValue, yyError);
01668: }
01669:
01670: // Nested alternative 2.
01671:
01672: yyValue = null;
01673:
01674: return new SemanticValue(yyValue, yyChoice1, yyError);
01675: }
01676:
01677: default:
01678: /* No match. */
01679: }
01680: }
01681:
01682: // Done.
01683: yyError = yyError.select(" expected", yyStart);
01684: return yyError;
01685: }
01686:
01687: // =========================================================================
01688:
01689: /**
01690: * Parse nonterminal xtc.lang.CConstant.BinaryExponent.
01691: *
01692: * @param yyStart The index.
01693: * @return The result.
01694: * @throws IOException Signals an I/O error.
01695: */
01696: private Result pBinaryExponent(final int yyStart)
01697: throws IOException {
01698: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
01699: if (null == yyColumn.chunk1)
01700: yyColumn.chunk1 = new Chunk1();
01701: if (null == yyColumn.chunk1.fBinaryExponent)
01702: yyColumn.chunk1.fBinaryExponent = pBinaryExponent$1(yyStart);
01703: return yyColumn.chunk1.fBinaryExponent;
01704: }
01705:
01706: /** Actually parse xtc.lang.CConstant.BinaryExponent. */
01707: private Result pBinaryExponent$1(final int yyStart)
01708: throws IOException {
01709: int yyC;
01710: int yyIndex;
01711: Result yyResult;
01712: int yyOption1;
01713: Void yyValue;
01714: ParseError yyError = ParseError.DUMMY;
01715:
01716: // Alternative 1.
01717:
01718: yyC = character(yyStart);
01719: if (-1 != yyC) {
01720: yyIndex = yyStart + 1;
01721:
01722: switch (yyC) {
01723: case 'P':
01724: case 'p': {
01725: yyOption1 = yyIndex;
01726:
01727: yyC = character(yyOption1);
01728: if (-1 != yyC) {
01729: yyIndex = yyOption1 + 1;
01730:
01731: switch (yyC) {
01732: case '+':
01733: case '-': {
01734: yyOption1 = yyIndex;
01735: }
01736:
01737: default:
01738: /* No match. */
01739: }
01740: }
01741:
01742: yyResult = p$$Shared10(yyOption1);
01743: yyError = yyResult.select(yyError);
01744: if (yyResult.hasValue()) {
01745:
01746: yyValue = null;
01747:
01748: return yyResult.createValue(yyValue, yyError);
01749: }
01750: }
01751: break;
01752:
01753: default:
01754: /* No match. */
01755: }
01756: }
01757:
01758: // Done.
01759: yyError = yyError.select("binary exponent expected", yyStart);
01760: return yyError;
01761: }
01762:
01763: // =========================================================================
01764:
01765: /**
01766: * Parse nonterminal xtc.lang.CConstant.CharacterConstant.
01767: *
01768: * @param yyStart The index.
01769: * @return The result.
01770: * @throws IOException Signals an I/O error.
01771: */
01772: private Result pCConstant$CharacterConstant(final int yyStart)
01773: throws IOException {
01774:
01775: Result yyResult;
01776: Node yyValue;
01777: ParseError yyError = ParseError.DUMMY;
01778:
01779: // Alternative 1.
01780:
01781: yyResult = pWideCharacterLiteral(yyStart);
01782: yyError = yyResult.select(yyError);
01783: if (yyResult.hasValue()) {
01784: final String v$g$1 = yyResult.semanticValue();
01785:
01786: yyResult = pSpacing(yyResult.index);
01787: yyError = yyResult.select(yyError);
01788: if (yyResult.hasValue()) {
01789:
01790: yyValue = GNode.create("CharacterConstant", v$g$1);
01791: yyValue.setLocation(location(yyStart));
01792:
01793: return yyResult.createValue(yyValue, yyError);
01794: }
01795: }
01796:
01797: // Alternative 2.
01798:
01799: yyResult = pCConstant$CharacterLiteral(yyStart);
01800: yyError = yyResult.select(yyError);
01801: if (yyResult.hasValue()) {
01802: final String v$g$2 = yyResult.semanticValue();
01803:
01804: yyResult = pSpacing(yyResult.index);
01805: yyError = yyResult.select(yyError);
01806: if (yyResult.hasValue()) {
01807:
01808: yyValue = GNode.create("CharacterConstant", v$g$2);
01809: yyValue.setLocation(location(yyStart));
01810:
01811: return yyResult.createValue(yyValue, yyError);
01812: }
01813: }
01814:
01815: // Done.
01816: return yyError;
01817: }
01818:
01819: // =========================================================================
01820:
01821: /**
01822: * Parse nonterminal xtc.lang.CConstant.WideCharacterLiteral.
01823: *
01824: * @param yyStart The index.
01825: * @return The result.
01826: * @throws IOException Signals an I/O error.
01827: */
01828: private Result pWideCharacterLiteral(final int yyStart)
01829: throws IOException {
01830: int yyC;
01831: int yyIndex;
01832: Result yyResult;
01833: String yyValue;
01834: ParseError yyError = ParseError.DUMMY;
01835:
01836: // Alternative 1.
01837:
01838: yyC = character(yyStart);
01839: if ('L' == yyC) {
01840: yyIndex = yyStart + 1;
01841:
01842: yyResult = pCConstant$CharacterLiteral(yyIndex);
01843: yyError = yyResult.select(yyError);
01844: if (yyResult.hasValue()) {
01845:
01846: yyValue = difference(yyStart, yyResult.index);
01847:
01848: return yyResult.createValue(yyValue, yyError);
01849: }
01850: }
01851:
01852: // Done.
01853: yyError = yyError.select("wide character literal expected",
01854: yyStart);
01855: return yyError;
01856: }
01857:
01858: // =========================================================================
01859:
01860: /**
01861: * Parse nonterminal xtc.lang.CConstant.CharacterLiteral.
01862: *
01863: * @param yyStart The index.
01864: * @return The result.
01865: * @throws IOException Signals an I/O error.
01866: */
01867: private Result pCConstant$CharacterLiteral(final int yyStart)
01868: throws IOException {
01869:
01870: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
01871: if (null == yyColumn.chunk1)
01872: yyColumn.chunk1 = new Chunk1();
01873: if (null == yyColumn.chunk1.fCConstant$CharacterLiteral)
01874: yyColumn.chunk1.fCConstant$CharacterLiteral = pCConstant$CharacterLiteral$1(yyStart);
01875: return yyColumn.chunk1.fCConstant$CharacterLiteral;
01876: }
01877:
01878: /** Actually parse xtc.lang.CConstant.CharacterLiteral. */
01879: private Result pCConstant$CharacterLiteral$1(final int yyStart)
01880: throws IOException {
01881:
01882: int yyC;
01883: int yyIndex;
01884: Result yyResult;
01885: String yyValue;
01886: ParseError yyError = ParseError.DUMMY;
01887:
01888: // Alternative 1.
01889:
01890: yyC = character(yyStart);
01891: if ('\'' == yyC) {
01892: yyIndex = yyStart + 1;
01893:
01894: yyResult = pCConstant$CharacterLiteral$$Plus1(yyIndex);
01895: yyError = yyResult.select(yyError);
01896: if (yyResult.hasValue()) {
01897:
01898: yyC = character(yyResult.index);
01899: if ('\'' == yyC) {
01900: yyIndex = yyResult.index + 1;
01901:
01902: yyValue = difference(yyStart, yyIndex);
01903:
01904: return new SemanticValue(yyValue, yyIndex, yyError);
01905: }
01906: }
01907: }
01908:
01909: // Done.
01910: yyError = yyError.select("character literal expected", yyStart);
01911: return yyError;
01912: }
01913:
01914: // =========================================================================
01915:
01916: /**
01917: * Parse synthetic nonterminal CConstant.CharacterLiteral$$Plus1.
01918: *
01919: * @param yyStart The index.
01920: * @return The result.
01921: * @throws IOException Signals an I/O error.
01922: */
01923: private Result pCConstant$CharacterLiteral$$Plus1(final int yyStart)
01924: throws IOException {
01925:
01926: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
01927: if (null == yyColumn.chunk1)
01928: yyColumn.chunk1 = new Chunk1();
01929: if (null == yyColumn.chunk1.fCConstant$CharacterLiteral$$Plus1)
01930: yyColumn.chunk1.fCConstant$CharacterLiteral$$Plus1 = pCConstant$CharacterLiteral$$Plus1$1(yyStart);
01931: return yyColumn.chunk1.fCConstant$CharacterLiteral$$Plus1;
01932: }
01933:
01934: /** Actually parse CConstant.CharacterLiteral$$Plus1. */
01935: private Result pCConstant$CharacterLiteral$$Plus1$1(
01936: final int yyStart) throws IOException {
01937:
01938: int yyC;
01939: int yyIndex;
01940: Result yyResult;
01941: Void yyValue;
01942: ParseError yyError = ParseError.DUMMY;
01943:
01944: // Alternative 1.
01945:
01946: yyResult = pEscapeCharacter(yyStart);
01947: yyError = yyResult.select(yyError);
01948: if (yyResult.hasValue()) {
01949:
01950: yyResult = pCConstant$CharacterLiteral$$Plus1(yyResult.index);
01951: yyError = yyResult.select(yyError);
01952: if (yyResult.hasValue()) {
01953:
01954: yyValue = null;
01955:
01956: return yyResult.createValue(yyValue, yyError);
01957: }
01958: }
01959:
01960: // Alternative 2.
01961:
01962: yyC = character(yyStart);
01963: if (-1 != yyC) {
01964: yyIndex = yyStart + 1;
01965:
01966: switch (yyC) {
01967: case '\n':
01968: case '\r':
01969: case '\'':
01970: case '\\':
01971: /* No match. */
01972: break;
01973:
01974: default: {
01975: yyResult = pCConstant$CharacterLiteral$$Plus1(yyIndex);
01976: yyError = yyResult.select(yyError);
01977: if (yyResult.hasValue()) {
01978:
01979: yyValue = null;
01980:
01981: return yyResult.createValue(yyValue, yyError);
01982: }
01983: }
01984: }
01985: }
01986:
01987: // Alternative 3.
01988:
01989: yyC = character(yyStart);
01990: if (-1 != yyC) {
01991: yyIndex = yyStart + 1;
01992:
01993: switch (yyC) {
01994: case '\\': {
01995: final int yyChoice1 = yyIndex;
01996:
01997: // Nested alternative 1.
01998:
01999: yyResult = pEscapeCode(yyChoice1);
02000: yyError = yyResult.select(yyError);
02001: if (yyResult.hasValue()) {
02002:
02003: yyValue = null;
02004:
02005: return yyResult.createValue(yyValue, yyError);
02006: }
02007:
02008: // Nested alternative 2.
02009:
02010: yyC = character(yyChoice1);
02011: if (-1 != yyC) {
02012: yyIndex = yyChoice1 + 1;
02013:
02014: switch (yyC) {
02015: case 'u': {
02016: yyResult = pHexQuad(yyIndex);
02017: yyError = yyResult.select(yyError);
02018: if (yyResult.hasValue()) {
02019:
02020: yyValue = null;
02021:
02022: return yyResult.createValue(yyValue,
02023: yyError);
02024: }
02025: }
02026: break;
02027:
02028: case 'U': {
02029: yyResult = pHexQuad(yyIndex);
02030: yyError = yyResult.select(yyError);
02031: if (yyResult.hasValue()) {
02032:
02033: yyResult = pHexQuad(yyResult.index);
02034: yyError = yyResult.select(yyError);
02035: if (yyResult.hasValue()) {
02036:
02037: yyValue = null;
02038:
02039: return yyResult.createValue(yyValue,
02040: yyError);
02041: }
02042: }
02043: }
02044: break;
02045:
02046: default:
02047: /* No match. */
02048: }
02049: }
02050: }
02051: break;
02052:
02053: default:
02054: /* No match. */
02055: }
02056: }
02057:
02058: // Alternative 4.
02059:
02060: yyC = character(yyStart);
02061: if (-1 != yyC) {
02062: yyIndex = yyStart + 1;
02063:
02064: switch (yyC) {
02065: case '\n':
02066: case '\r':
02067: case '\'':
02068: case '\\':
02069: /* No match. */
02070: break;
02071:
02072: default: {
02073: yyValue = null;
02074:
02075: return new SemanticValue(yyValue, yyIndex, yyError);
02076: }
02077: }
02078: }
02079:
02080: // Done.
02081: yyError = yyError.select("character literal expected", yyStart);
02082: return yyError;
02083: }
02084:
02085: // =========================================================================
02086:
02087: /**
02088: * Parse nonterminal xtc.lang.CConstant.StringConstant.
02089: *
02090: * @param yyStart The index.
02091: * @return The result.
02092: * @throws IOException Signals an I/O error.
02093: */
02094: private Result pCConstant$StringConstant(final int yyStart)
02095: throws IOException {
02096:
02097: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
02098: if (null == yyColumn.chunk1)
02099: yyColumn.chunk1 = new Chunk1();
02100: if (null == yyColumn.chunk1.fCConstant$StringConstant)
02101: yyColumn.chunk1.fCConstant$StringConstant = pCConstant$StringConstant$1(yyStart);
02102: return yyColumn.chunk1.fCConstant$StringConstant;
02103: }
02104:
02105: /** Actually parse xtc.lang.CConstant.StringConstant. */
02106: private Result pCConstant$StringConstant$1(final int yyStart)
02107: throws IOException {
02108:
02109: Result yyResult;
02110: Node yyValue;
02111: ParseError yyError = ParseError.DUMMY;
02112:
02113: // Alternative 1.
02114:
02115: yyResult = pCConstant$StringConstant$$Plus1(yyStart);
02116: yyError = yyResult.select(yyError);
02117: if (yyResult.hasValue()) {
02118: final Pair<String> v$g$1 = yyResult.semanticValue();
02119:
02120: yyValue = GNode.createFromPair("StringConstant", v$g$1);
02121: yyValue.setLocation(location(yyStart));
02122:
02123: return yyResult.createValue(yyValue, yyError);
02124: }
02125:
02126: // Done.
02127: return yyError;
02128: }
02129:
02130: // =========================================================================
02131:
02132: /**
02133: * Parse synthetic nonterminal CConstant.StringConstant$$Choice1.
02134: *
02135: * @param yyStart The index.
02136: * @return The result.
02137: * @throws IOException Signals an I/O error.
02138: */
02139: private Result pCConstant$StringConstant$$Choice1(final int yyStart)
02140: throws IOException {
02141:
02142: Result yyResult;
02143: String yyValue;
02144: ParseError yyError = ParseError.DUMMY;
02145:
02146: // Alternative 1.
02147:
02148: yyResult = pWideStringLiteral(yyStart);
02149: yyError = yyResult.select(yyError);
02150: if (yyResult.hasValue()) {
02151: yyValue = yyResult.semanticValue();
02152:
02153: yyResult = pSpacing(yyResult.index);
02154: yyError = yyResult.select(yyError);
02155: if (yyResult.hasValue()) {
02156:
02157: return yyResult.createValue(yyValue, yyError);
02158: }
02159: }
02160:
02161: // Alternative 2.
02162:
02163: yyResult = pCConstant$StringLiteral(yyStart);
02164: yyError = yyResult.select(yyError);
02165: if (yyResult.hasValue()) {
02166: yyValue = yyResult.semanticValue();
02167:
02168: yyResult = pSpacing(yyResult.index);
02169: yyError = yyResult.select(yyError);
02170: if (yyResult.hasValue()) {
02171:
02172: return yyResult.createValue(yyValue, yyError);
02173: }
02174: }
02175:
02176: // Done.
02177: return yyError;
02178: }
02179:
02180: // =========================================================================
02181:
02182: /**
02183: * Parse synthetic nonterminal CConstant.StringConstant$$Plus1.
02184: *
02185: * @param yyStart The index.
02186: * @return The result.
02187: * @throws IOException Signals an I/O error.
02188: */
02189: private Result pCConstant$StringConstant$$Plus1(final int yyStart)
02190: throws IOException {
02191:
02192: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
02193: if (null == yyColumn.chunk1)
02194: yyColumn.chunk1 = new Chunk1();
02195: if (null == yyColumn.chunk1.fCConstant$StringConstant$$Plus1)
02196: yyColumn.chunk1.fCConstant$StringConstant$$Plus1 = pCConstant$StringConstant$$Plus1$1(yyStart);
02197: return yyColumn.chunk1.fCConstant$StringConstant$$Plus1;
02198: }
02199:
02200: /** Actually parse CConstant.StringConstant$$Plus1. */
02201: private Result pCConstant$StringConstant$$Plus1$1(final int yyStart)
02202: throws IOException {
02203:
02204: Result yyResult;
02205: Pair<String> yyValue;
02206: ParseError yyError = ParseError.DUMMY;
02207:
02208: // Alternative 1.
02209:
02210: yyResult = pCConstant$StringConstant$$Choice1(yyStart);
02211: yyError = yyResult.select(yyError);
02212: if (yyResult.hasValue()) {
02213: final String v$el$1 = yyResult.semanticValue();
02214:
02215: final int yyChoice1 = yyResult.index;
02216:
02217: // Nested alternative 1.
02218:
02219: yyResult = pCConstant$StringConstant$$Plus1(yyChoice1);
02220: yyError = yyResult.select(yyError);
02221: if (yyResult.hasValue()) {
02222: final Pair<String> v$4 = yyResult.semanticValue();
02223:
02224: yyValue = new Pair<String>(v$el$1, v$4);
02225:
02226: return yyResult.createValue(yyValue, yyError);
02227: }
02228:
02229: // Nested alternative 2.
02230:
02231: yyValue = new Pair<String>(v$el$1);
02232:
02233: return new SemanticValue(yyValue, yyChoice1, yyError);
02234: }
02235:
02236: // Done.
02237: return yyError;
02238: }
02239:
02240: // =========================================================================
02241:
02242: /**
02243: * Parse nonterminal xtc.lang.CConstant.WideStringLiteral.
02244: *
02245: * @param yyStart The index.
02246: * @return The result.
02247: * @throws IOException Signals an I/O error.
02248: */
02249: private Result pWideStringLiteral(final int yyStart)
02250: throws IOException {
02251: int yyC;
02252: int yyIndex;
02253: Result yyResult;
02254: String yyValue;
02255: ParseError yyError = ParseError.DUMMY;
02256:
02257: // Alternative 1.
02258:
02259: yyC = character(yyStart);
02260: if ('L' == yyC) {
02261: yyIndex = yyStart + 1;
02262:
02263: yyResult = pCConstant$StringLiteral(yyIndex);
02264: yyError = yyResult.select(yyError);
02265: if (yyResult.hasValue()) {
02266:
02267: yyValue = difference(yyStart, yyResult.index);
02268:
02269: return yyResult.createValue(yyValue, yyError);
02270: }
02271: }
02272:
02273: // Done.
02274: yyError = yyError.select("wide string literal expected",
02275: yyStart);
02276: return yyError;
02277: }
02278:
02279: // =========================================================================
02280:
02281: /**
02282: * Parse nonterminal xtc.lang.CConstant.StringLiteral.
02283: *
02284: * @param yyStart The index.
02285: * @return The result.
02286: * @throws IOException Signals an I/O error.
02287: */
02288: private Result pCConstant$StringLiteral(final int yyStart)
02289: throws IOException {
02290:
02291: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
02292: if (null == yyColumn.chunk1)
02293: yyColumn.chunk1 = new Chunk1();
02294: if (null == yyColumn.chunk1.fCConstant$StringLiteral)
02295: yyColumn.chunk1.fCConstant$StringLiteral = pCConstant$StringLiteral$1(yyStart);
02296: return yyColumn.chunk1.fCConstant$StringLiteral;
02297: }
02298:
02299: /** Actually parse xtc.lang.CConstant.StringLiteral. */
02300: private Result pCConstant$StringLiteral$1(final int yyStart)
02301: throws IOException {
02302:
02303: int yyC;
02304: int yyIndex;
02305: Result yyResult;
02306: String yyValue;
02307: ParseError yyError = ParseError.DUMMY;
02308:
02309: // Alternative 1.
02310:
02311: yyC = character(yyStart);
02312: if ('\"' == yyC) {
02313: yyIndex = yyStart + 1;
02314:
02315: yyResult = pCConstant$StringLiteral$$Star1(yyIndex);
02316: yyError = yyResult.select(yyError);
02317: if (yyResult.hasValue()) {
02318:
02319: yyC = character(yyResult.index);
02320: if ('\"' == yyC) {
02321: yyIndex = yyResult.index + 1;
02322:
02323: yyValue = difference(yyStart, yyIndex);
02324:
02325: return new SemanticValue(yyValue, yyIndex, yyError);
02326: }
02327: }
02328: }
02329:
02330: // Done.
02331: yyError = yyError.select("string literal expected", yyStart);
02332: return yyError;
02333: }
02334:
02335: // =========================================================================
02336:
02337: /**
02338: * Parse synthetic nonterminal CConstant.StringLiteral$$Star1.
02339: *
02340: * @param yyStart The index.
02341: * @return The result.
02342: * @throws IOException Signals an I/O error.
02343: */
02344: private Result pCConstant$StringLiteral$$Star1(final int yyStart)
02345: throws IOException {
02346:
02347: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
02348: if (null == yyColumn.chunk1)
02349: yyColumn.chunk1 = new Chunk1();
02350: if (null == yyColumn.chunk1.fCConstant$StringLiteral$$Star1)
02351: yyColumn.chunk1.fCConstant$StringLiteral$$Star1 = pCConstant$StringLiteral$$Star1$1(yyStart);
02352: return yyColumn.chunk1.fCConstant$StringLiteral$$Star1;
02353: }
02354:
02355: /** Actually parse CConstant.StringLiteral$$Star1. */
02356: private Result pCConstant$StringLiteral$$Star1$1(final int yyStart)
02357: throws IOException {
02358:
02359: int yyC;
02360: int yyIndex;
02361: Result yyResult;
02362: Void yyValue;
02363: ParseError yyError = ParseError.DUMMY;
02364:
02365: // Alternative 1.
02366:
02367: yyResult = pEscapeCharacter(yyStart);
02368: yyError = yyResult.select(yyError);
02369: if (yyResult.hasValue()) {
02370:
02371: yyResult = pCConstant$StringLiteral$$Star1(yyResult.index);
02372: yyError = yyResult.select(yyError);
02373: if (yyResult.hasValue()) {
02374:
02375: yyValue = null;
02376:
02377: return yyResult.createValue(yyValue, yyError);
02378: }
02379: }
02380:
02381: // Alternative 2.
02382:
02383: yyC = character(yyStart);
02384: if (-1 != yyC) {
02385: yyIndex = yyStart + 1;
02386:
02387: switch (yyC) {
02388: case '\n':
02389: case '\r':
02390: case '\"':
02391: case '\\':
02392: /* No match. */
02393: break;
02394:
02395: default: {
02396: yyResult = pCConstant$StringLiteral$$Star1(yyIndex);
02397: yyError = yyResult.select(yyError);
02398: if (yyResult.hasValue()) {
02399:
02400: yyValue = null;
02401:
02402: return yyResult.createValue(yyValue, yyError);
02403: }
02404: }
02405: }
02406: }
02407:
02408: // Alternative 3.
02409:
02410: yyValue = null;
02411:
02412: return new SemanticValue(yyValue, yyStart, yyError);
02413: }
02414:
02415: // =========================================================================
02416:
02417: /**
02418: * Parse nonterminal xtc.lang.CConstant.EscapeCharacter.
02419: *
02420: * @param yyStart The index.
02421: * @return The result.
02422: * @throws IOException Signals an I/O error.
02423: */
02424: private Result pEscapeCharacter(final int yyStart)
02425: throws IOException {
02426: int yyC;
02427: int yyIndex;
02428: Result yyResult;
02429: Void yyValue;
02430: ParseError yyError = ParseError.DUMMY;
02431:
02432: // Alternative 1.
02433:
02434: yyC = character(yyStart);
02435: if (-1 != yyC) {
02436: yyIndex = yyStart + 1;
02437: if ('\\' == yyC) {
02438:
02439: final int yyChoice1 = yyIndex;
02440:
02441: // Nested alternative 1.
02442:
02443: yyResult = pEscapeCode(yyChoice1);
02444: yyError = yyResult.select(yyError);
02445: if (yyResult.hasValue()) {
02446:
02447: yyValue = null;
02448:
02449: return yyResult.createValue(yyValue, yyError);
02450: }
02451:
02452: // Nested alternative 2.
02453:
02454: yyC = character(yyChoice1);
02455: if (-1 != yyC) {
02456: yyIndex = yyChoice1 + 1;
02457:
02458: switch (yyC) {
02459: case 'u': {
02460: yyResult = pHexQuad(yyIndex);
02461: yyError = yyResult.select(yyError);
02462: if (yyResult.hasValue()) {
02463:
02464: yyValue = null;
02465:
02466: return yyResult.createValue(yyValue,
02467: yyError);
02468: }
02469: }
02470: break;
02471:
02472: case 'U': {
02473: yyResult = pHexQuad(yyIndex);
02474: yyError = yyResult.select(yyError);
02475: if (yyResult.hasValue()) {
02476:
02477: yyResult = pHexQuad(yyResult.index);
02478: yyError = yyResult.select(yyError);
02479: if (yyResult.hasValue()) {
02480:
02481: yyValue = null;
02482:
02483: return yyResult.createValue(yyValue,
02484: yyError);
02485: }
02486: }
02487: }
02488: break;
02489:
02490: default:
02491: /* No match. */
02492: }
02493: }
02494: }
02495: }
02496:
02497: // Done.
02498: yyError = yyError.select("escape character expected", yyStart);
02499: return yyError;
02500: }
02501:
02502: // =========================================================================
02503:
02504: /**
02505: * Parse nonterminal xtc.lang.CConstant.EscapeCode.
02506: *
02507: * @param yyStart The index.
02508: * @return The result.
02509: * @throws IOException Signals an I/O error.
02510: */
02511: private Result pEscapeCode(final int yyStart) throws IOException {
02512: int yyC;
02513: int yyIndex;
02514: int yyRepetition1;
02515: boolean yyRepeated1;
02516: Void yyValue;
02517: ParseError yyError = ParseError.DUMMY;
02518:
02519: // Alternative 1.
02520:
02521: yyC = character(yyStart);
02522: if (-1 != yyC) {
02523: yyIndex = yyStart + 1;
02524:
02525: switch (yyC) {
02526: case '\"':
02527: case '\'':
02528: case '?':
02529: case '\\':
02530: case 'a':
02531: case 'b':
02532: case 'f':
02533: case 'n':
02534: case 'r':
02535: case 't':
02536: case 'v': {
02537: yyValue = null;
02538:
02539: return new SemanticValue(yyValue, yyIndex, yyError);
02540: }
02541:
02542: case '0':
02543: case '1':
02544: case '2':
02545: case '3':
02546: case '4':
02547: case '5':
02548: case '6':
02549: case '7': {
02550: final int yyChoice1 = yyIndex;
02551:
02552: // Nested alternative 1.
02553:
02554: yyC = character(yyChoice1);
02555: if (-1 != yyC) {
02556: yyIndex = yyChoice1 + 1;
02557:
02558: switch (yyC) {
02559: case '0':
02560: case '1':
02561: case '2':
02562: case '3':
02563: case '4':
02564: case '5':
02565: case '6':
02566: case '7': {
02567: final int yyChoice2 = yyIndex;
02568:
02569: // Nested alternative 1.
02570:
02571: yyC = character(yyChoice2);
02572: if (-1 != yyC) {
02573: yyIndex = yyChoice2 + 1;
02574:
02575: switch (yyC) {
02576: case '0':
02577: case '1':
02578: case '2':
02579: case '3':
02580: case '4':
02581: case '5':
02582: case '6':
02583: case '7': {
02584: yyValue = null;
02585:
02586: return new SemanticValue(yyValue,
02587: yyIndex, yyError);
02588: }
02589:
02590: default:
02591: /* No match. */
02592: }
02593: }
02594:
02595: // Nested alternative 2.
02596:
02597: yyValue = null;
02598:
02599: return new SemanticValue(yyValue, yyChoice2,
02600: yyError);
02601: }
02602:
02603: default:
02604: /* No match. */
02605: }
02606: }
02607:
02608: // Nested alternative 2.
02609:
02610: yyValue = null;
02611:
02612: return new SemanticValue(yyValue, yyChoice1, yyError);
02613: }
02614:
02615: case 'x': {
02616: yyRepetition1 = yyIndex;
02617: yyRepeated1 = false;
02618: while (true) {
02619:
02620: yyC = character(yyRepetition1);
02621: if (-1 != yyC) {
02622: yyIndex = yyRepetition1 + 1;
02623:
02624: switch (yyC) {
02625: case '0':
02626: case '1':
02627: case '2':
02628: case '3':
02629: case '4':
02630: case '5':
02631: case '6':
02632: case '7':
02633: case '8':
02634: case '9':
02635: case 'A':
02636: case 'B':
02637: case 'C':
02638: case 'D':
02639: case 'E':
02640: case 'F':
02641: case 'a':
02642: case 'b':
02643: case 'c':
02644: case 'd':
02645: case 'e':
02646: case 'f': {
02647: yyRepetition1 = yyIndex;
02648: yyRepeated1 = true;
02649: continue;
02650: }
02651:
02652: default:
02653: /* No match. */
02654: }
02655: }
02656: break;
02657: }
02658:
02659: if (yyRepeated1) {
02660:
02661: yyValue = null;
02662:
02663: return new SemanticValue(yyValue, yyRepetition1,
02664: yyError);
02665: }
02666: }
02667: break;
02668:
02669: default:
02670: /* No match. */
02671: }
02672: }
02673:
02674: // Done.
02675: yyError = yyError.select("escape code expected", yyStart);
02676: return yyError;
02677: }
02678:
02679: // =========================================================================
02680:
02681: /**
02682: * Parse nonterminal xtc.lang.CConstant.HexQuad.
02683: *
02684: * @param yyStart The index.
02685: * @return The result.
02686: * @throws IOException Signals an I/O error.
02687: */
02688: private Result pHexQuad(final int yyStart) throws IOException {
02689: int yyC;
02690: int yyIndex;
02691: Void yyValue;
02692: ParseError yyError = ParseError.DUMMY;
02693:
02694: // Alternative 1.
02695:
02696: yyC = character(yyStart);
02697: if (-1 != yyC) {
02698: yyIndex = yyStart + 1;
02699:
02700: switch (yyC) {
02701: case '0':
02702: case '1':
02703: case '2':
02704: case '3':
02705: case '4':
02706: case '5':
02707: case '6':
02708: case '7':
02709: case '8':
02710: case '9':
02711: case 'A':
02712: case 'B':
02713: case 'C':
02714: case 'D':
02715: case 'E':
02716: case 'F':
02717: case 'a':
02718: case 'b':
02719: case 'c':
02720: case 'd':
02721: case 'e':
02722: case 'f': {
02723: yyC = character(yyIndex);
02724: if (-1 != yyC) {
02725: yyIndex = yyIndex + 1;
02726:
02727: switch (yyC) {
02728: case '0':
02729: case '1':
02730: case '2':
02731: case '3':
02732: case '4':
02733: case '5':
02734: case '6':
02735: case '7':
02736: case '8':
02737: case '9':
02738: case 'A':
02739: case 'B':
02740: case 'C':
02741: case 'D':
02742: case 'E':
02743: case 'F':
02744: case 'a':
02745: case 'b':
02746: case 'c':
02747: case 'd':
02748: case 'e':
02749: case 'f': {
02750: yyC = character(yyIndex);
02751: if (-1 != yyC) {
02752: yyIndex = yyIndex + 1;
02753:
02754: switch (yyC) {
02755: case '0':
02756: case '1':
02757: case '2':
02758: case '3':
02759: case '4':
02760: case '5':
02761: case '6':
02762: case '7':
02763: case '8':
02764: case '9':
02765: case 'A':
02766: case 'B':
02767: case 'C':
02768: case 'D':
02769: case 'E':
02770: case 'F':
02771: case 'a':
02772: case 'b':
02773: case 'c':
02774: case 'd':
02775: case 'e':
02776: case 'f': {
02777: yyC = character(yyIndex);
02778: if (-1 != yyC) {
02779: yyIndex = yyIndex + 1;
02780:
02781: switch (yyC) {
02782: case '0':
02783: case '1':
02784: case '2':
02785: case '3':
02786: case '4':
02787: case '5':
02788: case '6':
02789: case '7':
02790: case '8':
02791: case '9':
02792: case 'A':
02793: case 'B':
02794: case 'C':
02795: case 'D':
02796: case 'E':
02797: case 'F':
02798: case 'a':
02799: case 'b':
02800: case 'c':
02801: case 'd':
02802: case 'e':
02803: case 'f': {
02804: yyValue = null;
02805:
02806: return new SemanticValue(
02807: yyValue, yyIndex,
02808: yyError);
02809: }
02810:
02811: default:
02812: /* No match. */
02813: }
02814: }
02815: }
02816: break;
02817:
02818: default:
02819: /* No match. */
02820: }
02821: }
02822: }
02823: break;
02824:
02825: default:
02826: /* No match. */
02827: }
02828: }
02829: }
02830: break;
02831:
02832: default:
02833: /* No match. */
02834: }
02835: }
02836:
02837: // Done.
02838: yyError = yyError.select("hex quad expected", yyStart);
02839: return yyError;
02840: }
02841:
02842: // =========================================================================
02843:
02844: /**
02845: * Parse nonterminal xtc.lang.CSpacing.Spacing.
02846: *
02847: * @param yyStart The index.
02848: * @return The result.
02849: * @throws IOException Signals an I/O error.
02850: */
02851: private Result pSpacing(final int yyStart) throws IOException {
02852: int yyC;
02853: int yyIndex;
02854: Result yyResult;
02855: Result yyPredResult;
02856: boolean yyPredMatched;
02857: int yyBase;
02858: int yyRepetition1;
02859: int yyRepetition2;
02860: Void yyValue;
02861: ParseError yyError = ParseError.DUMMY;
02862:
02863: // Alternative 1.
02864:
02865: yyRepetition1 = yyStart;
02866: while (true) {
02867:
02868: final int yyChoice1 = yyRepetition1;
02869:
02870: // Nested alternative 1.
02871:
02872: yyC = character(yyChoice1);
02873: if (-1 != yyC) {
02874: yyIndex = yyChoice1 + 1;
02875:
02876: switch (yyC) {
02877: case ' ': {
02878: yyRepetition1 = yyIndex;
02879: continue;
02880: }
02881:
02882: case '\t': {
02883: yyRepetition1 = yyIndex;
02884: continue;
02885: }
02886:
02887: case '\f': {
02888: yyRepetition1 = yyIndex;
02889: continue;
02890: }
02891:
02892: case '/': {
02893: yyC = character(yyIndex);
02894: if (-1 != yyC) {
02895: yyIndex = yyIndex + 1;
02896:
02897: switch (yyC) {
02898: case '*': {
02899: yyRepetition2 = yyIndex;
02900: while (true) {
02901:
02902: final int yyChoice2 = yyRepetition2;
02903:
02904: // Nested alternative 1.
02905:
02906: yyC = character(yyChoice2);
02907: if (-1 != yyC) {
02908: yyIndex = yyChoice2 + 1;
02909:
02910: switch (yyC) {
02911: case '*': {
02912: yyPredMatched = false;
02913:
02914: yyC = character(yyIndex);
02915: if ('/' == yyC) {
02916:
02917: yyPredMatched = true;
02918: }
02919:
02920: if (!yyPredMatched) {
02921:
02922: yyRepetition2 = yyIndex;
02923: continue;
02924: } else {
02925: yyError = yyError.select(
02926: "spacing expected",
02927: yyStart);
02928: }
02929: }
02930: break;
02931:
02932: default: {
02933: yyRepetition2 = yyIndex;
02934: continue;
02935: }
02936: }
02937: }
02938: break;
02939: }
02940:
02941: yyBase = yyRepetition2;
02942: yyC = character(yyBase);
02943: if ('*' == yyC) {
02944: yyIndex = yyRepetition2 + 1;
02945:
02946: yyC = character(yyIndex);
02947: if ('/' == yyC) {
02948: yyIndex = yyIndex + 1;
02949:
02950: yyRepetition1 = yyIndex;
02951: continue;
02952: } else {
02953: yyError = yyError.select(
02954: "\"*/\" expected", yyBase);
02955: }
02956: } else {
02957: yyError = yyError.select(
02958: "\"*/\" expected", yyBase);
02959: }
02960: }
02961: break;
02962:
02963: case '/': {
02964: yyRepetition2 = yyIndex;
02965: while (true) {
02966:
02967: yyC = character(yyRepetition2);
02968: if (-1 != yyC) {
02969: yyIndex = yyRepetition2 + 1;
02970:
02971: switch (yyC) {
02972: case '\n':
02973: case '\r':
02974: /* No match. */
02975: break;
02976:
02977: default: {
02978: yyRepetition2 = yyIndex;
02979: continue;
02980: }
02981: }
02982: }
02983: break;
02984: }
02985:
02986: yyPredResult = pLineTerminator(yyRepetition2);
02987: yyError = yyPredResult.select(yyError);
02988: if (yyPredResult.hasValue()) {
02989:
02990: yyRepetition1 = yyRepetition2;
02991: continue;
02992: }
02993: }
02994: break;
02995:
02996: default:
02997: /* No match. */
02998: }
02999: }
03000: }
03001: break;
03002:
03003: case '\r': {
03004: final int yyChoice2 = yyIndex;
03005:
03006: // Nested alternative 1.
03007:
03008: yyC = character(yyChoice2);
03009: if ('\n' == yyC) {
03010: yyIndex = yyChoice2 + 1;
03011:
03012: yyResult = pDirective(yyIndex);
03013: yyError = yyResult.select(yyError);
03014: if (yyResult.hasValue()) {
03015:
03016: yyRepetition1 = yyResult.index;
03017: continue;
03018: }
03019: }
03020:
03021: // Nested alternative 2.
03022:
03023: yyResult = pDirective(yyChoice2);
03024: yyError = yyResult.select(yyError);
03025: if (yyResult.hasValue()) {
03026:
03027: yyRepetition1 = yyResult.index;
03028: continue;
03029: }
03030: }
03031: break;
03032:
03033: case '\n': {
03034: yyResult = pDirective(yyIndex);
03035: yyError = yyResult.select(yyError);
03036: if (yyResult.hasValue()) {
03037:
03038: yyRepetition1 = yyResult.index;
03039: continue;
03040: }
03041: }
03042: break;
03043:
03044: default:
03045: /* No match. */
03046: }
03047: }
03048: break;
03049: }
03050:
03051: yyValue = null;
03052:
03053: return new SemanticValue(yyValue, yyRepetition1, yyError);
03054: }
03055:
03056: // =========================================================================
03057:
03058: /**
03059: * Parse nonterminal xtc.lang.CSpacing.Space.
03060: *
03061: * @param yyStart The index.
03062: * @return The result.
03063: * @throws IOException Signals an I/O error.
03064: */
03065: private Result pSpace(final int yyStart) throws IOException {
03066: int yyC;
03067: int yyIndex;
03068: Void yyValue;
03069: ParseError yyError = ParseError.DUMMY;
03070:
03071: // Alternative 1.
03072:
03073: yyC = character(yyStart);
03074: if (-1 != yyC) {
03075: yyIndex = yyStart + 1;
03076:
03077: switch (yyC) {
03078: case ' ': {
03079: yyValue = null;
03080:
03081: return new SemanticValue(yyValue, yyIndex, yyError);
03082: }
03083:
03084: case '\t': {
03085: yyValue = null;
03086:
03087: return new SemanticValue(yyValue, yyIndex, yyError);
03088: }
03089:
03090: case '\f': {
03091: yyValue = null;
03092:
03093: return new SemanticValue(yyValue, yyIndex, yyError);
03094: }
03095:
03096: default:
03097: /* No match. */
03098: }
03099: }
03100:
03101: // Done.
03102: yyError = yyError.select("space expected", yyStart);
03103: return yyError;
03104: }
03105:
03106: // =========================================================================
03107:
03108: /**
03109: * Parse nonterminal xtc.lang.CSpacing.LineTerminator.
03110: *
03111: * @param yyStart The index.
03112: * @return The result.
03113: * @throws IOException Signals an I/O error.
03114: */
03115: private Result pLineTerminator(final int yyStart)
03116: throws IOException {
03117: int yyC;
03118: int yyIndex;
03119: Void yyValue;
03120: ParseError yyError = ParseError.DUMMY;
03121:
03122: // Alternative 1.
03123:
03124: yyC = character(yyStart);
03125: if (-1 != yyC) {
03126: yyIndex = yyStart + 1;
03127:
03128: switch (yyC) {
03129: case '\r': {
03130: final int yyChoice1 = yyIndex;
03131:
03132: // Nested alternative 1.
03133:
03134: yyC = character(yyChoice1);
03135: if ('\n' == yyC) {
03136: yyIndex = yyChoice1 + 1;
03137:
03138: yyValue = null;
03139:
03140: return new SemanticValue(yyValue, yyIndex, yyError);
03141: }
03142:
03143: // Nested alternative 2.
03144:
03145: yyValue = null;
03146:
03147: return new SemanticValue(yyValue, yyChoice1, yyError);
03148: }
03149:
03150: case '\n': {
03151: yyValue = null;
03152:
03153: return new SemanticValue(yyValue, yyIndex, yyError);
03154: }
03155:
03156: default:
03157: /* No match. */
03158: }
03159: }
03160:
03161: // Done.
03162: yyError = yyError.select("line terminator expected", yyStart);
03163: return yyError;
03164: }
03165:
03166: // =========================================================================
03167:
03168: /**
03169: * Parse nonterminal xtc.lang.CSpacing.EndOfFile.
03170: *
03171: * @param yyStart The index.
03172: * @return The result.
03173: * @throws IOException Signals an I/O error.
03174: */
03175: private Result pEndOfFile(final int yyStart) throws IOException {
03176: int yyC;
03177: boolean yyPredMatched;
03178: Void yyValue;
03179: ParseError yyError = ParseError.DUMMY;
03180:
03181: // Alternative 1.
03182:
03183: yyPredMatched = false;
03184:
03185: yyC = character(yyStart);
03186: if (-1 != yyC) {
03187:
03188: yyPredMatched = true;
03189: }
03190:
03191: if (!yyPredMatched) {
03192:
03193: yyValue = null;
03194:
03195: return new SemanticValue(yyValue, yyStart, yyError);
03196: } else {
03197: yyError = yyError.select("end of file expected", yyStart);
03198: }
03199:
03200: // Done.
03201: return yyError;
03202: }
03203:
03204: // =========================================================================
03205:
03206: /**
03207: * Parse nonterminal xtc.lang.CSpacing.Directive.
03208: *
03209: * @param yyStart The index.
03210: * @return The result.
03211: * @throws IOException Signals an I/O error.
03212: */
03213: private Result pDirective(final int yyStart) throws IOException {
03214: int yyC;
03215: int yyIndex;
03216: Result yyResult;
03217: Result yyPredResult;
03218: int yyBase;
03219: int yyRepetition1;
03220: boolean yyRepeated1;
03221: int yyOption1;
03222: String yyOpValue1;
03223: Void yyValue;
03224: ParseError yyError = ParseError.DUMMY;
03225:
03226: // Alternative 1.
03227:
03228: yyC = character(yyStart);
03229: if ('#' == yyC) {
03230: yyIndex = yyStart + 1;
03231:
03232: final int yyChoice1 = yyIndex;
03233:
03234: // Nested alternative 1.
03235:
03236: yyC = character(yyChoice1);
03237: if (' ' == yyC) {
03238: yyIndex = yyChoice1 + 1;
03239:
03240: yyResult = pLineNumber(yyIndex);
03241: yyError = yyResult.select(yyError);
03242: if (yyResult.hasValue()) {
03243: final String line = yyResult.semanticValue();
03244:
03245: yyC = character(yyResult.index);
03246: if (' ' == yyC) {
03247: yyIndex = yyResult.index + 1;
03248:
03249: yyC = character(yyIndex);
03250: if ('\"' == yyC) {
03251: yyIndex = yyIndex + 1;
03252:
03253: yyResult = pFileName(yyIndex);
03254: yyError = yyResult.select(yyError);
03255: if (yyResult.hasValue()) {
03256: final String file = yyResult
03257: .semanticValue();
03258:
03259: yyC = character(yyResult.index);
03260: if ('\"' == yyC) {
03261: yyIndex = yyResult.index + 1;
03262:
03263: yyOption1 = yyIndex;
03264: yyOpValue1 = null;
03265:
03266: yyBase = yyOption1;
03267: yyC = character(yyBase);
03268: if (' ' == yyC) {
03269: yyIndex = yyOption1 + 1;
03270:
03271: yyC = character(yyIndex);
03272: if ('1' == yyC) {
03273: yyIndex = yyIndex + 1;
03274: final String v$el$1 = " 1";
03275:
03276: yyOption1 = yyIndex;
03277: yyOpValue1 = v$el$1;
03278: } else {
03279: yyError = yyError.select(
03280: "\" 1\" expected",
03281: yyBase);
03282: }
03283: } else {
03284: yyError = yyError.select(
03285: "\" 1\" expected",
03286: yyBase);
03287: }
03288: { // Start scope for f1.
03289: final String f1 = yyOpValue1;
03290:
03291: yyOpValue1 = null;
03292:
03293: yyBase = yyOption1;
03294: yyC = character(yyBase);
03295: if (' ' == yyC) {
03296: yyIndex = yyOption1 + 1;
03297:
03298: yyC = character(yyIndex);
03299: if ('2' == yyC) {
03300: yyIndex = yyIndex + 1;
03301: final String v$el$2 = " 2";
03302:
03303: yyOption1 = yyIndex;
03304: yyOpValue1 = v$el$2;
03305: } else {
03306: yyError = yyError
03307: .select(
03308: "\" 2\" expected",
03309: yyBase);
03310: }
03311: } else {
03312: yyError = yyError.select(
03313: "\" 2\" expected",
03314: yyBase);
03315: }
03316: { // Start scope for f2.
03317: final String f2 = yyOpValue1;
03318:
03319: yyOpValue1 = null;
03320:
03321: yyBase = yyOption1;
03322: yyC = character(yyBase);
03323: if (' ' == yyC) {
03324: yyIndex = yyOption1 + 1;
03325:
03326: yyC = character(yyIndex);
03327: if ('3' == yyC) {
03328: yyIndex = yyIndex + 1;
03329: final String v$el$3 = " 3";
03330:
03331: yyOption1 = yyIndex;
03332: yyOpValue1 = v$el$3;
03333: } else {
03334: yyError = yyError
03335: .select(
03336: "\" 3\" expected",
03337: yyBase);
03338: }
03339: } else {
03340: yyError = yyError
03341: .select(
03342: "\" 3\" expected",
03343: yyBase);
03344: }
03345: { // Start scope for f3.
03346: final String f3 = yyOpValue1;
03347:
03348: yyOpValue1 = null;
03349:
03350: yyBase = yyOption1;
03351: yyC = character(yyBase);
03352: if (' ' == yyC) {
03353: yyIndex = yyOption1 + 1;
03354:
03355: yyC = character(yyIndex);
03356: if ('4' == yyC) {
03357: yyIndex = yyIndex + 1;
03358: final String v$el$4 = " 4";
03359:
03360: yyOption1 = yyIndex;
03361: yyOpValue1 = v$el$4;
03362: } else {
03363: yyError = yyError
03364: .select(
03365: "\" 4\" expected",
03366: yyBase);
03367: }
03368: } else {
03369: yyError = yyError
03370: .select(
03371: "\" 4\" expected",
03372: yyBase);
03373: }
03374: { // Start scope for f4.
03375: final String f4 = yyOpValue1;
03376:
03377: yyPredResult = pLineTerminator(yyOption1);
03378: yyError = yyPredResult
03379: .select(yyError);
03380: if (yyPredResult
03381: .hasValue()) {
03382:
03383: final int lineNo = Integer
03384: .parseInt(line);
03385: if (RELOCATE)
03386: setLocation(
03387: yyStart,
03388: file,
03389: lineNo - 1,
03390: FIRST_COLUMN);
03391: yyState
03392: .lineMarker(
03393: file,
03394: lineNo,
03395: f1,
03396: f2,
03397: f3,
03398: f4,
03399: location(yyStart));
03400:
03401: yyValue = null;
03402:
03403: return new SemanticValue(
03404: yyValue,
03405: yyOption1,
03406: yyError);
03407: }
03408: } // End scope for f4.
03409: } // End scope for f3.
03410: } // End scope for f2.
03411: } // End scope for f1.
03412: }
03413: }
03414: }
03415: }
03416: }
03417: }
03418:
03419: // Nested alternative 2.
03420:
03421: yyRepetition1 = yyChoice1;
03422: while (true) {
03423:
03424: yyResult = pSpace(yyRepetition1);
03425: yyError = yyResult.select(yyError);
03426: if (yyResult.hasValue()) {
03427:
03428: yyRepetition1 = yyResult.index;
03429: continue;
03430: }
03431: break;
03432: }
03433: { // Start scope for nested choice.
03434:
03435: final int yyChoice2 = yyRepetition1;
03436:
03437: // Nested alternative 1.
03438:
03439: yyC = character(yyChoice2);
03440: if (-1 != yyC) {
03441: yyIndex = yyChoice2 + 1;
03442:
03443: switch (yyC) {
03444: case 'p': {
03445: yyC = character(yyIndex);
03446: if (-1 != yyC) {
03447: yyIndex = yyIndex + 1;
03448: if ('r' == yyC) {
03449:
03450: yyC = character(yyIndex);
03451: if (-1 != yyC) {
03452: yyIndex = yyIndex + 1;
03453: if ('a' == yyC) {
03454:
03455: yyC = character(yyIndex);
03456: if (-1 != yyC) {
03457: yyIndex = yyIndex + 1;
03458: if ('g' == yyC) {
03459:
03460: yyC = character(yyIndex);
03461: if (-1 != yyC) {
03462: yyIndex = yyIndex + 1;
03463: if ('m' == yyC) {
03464:
03465: yyC = character(yyIndex);
03466: if (-1 != yyC) {
03467: yyIndex = yyIndex + 1;
03468: if ('a' == yyC) {
03469:
03470: yyC = character(yyIndex);
03471: if (-1 != yyC) {
03472: yyIndex = yyIndex + 1;
03473: if (' ' == yyC) {
03474:
03475: yyResult = pPragma(yyIndex);
03476: yyError = yyResult
03477: .select(yyError);
03478: if (yyResult
03479: .hasValue()) {
03480: final String pragma = yyResult
03481: .semanticValue();
03482:
03483: yyPredResult = pLineTerminator(yyResult.index);
03484: yyError = yyPredResult
03485: .select(yyError);
03486: if (yyPredResult
03487: .hasValue()) {
03488:
03489: yyState
03490: .pragma(
03491: pragma,
03492: location(yyStart));
03493:
03494: yyValue = null;
03495:
03496: return yyResult
03497: .createValue(
03498: yyValue,
03499: yyError);
03500: }
03501: }
03502: }
03503: }
03504: }
03505: }
03506: }
03507: }
03508: }
03509: }
03510: }
03511: }
03512: }
03513: }
03514: }
03515: break;
03516:
03517: case 'i': {
03518: yyC = character(yyIndex);
03519: if (-1 != yyC) {
03520: yyIndex = yyIndex + 1;
03521: if ('d' == yyC) {
03522:
03523: yyC = character(yyIndex);
03524: if (-1 != yyC) {
03525: yyIndex = yyIndex + 1;
03526: if ('e' == yyC) {
03527:
03528: yyC = character(yyIndex);
03529: if (-1 != yyC) {
03530: yyIndex = yyIndex + 1;
03531: if ('n' == yyC) {
03532:
03533: yyC = character(yyIndex);
03534: if (-1 != yyC) {
03535: yyIndex = yyIndex + 1;
03536: if ('t' == yyC) {
03537:
03538: yyRepetition1 = yyIndex;
03539: yyRepeated1 = false;
03540: while (true) {
03541:
03542: yyResult = pSpace(yyRepetition1);
03543: yyError = yyResult
03544: .select(yyError);
03545: if (yyResult
03546: .hasValue()) {
03547:
03548: yyRepetition1 = yyResult.index;
03549: yyRepeated1 = true;
03550: continue;
03551: }
03552: break;
03553: }
03554:
03555: if (yyRepeated1) {
03556:
03557: yyC = character(yyRepetition1);
03558: if ('\"' == yyC) {
03559: yyIndex = yyRepetition1 + 1;
03560:
03561: yyResult = pFileName(yyIndex);
03562: yyError = yyResult
03563: .select(yyError);
03564: if (yyResult
03565: .hasValue()) {
03566: final String s = yyResult
03567: .semanticValue();
03568:
03569: yyC = character(yyResult.index);
03570: if ('\"' == yyC) {
03571: yyIndex = yyResult.index + 1;
03572:
03573: yyPredResult = pLineTerminator(yyIndex);
03574: yyError = yyPredResult
03575: .select(yyError);
03576: if (yyPredResult
03577: .hasValue()) {
03578:
03579: yyState
03580: .ident(
03581: s,
03582: location(yyStart));
03583:
03584: yyValue = null;
03585:
03586: return new SemanticValue(
03587: yyValue,
03588: yyIndex,
03589: yyError);
03590: }
03591: }
03592: }
03593: }
03594: }
03595: }
03596: }
03597: }
03598: }
03599: }
03600: }
03601: }
03602: }
03603: }
03604: break;
03605:
03606: default:
03607: /* No match. */
03608: }
03609: }
03610: } // End scope for nested choice.
03611: }
03612:
03613: // Alternative 2.
03614:
03615: yyValue = null;
03616:
03617: return new SemanticValue(yyValue, yyStart, yyError);
03618: }
03619:
03620: // =========================================================================
03621:
03622: /**
03623: * Parse nonterminal xtc.lang.CSpacing.LineNumber.
03624: *
03625: * @param yyStart The index.
03626: * @return The result.
03627: * @throws IOException Signals an I/O error.
03628: */
03629: private Result pLineNumber(final int yyStart) throws IOException {
03630: int yyC;
03631: int yyIndex;
03632: int yyRepetition1;
03633: String yyValue;
03634: ParseError yyError = ParseError.DUMMY;
03635:
03636: // Alternative 1.
03637:
03638: yyC = character(yyStart);
03639: if (-1 != yyC) {
03640: yyIndex = yyStart + 1;
03641:
03642: switch (yyC) {
03643: case '1':
03644: case '2':
03645: case '3':
03646: case '4':
03647: case '5':
03648: case '6':
03649: case '7':
03650: case '8':
03651: case '9': {
03652: yyRepetition1 = yyIndex;
03653: while (true) {
03654:
03655: yyC = character(yyRepetition1);
03656: if (-1 != yyC) {
03657: yyIndex = yyRepetition1 + 1;
03658:
03659: switch (yyC) {
03660: case '0':
03661: case '1':
03662: case '2':
03663: case '3':
03664: case '4':
03665: case '5':
03666: case '6':
03667: case '7':
03668: case '8':
03669: case '9': {
03670: yyRepetition1 = yyIndex;
03671: continue;
03672: }
03673:
03674: default:
03675: /* No match. */
03676: }
03677: }
03678: break;
03679: }
03680:
03681: yyValue = difference(yyStart, yyRepetition1);
03682:
03683: return new SemanticValue(yyValue, yyRepetition1,
03684: yyError);
03685: }
03686:
03687: default:
03688: /* No match. */
03689: }
03690: }
03691:
03692: // Done.
03693: yyError = yyError.select("line number expected", yyStart);
03694: return yyError;
03695: }
03696:
03697: // =========================================================================
03698:
03699: /**
03700: * Parse nonterminal xtc.lang.CSpacing.FileName.
03701: *
03702: * @param yyStart The index.
03703: * @return The result.
03704: * @throws IOException Signals an I/O error.
03705: */
03706: private Result pFileName(final int yyStart) throws IOException {
03707: int yyC;
03708: int yyIndex;
03709: int yyRepetition1;
03710: String yyValue;
03711: ParseError yyError = ParseError.DUMMY;
03712:
03713: // Alternative 1.
03714:
03715: yyRepetition1 = yyStart;
03716: while (true) {
03717:
03718: final int yyChoice1 = yyRepetition1;
03719:
03720: // Nested alternative 1.
03721:
03722: yyC = character(yyChoice1);
03723: if (-1 != yyC) {
03724: yyIndex = yyChoice1 + 1;
03725:
03726: switch (yyC) {
03727: case '\\': {
03728: yyC = character(yyIndex);
03729: if (-1 != yyC) {
03730: yyIndex = yyIndex + 1;
03731:
03732: yyRepetition1 = yyIndex;
03733: continue;
03734: }
03735: }
03736: break;
03737:
03738: default:
03739: /* No match. */
03740: }
03741: }
03742:
03743: // Nested alternative 2.
03744:
03745: yyC = character(yyChoice1);
03746: if (-1 != yyC) {
03747: yyIndex = yyChoice1 + 1;
03748:
03749: switch (yyC) {
03750: case '\"':
03751: case '\\':
03752: /* No match. */
03753: break;
03754:
03755: default: {
03756: yyRepetition1 = yyIndex;
03757: continue;
03758: }
03759: }
03760: }
03761: break;
03762: }
03763:
03764: yyValue = difference(yyStart, yyRepetition1);
03765:
03766: return new SemanticValue(yyValue, yyRepetition1, yyError);
03767: }
03768:
03769: // =========================================================================
03770:
03771: /**
03772: * Parse nonterminal xtc.lang.CSpacing.Pragma.
03773: *
03774: * @param yyStart The index.
03775: * @return The result.
03776: * @throws IOException Signals an I/O error.
03777: */
03778: private Result pPragma(final int yyStart) throws IOException {
03779: int yyC;
03780: int yyIndex;
03781: int yyRepetition1;
03782: String yyValue;
03783: ParseError yyError = ParseError.DUMMY;
03784:
03785: // Alternative 1.
03786:
03787: yyRepetition1 = yyStart;
03788: while (true) {
03789:
03790: yyC = character(yyRepetition1);
03791: if (-1 != yyC) {
03792: yyIndex = yyRepetition1 + 1;
03793:
03794: switch (yyC) {
03795: case '\n':
03796: case '\r':
03797: /* No match. */
03798: break;
03799:
03800: default: {
03801: yyRepetition1 = yyIndex;
03802: continue;
03803: }
03804: }
03805: }
03806: break;
03807: }
03808:
03809: yyValue = difference(yyStart, yyRepetition1);
03810:
03811: return new SemanticValue(yyValue, yyRepetition1, yyError);
03812: }
03813:
03814: // =========================================================================
03815:
03816: /**
03817: * Parse nonterminal xtc.lang.jeannie.JeannieSymbol.Symbol.
03818: *
03819: * @param yyStart The index.
03820: * @return The result.
03821: * @throws IOException Signals an I/O error.
03822: */
03823: private Result pSymbol(final int yyStart) throws IOException {
03824: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
03825: if (null == yyColumn.chunk1)
03826: yyColumn.chunk1 = new Chunk1();
03827: if (null == yyColumn.chunk1.fSymbol)
03828: yyColumn.chunk1.fSymbol = pSymbol$1(yyStart);
03829: return yyColumn.chunk1.fSymbol;
03830: }
03831:
03832: /** Actually parse xtc.lang.jeannie.JeannieSymbol.Symbol. */
03833: private Result pSymbol$1(final int yyStart) throws IOException {
03834: Result yyResult;
03835: String yyValue;
03836: ParseError yyError = ParseError.DUMMY;
03837:
03838: // Alternative 1.
03839:
03840: yyResult = pSymbolCharacters(yyStart);
03841: yyError = yyResult.select(yyError);
03842: if (yyResult.hasValue()) {
03843: yyValue = yyResult.semanticValue();
03844:
03845: yyResult = pSpacing(yyResult.index);
03846: yyError = yyResult.select(yyError);
03847: if (yyResult.hasValue()) {
03848:
03849: return yyResult.createValue(yyValue, yyError);
03850: }
03851: }
03852:
03853: // Done.
03854: return yyError;
03855: }
03856:
03857: // =========================================================================
03858:
03859: /**
03860: * Parse nonterminal xtc.lang.jeannie.JeannieSymbol.SymbolCharacters.
03861: *
03862: * @param yyStart The index.
03863: * @return The result.
03864: * @throws IOException Signals an I/O error.
03865: */
03866: private Result pSymbolCharacters(final int yyStart)
03867: throws IOException {
03868: int yyC;
03869: int yyIndex;
03870: String yyValue;
03871: ParseError yyError = ParseError.DUMMY;
03872:
03873: // Alternative 1.
03874:
03875: yyC = character(yyStart);
03876: if (-1 != yyC) {
03877: yyIndex = yyStart + 1;
03878:
03879: switch (yyC) {
03880: case '>': {
03881: final int yyChoice1 = yyIndex;
03882:
03883: // Nested alternative 1.
03884:
03885: yyC = character(yyChoice1);
03886: if (-1 != yyC) {
03887: yyIndex = yyChoice1 + 1;
03888:
03889: switch (yyC) {
03890: case '>': {
03891: final int yyChoice2 = yyIndex;
03892:
03893: // Nested alternative 1.
03894:
03895: yyC = character(yyChoice2);
03896: if (-1 != yyC) {
03897: yyIndex = yyChoice2 + 1;
03898:
03899: switch (yyC) {
03900: case '>': {
03901: final int yyChoice3 = yyIndex;
03902:
03903: // Nested alternative 1.
03904:
03905: yyC = character(yyChoice3);
03906: if (-1 != yyC) {
03907: yyIndex = yyChoice3 + 1;
03908: if ('=' == yyC) {
03909:
03910: yyValue = ">>>=";
03911:
03912: return new SemanticValue(
03913: yyValue, yyIndex,
03914: yyError);
03915: }
03916: }
03917:
03918: // Nested alternative 2.
03919:
03920: yyValue = ">>>";
03921:
03922: return new SemanticValue(yyValue,
03923: yyChoice3, yyError);
03924: }
03925:
03926: case '=': {
03927: yyValue = ">>=";
03928:
03929: return new SemanticValue(yyValue,
03930: yyIndex, yyError);
03931: }
03932:
03933: default:
03934: /* No match. */
03935: }
03936: }
03937:
03938: // Nested alternative 2.
03939:
03940: yyValue = ">>";
03941:
03942: return new SemanticValue(yyValue, yyChoice2,
03943: yyError);
03944: }
03945:
03946: case '=': {
03947: yyValue = ">=";
03948:
03949: return new SemanticValue(yyValue, yyIndex,
03950: yyError);
03951: }
03952:
03953: default:
03954: /* No match. */
03955: }
03956: }
03957:
03958: // Nested alternative 2.
03959:
03960: yyValue = ">";
03961:
03962: return new SemanticValue(yyValue, yyChoice1, yyError);
03963: }
03964:
03965: case '<': {
03966: final int yyChoice1 = yyIndex;
03967:
03968: // Nested alternative 1.
03969:
03970: yyC = character(yyChoice1);
03971: if (-1 != yyC) {
03972: yyIndex = yyChoice1 + 1;
03973:
03974: switch (yyC) {
03975: case '<': {
03976: final int yyChoice2 = yyIndex;
03977:
03978: // Nested alternative 1.
03979:
03980: yyC = character(yyChoice2);
03981: if (-1 != yyC) {
03982: yyIndex = yyChoice2 + 1;
03983: if ('=' == yyC) {
03984:
03985: yyValue = "<<=";
03986:
03987: return new SemanticValue(yyValue,
03988: yyIndex, yyError);
03989: }
03990: }
03991:
03992: // Nested alternative 2.
03993:
03994: yyValue = "<<";
03995:
03996: return new SemanticValue(yyValue, yyChoice2,
03997: yyError);
03998: }
03999:
04000: case '=': {
04001: yyValue = "<=";
04002:
04003: return new SemanticValue(yyValue, yyIndex,
04004: yyError);
04005: }
04006:
04007: default:
04008: /* No match. */
04009: }
04010: }
04011:
04012: // Nested alternative 2.
04013:
04014: yyValue = "<";
04015:
04016: return new SemanticValue(yyValue, yyChoice1, yyError);
04017: }
04018:
04019: case '.': {
04020: final int yyChoice1 = yyIndex;
04021:
04022: // Nested alternative 1.
04023:
04024: yyC = character(yyChoice1);
04025: if (-1 != yyC) {
04026: yyIndex = yyChoice1 + 1;
04027: if ('.' == yyC) {
04028:
04029: yyC = character(yyIndex);
04030: if (-1 != yyC) {
04031: yyIndex = yyIndex + 1;
04032: if ('.' == yyC) {
04033:
04034: yyValue = "...";
04035:
04036: return new SemanticValue(yyValue,
04037: yyIndex, yyError);
04038: }
04039: }
04040: }
04041: }
04042:
04043: // Nested alternative 2.
04044:
04045: yyValue = ".";
04046:
04047: return new SemanticValue(yyValue, yyChoice1, yyError);
04048: }
04049:
04050: case '+': {
04051: final int yyChoice1 = yyIndex;
04052:
04053: // Nested alternative 1.
04054:
04055: yyC = character(yyChoice1);
04056: if (-1 != yyC) {
04057: yyIndex = yyChoice1 + 1;
04058:
04059: switch (yyC) {
04060: case '=': {
04061: yyValue = "+=";
04062:
04063: return new SemanticValue(yyValue, yyIndex,
04064: yyError);
04065: }
04066:
04067: case '+': {
04068: yyValue = "++";
04069:
04070: return new SemanticValue(yyValue, yyIndex,
04071: yyError);
04072: }
04073:
04074: default:
04075: /* No match. */
04076: }
04077: }
04078:
04079: // Nested alternative 2.
04080:
04081: yyValue = "+";
04082:
04083: return new SemanticValue(yyValue, yyChoice1, yyError);
04084: }
04085:
04086: case '-': {
04087: final int yyChoice1 = yyIndex;
04088:
04089: // Nested alternative 1.
04090:
04091: yyC = character(yyChoice1);
04092: if (-1 != yyC) {
04093: yyIndex = yyChoice1 + 1;
04094:
04095: switch (yyC) {
04096: case '=': {
04097: yyValue = "-=";
04098:
04099: return new SemanticValue(yyValue, yyIndex,
04100: yyError);
04101: }
04102:
04103: case '-': {
04104: yyValue = "--";
04105:
04106: return new SemanticValue(yyValue, yyIndex,
04107: yyError);
04108: }
04109:
04110: case '>': {
04111: yyValue = "->";
04112:
04113: return new SemanticValue(yyValue, yyIndex,
04114: yyError);
04115: }
04116:
04117: default:
04118: /* No match. */
04119: }
04120: }
04121:
04122: // Nested alternative 2.
04123:
04124: yyValue = "-";
04125:
04126: return new SemanticValue(yyValue, yyChoice1, yyError);
04127: }
04128:
04129: case '*': {
04130: final int yyChoice1 = yyIndex;
04131:
04132: // Nested alternative 1.
04133:
04134: yyC = character(yyChoice1);
04135: if (-1 != yyC) {
04136: yyIndex = yyChoice1 + 1;
04137: if ('=' == yyC) {
04138:
04139: yyValue = "*=";
04140:
04141: return new SemanticValue(yyValue, yyIndex,
04142: yyError);
04143: }
04144: }
04145:
04146: // Nested alternative 2.
04147:
04148: yyValue = "*";
04149:
04150: return new SemanticValue(yyValue, yyChoice1, yyError);
04151: }
04152:
04153: case '/': {
04154: final int yyChoice1 = yyIndex;
04155:
04156: // Nested alternative 1.
04157:
04158: yyC = character(yyChoice1);
04159: if (-1 != yyC) {
04160: yyIndex = yyChoice1 + 1;
04161: if ('=' == yyC) {
04162:
04163: yyValue = "/=";
04164:
04165: return new SemanticValue(yyValue, yyIndex,
04166: yyError);
04167: }
04168: }
04169:
04170: // Nested alternative 2.
04171:
04172: yyValue = "/";
04173:
04174: return new SemanticValue(yyValue, yyChoice1, yyError);
04175: }
04176:
04177: case '%': {
04178: final int yyChoice1 = yyIndex;
04179:
04180: // Nested alternative 1.
04181:
04182: yyC = character(yyChoice1);
04183: if (-1 != yyC) {
04184: yyIndex = yyChoice1 + 1;
04185: if ('=' == yyC) {
04186:
04187: yyValue = "%=";
04188:
04189: return new SemanticValue(yyValue, yyIndex,
04190: yyError);
04191: }
04192: }
04193:
04194: // Nested alternative 2.
04195:
04196: yyValue = "%";
04197:
04198: return new SemanticValue(yyValue, yyChoice1, yyError);
04199: }
04200:
04201: case '&': {
04202: final int yyChoice1 = yyIndex;
04203:
04204: // Nested alternative 1.
04205:
04206: yyC = character(yyChoice1);
04207: if (-1 != yyC) {
04208: yyIndex = yyChoice1 + 1;
04209:
04210: switch (yyC) {
04211: case '=': {
04212: yyValue = "&=";
04213:
04214: return new SemanticValue(yyValue, yyIndex,
04215: yyError);
04216: }
04217:
04218: case '&': {
04219: yyValue = "&&";
04220:
04221: return new SemanticValue(yyValue, yyIndex,
04222: yyError);
04223: }
04224:
04225: default:
04226: /* No match. */
04227: }
04228: }
04229:
04230: // Nested alternative 2.
04231:
04232: yyValue = "&";
04233:
04234: return new SemanticValue(yyValue, yyChoice1, yyError);
04235: }
04236:
04237: case '^': {
04238: final int yyChoice1 = yyIndex;
04239:
04240: // Nested alternative 1.
04241:
04242: yyC = character(yyChoice1);
04243: if (-1 != yyC) {
04244: yyIndex = yyChoice1 + 1;
04245: if ('=' == yyC) {
04246:
04247: yyValue = "^=";
04248:
04249: return new SemanticValue(yyValue, yyIndex,
04250: yyError);
04251: }
04252: }
04253:
04254: // Nested alternative 2.
04255:
04256: yyValue = "^";
04257:
04258: return new SemanticValue(yyValue, yyChoice1, yyError);
04259: }
04260:
04261: case '|': {
04262: final int yyChoice1 = yyIndex;
04263:
04264: // Nested alternative 1.
04265:
04266: yyC = character(yyChoice1);
04267: if (-1 != yyC) {
04268: yyIndex = yyChoice1 + 1;
04269:
04270: switch (yyC) {
04271: case '=': {
04272: yyValue = "|=";
04273:
04274: return new SemanticValue(yyValue, yyIndex,
04275: yyError);
04276: }
04277:
04278: case '|': {
04279: yyValue = "||";
04280:
04281: return new SemanticValue(yyValue, yyIndex,
04282: yyError);
04283: }
04284:
04285: default:
04286: /* No match. */
04287: }
04288: }
04289:
04290: // Nested alternative 2.
04291:
04292: yyValue = "|";
04293:
04294: return new SemanticValue(yyValue, yyChoice1, yyError);
04295: }
04296:
04297: case '=': {
04298: final int yyChoice1 = yyIndex;
04299:
04300: // Nested alternative 1.
04301:
04302: yyC = character(yyChoice1);
04303: if (-1 != yyC) {
04304: yyIndex = yyChoice1 + 1;
04305: if ('=' == yyC) {
04306:
04307: yyValue = "==";
04308:
04309: return new SemanticValue(yyValue, yyIndex,
04310: yyError);
04311: }
04312: }
04313:
04314: // Nested alternative 2.
04315:
04316: yyValue = "=";
04317:
04318: return new SemanticValue(yyValue, yyChoice1, yyError);
04319: }
04320:
04321: case '!': {
04322: final int yyChoice1 = yyIndex;
04323:
04324: // Nested alternative 1.
04325:
04326: yyC = character(yyChoice1);
04327: if (-1 != yyC) {
04328: yyIndex = yyChoice1 + 1;
04329: if ('=' == yyC) {
04330:
04331: yyValue = "!=";
04332:
04333: return new SemanticValue(yyValue, yyIndex,
04334: yyError);
04335: }
04336: }
04337:
04338: // Nested alternative 2.
04339:
04340: yyValue = "!";
04341:
04342: return new SemanticValue(yyValue, yyChoice1, yyError);
04343: }
04344:
04345: case ';': {
04346: yyValue = ";";
04347:
04348: return new SemanticValue(yyValue, yyIndex, yyError);
04349: }
04350:
04351: case ':': {
04352: yyValue = ":";
04353:
04354: return new SemanticValue(yyValue, yyIndex, yyError);
04355: }
04356:
04357: case ',': {
04358: yyValue = ",";
04359:
04360: return new SemanticValue(yyValue, yyIndex, yyError);
04361: }
04362:
04363: case '{': {
04364: yyValue = "{";
04365:
04366: return new SemanticValue(yyValue, yyIndex, yyError);
04367: }
04368:
04369: case '}': {
04370: yyValue = "}";
04371:
04372: return new SemanticValue(yyValue, yyIndex, yyError);
04373: }
04374:
04375: case '(': {
04376: yyValue = "(";
04377:
04378: return new SemanticValue(yyValue, yyIndex, yyError);
04379: }
04380:
04381: case ')': {
04382: yyValue = ")";
04383:
04384: return new SemanticValue(yyValue, yyIndex, yyError);
04385: }
04386:
04387: case '[': {
04388: yyValue = "[";
04389:
04390: return new SemanticValue(yyValue, yyIndex, yyError);
04391: }
04392:
04393: case ']': {
04394: yyValue = "]";
04395:
04396: return new SemanticValue(yyValue, yyIndex, yyError);
04397: }
04398:
04399: case '`': {
04400: yyValue = "`";
04401:
04402: return new SemanticValue(yyValue, yyIndex, yyError);
04403: }
04404:
04405: case '~': {
04406: yyValue = "~";
04407:
04408: return new SemanticValue(yyValue, yyIndex, yyError);
04409: }
04410:
04411: case '?': {
04412: yyValue = "?";
04413:
04414: return new SemanticValue(yyValue, yyIndex, yyError);
04415: }
04416:
04417: default:
04418: /* No match. */
04419: }
04420: }
04421:
04422: // Done.
04423: yyError = yyError.select("symbol characters expected", yyStart);
04424: return yyError;
04425: }
04426:
04427: // =========================================================================
04428:
04429: /**
04430: * Parse nonterminal xtc.lang.CIdentifier.Identifier.
04431: *
04432: * @param yyStart The index.
04433: * @return The result.
04434: * @throws IOException Signals an I/O error.
04435: */
04436: private Result pCIdentifier$Identifier(final int yyStart)
04437: throws IOException {
04438:
04439: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
04440: if (null == yyColumn.chunk2)
04441: yyColumn.chunk2 = new Chunk2();
04442: if (null == yyColumn.chunk2.fCIdentifier$Identifier)
04443: yyColumn.chunk2.fCIdentifier$Identifier = pCIdentifier$Identifier$1(yyStart);
04444: return yyColumn.chunk2.fCIdentifier$Identifier;
04445: }
04446:
04447: /** Actually parse xtc.lang.CIdentifier.Identifier. */
04448: private Result pCIdentifier$Identifier$1(final int yyStart)
04449: throws IOException {
04450:
04451: Result yyResult;
04452: String yyValue;
04453: ParseError yyError = ParseError.DUMMY;
04454:
04455: // Alternative 1.
04456:
04457: yyResult = pCIdentifier$Word(yyStart);
04458: yyError = yyResult.select(yyError);
04459: if (yyResult.hasValue()) {
04460: yyValue = yyResult.semanticValue();
04461:
04462: if (!contains(C_KEYWORDS, toText(yyValue))) {
04463:
04464: return yyResult.createValue(yyValue, yyError);
04465: }
04466: }
04467:
04468: // Done.
04469: yyError = yyError.select("identifier expected", yyStart);
04470: return yyError;
04471: }
04472:
04473: // =========================================================================
04474:
04475: /**
04476: * Parse nonterminal xtc.lang.CIdentifier.Keyword.
04477: *
04478: * @param yyStart The index.
04479: * @return The result.
04480: * @throws IOException Signals an I/O error.
04481: */
04482: private Result pKeyword(final int yyStart) throws IOException {
04483: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
04484: if (null == yyColumn.chunk2)
04485: yyColumn.chunk2 = new Chunk2();
04486: if (null == yyColumn.chunk2.fKeyword)
04487: yyColumn.chunk2.fKeyword = pKeyword$1(yyStart);
04488: return yyColumn.chunk2.fKeyword;
04489: }
04490:
04491: /** Actually parse xtc.lang.CIdentifier.Keyword. */
04492: private Result pKeyword$1(final int yyStart) throws IOException {
04493: Result yyResult;
04494: String yyValue;
04495: ParseError yyError = ParseError.DUMMY;
04496:
04497: // Alternative 1.
04498:
04499: yyResult = pCIdentifier$Word(yyStart);
04500: yyError = yyResult.select(yyError);
04501: if (yyResult.hasValue()) {
04502: yyValue = yyResult.semanticValue();
04503:
04504: if (contains(C_KEYWORDS, toText(yyValue))) {
04505:
04506: return yyResult.createValue(yyValue, yyError);
04507: }
04508: }
04509:
04510: // Done.
04511: yyError = yyError.select("keyword expected", yyStart);
04512: return yyError;
04513: }
04514:
04515: // =========================================================================
04516:
04517: /**
04518: * Parse nonterminal xtc.lang.CIdentifier.Word.
04519: *
04520: * @param yyStart The index.
04521: * @return The result.
04522: * @throws IOException Signals an I/O error.
04523: */
04524: private Result pCIdentifier$Word(final int yyStart)
04525: throws IOException {
04526: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
04527: if (null == yyColumn.chunk2)
04528: yyColumn.chunk2 = new Chunk2();
04529: if (null == yyColumn.chunk2.fCIdentifier$Word)
04530: yyColumn.chunk2.fCIdentifier$Word = pCIdentifier$Word$1(yyStart);
04531: return yyColumn.chunk2.fCIdentifier$Word;
04532: }
04533:
04534: /** Actually parse xtc.lang.CIdentifier.Word. */
04535: private Result pCIdentifier$Word$1(final int yyStart)
04536: throws IOException {
04537: Result yyResult;
04538: String yyValue;
04539: ParseError yyError = ParseError.DUMMY;
04540:
04541: // Alternative 1.
04542:
04543: yyResult = pCIdentifier$WordCharacters(yyStart);
04544: yyError = yyResult.select(yyError);
04545: if (yyResult.hasValue()) {
04546: yyValue = yyResult.semanticValue();
04547:
04548: yyResult = pSpacing(yyResult.index);
04549: yyError = yyResult.select(yyError);
04550: if (yyResult.hasValue()) {
04551:
04552: return yyResult.createValue(yyValue, yyError);
04553: }
04554: }
04555:
04556: // Done.
04557: return yyError;
04558: }
04559:
04560: // =========================================================================
04561:
04562: /**
04563: * Parse nonterminal xtc.lang.CIdentifier.WordCharacters.
04564: *
04565: * @param yyStart The index.
04566: * @return The result.
04567: * @throws IOException Signals an I/O error.
04568: */
04569: private Result pCIdentifier$WordCharacters(final int yyStart)
04570: throws IOException {
04571:
04572: int yyC;
04573: int yyIndex;
04574: int yyRepetition1;
04575: String yyValue;
04576: ParseError yyError = ParseError.DUMMY;
04577:
04578: // Alternative 1.
04579:
04580: yyC = character(yyStart);
04581: if (-1 != yyC) {
04582: yyIndex = yyStart + 1;
04583: if ((('A' <= yyC) && (yyC <= 'Z')) || ('_' == yyC)
04584: || (('a' <= yyC) && (yyC <= 'z'))) {
04585:
04586: yyRepetition1 = yyIndex;
04587: while (true) {
04588:
04589: yyC = character(yyRepetition1);
04590: if (-1 != yyC) {
04591: yyIndex = yyRepetition1 + 1;
04592: if ((('0' <= yyC) && (yyC <= '9'))
04593: || (('A' <= yyC) && (yyC <= 'Z'))
04594: || ('_' == yyC)
04595: || (('a' <= yyC) && (yyC <= 'z'))) {
04596:
04597: yyRepetition1 = yyIndex;
04598: continue;
04599: }
04600: }
04601: break;
04602: }
04603:
04604: yyValue = difference(yyStart, yyRepetition1);
04605:
04606: return new SemanticValue(yyValue, yyRepetition1,
04607: yyError);
04608: }
04609: }
04610:
04611: // Done.
04612: yyError = yyError.select("word characters expected", yyStart);
04613: return yyError;
04614: }
04615:
04616: // =========================================================================
04617:
04618: /**
04619: * Parse nonterminal xtc.lang.CContext.TypedefContext.
04620: *
04621: * @param yyStart The index.
04622: * @return The result.
04623: * @throws IOException Signals an I/O error.
04624: */
04625: private Result pTypedefContext(final int yyStart)
04626: throws IOException {
04627: Void yyValue;
04628: ParseError yyError = ParseError.DUMMY;
04629:
04630: // Alternative 1.
04631:
04632: yyState.typedef();
04633:
04634: yyValue = null;
04635:
04636: return new SemanticValue(yyValue, yyStart, yyError);
04637: }
04638:
04639: // =========================================================================
04640:
04641: /**
04642: * Parse nonterminal xtc.lang.CContext.ParameterContext.
04643: *
04644: * @param yyStart The index.
04645: * @return The result.
04646: * @throws IOException Signals an I/O error.
04647: */
04648: private Result pParameterContext(final int yyStart)
04649: throws IOException {
04650: Void yyValue;
04651: ParseError yyError = ParseError.DUMMY;
04652:
04653: // Alternative 1.
04654:
04655: yyState.parameters();
04656:
04657: yyValue = null;
04658:
04659: return new SemanticValue(yyValue, yyStart, yyError);
04660: }
04661:
04662: // =========================================================================
04663:
04664: /**
04665: * Parse nonterminal xtc.lang.CContext.FunctionDeclaratorContext.
04666: *
04667: * @param yyStart The index.
04668: * @return The result.
04669: * @throws IOException Signals an I/O error.
04670: */
04671: private Result pFunctionDeclaratorContext(final int yyStart)
04672: throws IOException {
04673:
04674: Void yyValue;
04675: ParseError yyError = ParseError.DUMMY;
04676:
04677: // Alternative 1.
04678:
04679: yyState.functionDeclarator();
04680:
04681: yyValue = null;
04682:
04683: return new SemanticValue(yyValue, yyStart, yyError);
04684: }
04685:
04686: // =========================================================================
04687:
04688: /**
04689: * Parse nonterminal xtc.lang.CContext.TypeSpecContext.
04690: *
04691: * @param yyStart The index.
04692: * @return The result.
04693: * @throws IOException Signals an I/O error.
04694: */
04695: private Result pTypeSpecContext(final int yyStart)
04696: throws IOException {
04697: Void yyValue;
04698: ParseError yyError = ParseError.DUMMY;
04699:
04700: // Alternative 1.
04701:
04702: yyState.typeSpecifier();
04703:
04704: yyValue = null;
04705:
04706: return new SemanticValue(yyValue, yyStart, yyError);
04707: }
04708:
04709: // =========================================================================
04710:
04711: /**
04712: * Parse nonterminal xtc.lang.CContext.PushScope.
04713: *
04714: * @param yyStart The index.
04715: * @return The result.
04716: * @throws IOException Signals an I/O error.
04717: */
04718: private Result pPushScope(final int yyStart) throws IOException {
04719: Void yyValue;
04720: ParseError yyError = ParseError.DUMMY;
04721:
04722: // Alternative 1.
04723:
04724: yyState.pushScope();
04725:
04726: yyValue = null;
04727:
04728: return new SemanticValue(yyValue, yyStart, yyError);
04729: }
04730:
04731: // =========================================================================
04732:
04733: /**
04734: * Parse nonterminal xtc.lang.CContext.PopScope.
04735: *
04736: * @param yyStart The index.
04737: * @return The result.
04738: * @throws IOException Signals an I/O error.
04739: */
04740: private Result pPopScope(final int yyStart) throws IOException {
04741: Void yyValue;
04742: ParseError yyError = ParseError.DUMMY;
04743:
04744: // Alternative 1.
04745:
04746: yyState.popScope();
04747:
04748: yyValue = null;
04749:
04750: return new SemanticValue(yyValue, yyStart, yyError);
04751: }
04752:
04753: // =========================================================================
04754:
04755: /**
04756: * Parse nonterminal xtc.lang.CContext.EnterStructure.
04757: *
04758: * @param yyStart The index.
04759: * @return The result.
04760: * @throws IOException Signals an I/O error.
04761: */
04762: private Result pEnterStructure(final int yyStart)
04763: throws IOException {
04764: Void yyValue;
04765: ParseError yyError = ParseError.DUMMY;
04766:
04767: // Alternative 1.
04768:
04769: yyState.enterStructure();
04770:
04771: yyValue = null;
04772:
04773: return new SemanticValue(yyValue, yyStart, yyError);
04774: }
04775:
04776: // =========================================================================
04777:
04778: /**
04779: * Parse nonterminal xtc.lang.CContext.ExitStructure.
04780: *
04781: * @param yyStart The index.
04782: * @return The result.
04783: * @throws IOException Signals an I/O error.
04784: */
04785: private Result pExitStructure(final int yyStart) throws IOException {
04786: Void yyValue;
04787: ParseError yyError = ParseError.DUMMY;
04788:
04789: // Alternative 1.
04790:
04791: yyState.exitStructure();
04792:
04793: yyValue = null;
04794:
04795: return new SemanticValue(yyValue, yyStart, yyError);
04796: }
04797:
04798: // =========================================================================
04799:
04800: /**
04801: * Parse nonterminal xtc.lang.JavaType.ResultType.
04802: *
04803: * @param yyStart The index.
04804: * @return The result.
04805: * @throws IOException Signals an I/O error.
04806: */
04807: private Result pResultType(final int yyStart) throws IOException {
04808: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
04809: if (null == yyColumn.chunk2)
04810: yyColumn.chunk2 = new Chunk2();
04811: if (null == yyColumn.chunk2.fResultType)
04812: yyColumn.chunk2.fResultType = pResultType$1(yyStart);
04813: return yyColumn.chunk2.fResultType;
04814: }
04815:
04816: /** Actually parse xtc.lang.JavaType.ResultType. */
04817: private Result pResultType$1(final int yyStart) throws IOException {
04818: Result yyResult;
04819: Node yyValue;
04820: ParseError yyError = ParseError.DUMMY;
04821:
04822: // Alternative <Void>.
04823:
04824: yyResult = pVoidType(yyStart);
04825: yyError = yyResult.select(yyError);
04826: if (yyResult.hasValue()) {
04827: yyValue = yyResult.semanticValue();
04828:
04829: return yyResult.createValue(yyValue, yyError);
04830: }
04831:
04832: // Alternative <Regular>.
04833:
04834: yyResult = pType(yyStart);
04835: yyError = yyResult.select(yyError);
04836: if (yyResult.hasValue()) {
04837: yyValue = yyResult.semanticValue();
04838:
04839: return yyResult.createValue(yyValue, yyError);
04840: }
04841:
04842: // Done.
04843: return yyError;
04844: }
04845:
04846: // =========================================================================
04847:
04848: /**
04849: * Parse nonterminal xtc.lang.JavaType.VoidType.
04850: *
04851: * @param yyStart The index.
04852: * @return The result.
04853: * @throws IOException Signals an I/O error.
04854: */
04855: private Result pVoidType(final int yyStart) throws IOException {
04856: Result yyResult;
04857: Node yyValue;
04858: ParseError yyError = ParseError.DUMMY;
04859:
04860: // Alternative <Void>.
04861:
04862: yyResult = pJavaIdentifier$Word(yyStart);
04863: yyError = yyResult.select(yyError);
04864: if (yyResult.hasValue("void")) {
04865:
04866: yyValue = GNode.create("VoidType", false);
04867: yyValue.setLocation(location(yyStart));
04868:
04869: return yyResult.createValue(yyValue, yyError);
04870: }
04871:
04872: // Done.
04873: yyError = yyError.select("void type expected", yyStart);
04874: return yyError;
04875: }
04876:
04877: // =========================================================================
04878:
04879: /**
04880: * Parse nonterminal xtc.lang.JavaType.Type.
04881: *
04882: * @param yyStart The index.
04883: * @return The result.
04884: * @throws IOException Signals an I/O error.
04885: */
04886: private Result pType(final int yyStart) throws IOException {
04887: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
04888: if (null == yyColumn.chunk2)
04889: yyColumn.chunk2 = new Chunk2();
04890: if (null == yyColumn.chunk2.fType)
04891: yyColumn.chunk2.fType = pType$1(yyStart);
04892: return yyColumn.chunk2.fType;
04893: }
04894:
04895: /** Actually parse xtc.lang.JavaType.Type. */
04896: private Result pType$1(final int yyStart) throws IOException {
04897: Result yyResult;
04898: int yyOption1;
04899: Node yyOpValue1;
04900: Node yyValue;
04901: ParseError yyError = ParseError.DUMMY;
04902:
04903: // Alternative <Type>.
04904:
04905: yyResult = pJavaType$TypeName(yyStart);
04906: yyError = yyResult.select(yyError);
04907: if (yyResult.hasValue()) {
04908: final Node v$g$1 = yyResult.semanticValue();
04909:
04910: yyOption1 = yyResult.index;
04911: yyOpValue1 = null;
04912:
04913: yyResult = pDimensions(yyOption1);
04914: yyError = yyResult.select(yyError);
04915: if (yyResult.hasValue()) {
04916: final Node v$el$1 = yyResult.semanticValue();
04917:
04918: yyOption1 = yyResult.index;
04919: yyOpValue1 = v$el$1;
04920: }
04921: { // Start scope for v$g$2.
04922: final Node v$g$2 = yyOpValue1;
04923:
04924: yyValue = GNode.create("Type", v$g$1, v$g$2);
04925: yyValue.setLocation(location(yyStart));
04926:
04927: return new SemanticValue(yyValue, yyOption1, yyError);
04928: } // End scope for v$g$2.
04929: }
04930:
04931: // Done.
04932: return yyError;
04933: }
04934:
04935: // =========================================================================
04936:
04937: /**
04938: * Parse nonterminal xtc.lang.JavaType.TypeName.
04939: *
04940: * @param yyStart The index.
04941: * @return The result.
04942: * @throws IOException Signals an I/O error.
04943: */
04944: private Result pJavaType$TypeName(final int yyStart)
04945: throws IOException {
04946: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
04947: if (null == yyColumn.chunk2)
04948: yyColumn.chunk2 = new Chunk2();
04949: if (null == yyColumn.chunk2.fJavaType$TypeName)
04950: yyColumn.chunk2.fJavaType$TypeName = pJavaType$TypeName$1(yyStart);
04951: return yyColumn.chunk2.fJavaType$TypeName;
04952: }
04953:
04954: /** Actually parse xtc.lang.JavaType.TypeName. */
04955: private Result pJavaType$TypeName$1(final int yyStart)
04956: throws IOException {
04957: Result yyResult;
04958: Node yyValue;
04959: ParseError yyError = ParseError.DUMMY;
04960:
04961: // Alternative <Basic>.
04962:
04963: yyResult = pPrimitiveType(yyStart);
04964: yyError = yyResult.select(yyError);
04965: if (yyResult.hasValue()) {
04966: yyValue = yyResult.semanticValue();
04967:
04968: return yyResult.createValue(yyValue, yyError);
04969: }
04970:
04971: // Alternative <Class>.
04972:
04973: yyResult = pQualifiedIdentifier(yyStart);
04974: yyError = yyResult.select(yyError);
04975: if (yyResult.hasValue()) {
04976: yyValue = yyResult.semanticValue();
04977:
04978: return yyResult.createValue(yyValue, yyError);
04979: }
04980:
04981: // Done.
04982: return yyError;
04983: }
04984:
04985: // =========================================================================
04986:
04987: /**
04988: * Parse nonterminal xtc.lang.JavaType.PrimitiveType.
04989: *
04990: * @param yyStart The index.
04991: * @return The result.
04992: * @throws IOException Signals an I/O error.
04993: */
04994: private Result pPrimitiveType(final int yyStart) throws IOException {
04995: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
04996: if (null == yyColumn.chunk2)
04997: yyColumn.chunk2 = new Chunk2();
04998: if (null == yyColumn.chunk2.fPrimitiveType)
04999: yyColumn.chunk2.fPrimitiveType = pPrimitiveType$1(yyStart);
05000: return yyColumn.chunk2.fPrimitiveType;
05001: }
05002:
05003: /** Actually parse xtc.lang.JavaType.PrimitiveType. */
05004: private Result pPrimitiveType$1(final int yyStart)
05005: throws IOException {
05006: Result yyResult;
05007: Node yyValue;
05008: ParseError yyError = ParseError.DUMMY;
05009:
05010: // Alternative <Byte>.
05011:
05012: yyResult = pJavaIdentifier$Word(yyStart);
05013: yyError = yyResult.select(yyError);
05014: if (yyResult.hasValue("byte")) {
05015: final String v$g$1 = "byte";
05016:
05017: yyValue = GNode.create("PrimitiveType", v$g$1);
05018: yyValue.setLocation(location(yyStart));
05019:
05020: return yyResult.createValue(yyValue, yyError);
05021: }
05022:
05023: // Alternative <Short>.
05024:
05025: yyResult = pJavaIdentifier$Word(yyStart);
05026: yyError = yyResult.select(yyError);
05027: if (yyResult.hasValue("short")) {
05028: final String v$g$2 = "short";
05029:
05030: yyValue = GNode.create("PrimitiveType", v$g$2);
05031: yyValue.setLocation(location(yyStart));
05032:
05033: return yyResult.createValue(yyValue, yyError);
05034: }
05035:
05036: // Alternative <Char>.
05037:
05038: yyResult = pJavaIdentifier$Word(yyStart);
05039: yyError = yyResult.select(yyError);
05040: if (yyResult.hasValue("char")) {
05041: final String v$g$3 = "char";
05042:
05043: yyValue = GNode.create("PrimitiveType", v$g$3);
05044: yyValue.setLocation(location(yyStart));
05045:
05046: return yyResult.createValue(yyValue, yyError);
05047: }
05048:
05049: // Alternative <Int>.
05050:
05051: yyResult = pJavaIdentifier$Word(yyStart);
05052: yyError = yyResult.select(yyError);
05053: if (yyResult.hasValue("int")) {
05054: final String v$g$4 = "int";
05055:
05056: yyValue = GNode.create("PrimitiveType", v$g$4);
05057: yyValue.setLocation(location(yyStart));
05058:
05059: return yyResult.createValue(yyValue, yyError);
05060: }
05061:
05062: // Alternative <Long>.
05063:
05064: yyResult = pJavaIdentifier$Word(yyStart);
05065: yyError = yyResult.select(yyError);
05066: if (yyResult.hasValue("long")) {
05067: final String v$g$5 = "long";
05068:
05069: yyValue = GNode.create("PrimitiveType", v$g$5);
05070: yyValue.setLocation(location(yyStart));
05071:
05072: return yyResult.createValue(yyValue, yyError);
05073: }
05074:
05075: // Alternative <Float>.
05076:
05077: yyResult = pJavaIdentifier$Word(yyStart);
05078: yyError = yyResult.select(yyError);
05079: if (yyResult.hasValue("float")) {
05080: final String v$g$6 = "float";
05081:
05082: yyValue = GNode.create("PrimitiveType", v$g$6);
05083: yyValue.setLocation(location(yyStart));
05084:
05085: return yyResult.createValue(yyValue, yyError);
05086: }
05087:
05088: // Alternative <Double>.
05089:
05090: yyResult = pJavaIdentifier$Word(yyStart);
05091: yyError = yyResult.select(yyError);
05092: if (yyResult.hasValue("double")) {
05093: final String v$g$7 = "double";
05094:
05095: yyValue = GNode.create("PrimitiveType", v$g$7);
05096: yyValue.setLocation(location(yyStart));
05097:
05098: return yyResult.createValue(yyValue, yyError);
05099: }
05100:
05101: // Alternative <Boolean>.
05102:
05103: yyResult = pJavaIdentifier$Word(yyStart);
05104: yyError = yyResult.select(yyError);
05105: if (yyResult.hasValue("boolean")) {
05106: final String v$g$8 = "boolean";
05107:
05108: yyValue = GNode.create("PrimitiveType", v$g$8);
05109: yyValue.setLocation(location(yyStart));
05110:
05111: return yyResult.createValue(yyValue, yyError);
05112: }
05113:
05114: // Done.
05115: yyError = yyError.select("primitive type expected", yyStart);
05116: return yyError;
05117: }
05118:
05119: // =========================================================================
05120:
05121: /**
05122: * Parse nonterminal xtc.lang.JavaType.Dimensions.
05123: *
05124: * @param yyStart The index.
05125: * @return The result.
05126: * @throws IOException Signals an I/O error.
05127: */
05128: private Result pDimensions(final int yyStart) throws IOException {
05129: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
05130: if (null == yyColumn.chunk2)
05131: yyColumn.chunk2 = new Chunk2();
05132: if (null == yyColumn.chunk2.fDimensions)
05133: yyColumn.chunk2.fDimensions = pDimensions$1(yyStart);
05134: return yyColumn.chunk2.fDimensions;
05135: }
05136:
05137: /** Actually parse xtc.lang.JavaType.Dimensions. */
05138: private Result pDimensions$1(final int yyStart) throws IOException {
05139: Result yyResult;
05140: Node yyValue;
05141: ParseError yyError = ParseError.DUMMY;
05142:
05143: // Alternative 1.
05144:
05145: yyResult = pDimensions$$Plus1(yyStart);
05146: yyError = yyResult.select(yyError);
05147: if (yyResult.hasValue()) {
05148: final Pair<String> v$g$1 = yyResult.semanticValue();
05149:
05150: yyValue = GNode.createFromPair("Dimensions", v$g$1);
05151: yyValue.setLocation(location(yyStart));
05152:
05153: return yyResult.createValue(yyValue, yyError);
05154: }
05155:
05156: // Done.
05157: return yyError;
05158: }
05159:
05160: // =========================================================================
05161:
05162: /**
05163: * Parse synthetic nonterminal xtc.lang.jeannie.Jeannie.Dimensions$$Plus1.
05164: *
05165: * @param yyStart The index.
05166: * @return The result.
05167: * @throws IOException Signals an I/O error.
05168: */
05169: private Result pDimensions$$Plus1(final int yyStart)
05170: throws IOException {
05171: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
05172: if (null == yyColumn.chunk2)
05173: yyColumn.chunk2 = new Chunk2();
05174: if (null == yyColumn.chunk2.fDimensions$$Plus1)
05175: yyColumn.chunk2.fDimensions$$Plus1 = pDimensions$$Plus1$1(yyStart);
05176: return yyColumn.chunk2.fDimensions$$Plus1;
05177: }
05178:
05179: /** Actually parse xtc.lang.jeannie.Jeannie.Dimensions$$Plus1. */
05180: private Result pDimensions$$Plus1$1(final int yyStart)
05181: throws IOException {
05182: Result yyResult;
05183: int yyBase;
05184: Pair<String> yyValue;
05185: ParseError yyError = ParseError.DUMMY;
05186:
05187: // Alternative 1.
05188:
05189: yyResult = pSymbol(yyStart);
05190: yyError = yyResult.select(yyError);
05191: if (yyResult.hasValue("[")) {
05192: final String v$el$1 = "[";
05193:
05194: yyBase = yyResult.index;
05195: yyResult = pSymbol(yyBase);
05196: yyError = yyResult.select(yyError);
05197: if (yyResult.hasValue("]")) {
05198:
05199: final int yyChoice1 = yyResult.index;
05200:
05201: // Nested alternative 1.
05202:
05203: yyResult = pDimensions$$Plus1(yyChoice1);
05204: yyError = yyResult.select(yyError);
05205: if (yyResult.hasValue()) {
05206: final Pair<String> v$2 = yyResult.semanticValue();
05207:
05208: yyValue = new Pair<String>(v$el$1, v$2);
05209:
05210: return yyResult.createValue(yyValue, yyError);
05211: }
05212:
05213: // Nested alternative 2.
05214:
05215: yyValue = new Pair<String>(v$el$1);
05216:
05217: return new SemanticValue(yyValue, yyChoice1, yyError);
05218: } else {
05219: yyError = yyError.select("\"]\" expected", yyBase);
05220: }
05221: }
05222:
05223: // Done.
05224: yyError = yyError.select("dimensions expected", yyStart);
05225: return yyError;
05226: }
05227:
05228: // =========================================================================
05229:
05230: /**
05231: * Parse nonterminal xtc.lang.JavaConstant.Literal.
05232: *
05233: * @param yyStart The index.
05234: * @return The result.
05235: * @throws IOException Signals an I/O error.
05236: */
05237: private Result pLiteral(final int yyStart) throws IOException {
05238: Result yyResult;
05239: Node yyValue;
05240: ParseError yyError = ParseError.DUMMY;
05241:
05242: // Alternative 1.
05243:
05244: yyResult = pFloatingPointLiteral(yyStart);
05245: yyError = yyResult.select(yyError);
05246: if (yyResult.hasValue()) {
05247: yyValue = yyResult.semanticValue();
05248:
05249: yyResult = pSpacing(yyResult.index);
05250: yyError = yyResult.select(yyError);
05251: if (yyResult.hasValue()) {
05252:
05253: return yyResult.createValue(yyValue, yyError);
05254: }
05255: }
05256:
05257: // Alternative 2.
05258:
05259: yyResult = pIntegerLiteral(yyStart);
05260: yyError = yyResult.select(yyError);
05261: if (yyResult.hasValue()) {
05262: yyValue = yyResult.semanticValue();
05263:
05264: yyResult = pSpacing(yyResult.index);
05265: yyError = yyResult.select(yyError);
05266: if (yyResult.hasValue()) {
05267:
05268: return yyResult.createValue(yyValue, yyError);
05269: }
05270: }
05271:
05272: // Alternative 3.
05273:
05274: yyResult = pJavaConstant$CharacterLiteral(yyStart);
05275: yyError = yyResult.select(yyError);
05276: if (yyResult.hasValue()) {
05277: yyValue = yyResult.semanticValue();
05278:
05279: yyResult = pSpacing(yyResult.index);
05280: yyError = yyResult.select(yyError);
05281: if (yyResult.hasValue()) {
05282:
05283: return yyResult.createValue(yyValue, yyError);
05284: }
05285: }
05286:
05287: // Alternative 4.
05288:
05289: yyResult = pJavaConstant$StringLiteral(yyStart);
05290: yyError = yyResult.select(yyError);
05291: if (yyResult.hasValue()) {
05292: yyValue = yyResult.semanticValue();
05293:
05294: yyResult = pSpacing(yyResult.index);
05295: yyError = yyResult.select(yyError);
05296: if (yyResult.hasValue()) {
05297:
05298: return yyResult.createValue(yyValue, yyError);
05299: }
05300: }
05301:
05302: // Alternative 5.
05303:
05304: yyResult = pJavaIdentifier$Word(yyStart);
05305: yyError = yyResult.select(yyError);
05306: if (yyResult.hasValue("true")) {
05307: final String v$g$1 = "true";
05308:
05309: yyValue = GNode.create("BooleanLiteral", v$g$1);
05310: yyValue.setLocation(location(yyStart));
05311:
05312: return yyResult.createValue(yyValue, yyError);
05313: }
05314:
05315: // Alternative 6.
05316:
05317: yyResult = pJavaIdentifier$Word(yyStart);
05318: yyError = yyResult.select(yyError);
05319: if (yyResult.hasValue("false")) {
05320: final String v$g$2 = "false";
05321:
05322: yyValue = GNode.create("BooleanLiteral", v$g$2);
05323: yyValue.setLocation(location(yyStart));
05324:
05325: return yyResult.createValue(yyValue, yyError);
05326: }
05327:
05328: // Alternative 7.
05329:
05330: yyResult = pJavaIdentifier$Word(yyStart);
05331: yyError = yyResult.select(yyError);
05332: if (yyResult.hasValue("null")) {
05333:
05334: yyValue = GNode.create("NullLiteral", false);
05335: yyValue.setLocation(location(yyStart));
05336:
05337: return yyResult.createValue(yyValue, yyError);
05338: }
05339:
05340: // Done.
05341: yyError = yyError.select("literal expected", yyStart);
05342: return yyError;
05343: }
05344:
05345: // =========================================================================
05346:
05347: /**
05348: * Parse nonterminal xtc.lang.JavaConstant.IntegerLiteral.
05349: *
05350: * @param yyStart The index.
05351: * @return The result.
05352: * @throws IOException Signals an I/O error.
05353: */
05354: private Result pIntegerLiteral(final int yyStart)
05355: throws IOException {
05356: Result yyResult;
05357: Node yyValue;
05358: ParseError yyError = ParseError.DUMMY;
05359:
05360: // Alternative <Hex>.
05361:
05362: yyResult = pHexLiteral(yyStart);
05363: yyError = yyResult.select(yyError);
05364: if (yyResult.hasValue()) {
05365: final String v$g$1 = yyResult.semanticValue();
05366:
05367: yyValue = GNode.create("IntegerLiteral", v$g$1);
05368: yyValue.setLocation(location(yyStart));
05369:
05370: return yyResult.createValue(yyValue, yyError);
05371: }
05372:
05373: // Alternative <Octal>.
05374:
05375: yyResult = pOctalLiteral(yyStart);
05376: yyError = yyResult.select(yyError);
05377: if (yyResult.hasValue()) {
05378: final String v$g$2 = yyResult.semanticValue();
05379:
05380: yyValue = GNode.create("IntegerLiteral", v$g$2);
05381: yyValue.setLocation(location(yyStart));
05382:
05383: return yyResult.createValue(yyValue, yyError);
05384: }
05385:
05386: // Alternative <Decimal>.
05387:
05388: yyResult = pDecimalLiteral(yyStart);
05389: yyError = yyResult.select(yyError);
05390: if (yyResult.hasValue()) {
05391: final String v$g$3 = yyResult.semanticValue();
05392:
05393: yyValue = GNode.create("IntegerLiteral", v$g$3);
05394: yyValue.setLocation(location(yyStart));
05395:
05396: return yyResult.createValue(yyValue, yyError);
05397: }
05398:
05399: // Done.
05400: return yyError;
05401: }
05402:
05403: // =========================================================================
05404:
05405: /**
05406: * Parse nonterminal xtc.lang.JavaConstant.HexLiteral.
05407: *
05408: * @param yyStart The index.
05409: * @return The result.
05410: * @throws IOException Signals an I/O error.
05411: */
05412: private Result pHexLiteral(final int yyStart) throws IOException {
05413: int yyC;
05414: int yyIndex;
05415: Result yyResult;
05416: int yyOption1;
05417: String yyValue;
05418: ParseError yyError = ParseError.DUMMY;
05419:
05420: // Alternative 1.
05421:
05422: yyResult = pHexNumeral(yyStart);
05423: yyError = yyResult.select(yyError);
05424: if (yyResult.hasValue()) {
05425:
05426: yyOption1 = yyResult.index;
05427:
05428: yyC = character(yyOption1);
05429: if (-1 != yyC) {
05430: yyIndex = yyOption1 + 1;
05431:
05432: switch (yyC) {
05433: case 'L':
05434: case 'l': {
05435: yyOption1 = yyIndex;
05436: }
05437:
05438: default:
05439: /* No match. */
05440: }
05441: }
05442:
05443: yyValue = difference(yyStart, yyOption1);
05444:
05445: return new SemanticValue(yyValue, yyOption1, yyError);
05446: }
05447:
05448: // Done.
05449: yyError = yyError.select("hex literal expected", yyStart);
05450: return yyError;
05451: }
05452:
05453: // =========================================================================
05454:
05455: /**
05456: * Parse nonterminal xtc.lang.JavaConstant.OctalLiteral.
05457: *
05458: * @param yyStart The index.
05459: * @return The result.
05460: * @throws IOException Signals an I/O error.
05461: */
05462: private Result pOctalLiteral(final int yyStart) throws IOException {
05463: int yyC;
05464: int yyIndex;
05465: Result yyResult;
05466: int yyOption1;
05467: String yyValue;
05468: ParseError yyError = ParseError.DUMMY;
05469:
05470: // Alternative 1.
05471:
05472: yyResult = pOctalNumeral(yyStart);
05473: yyError = yyResult.select(yyError);
05474: if (yyResult.hasValue()) {
05475:
05476: yyOption1 = yyResult.index;
05477:
05478: yyC = character(yyOption1);
05479: if (-1 != yyC) {
05480: yyIndex = yyOption1 + 1;
05481:
05482: switch (yyC) {
05483: case 'L':
05484: case 'l': {
05485: yyOption1 = yyIndex;
05486: }
05487:
05488: default:
05489: /* No match. */
05490: }
05491: }
05492:
05493: yyValue = difference(yyStart, yyOption1);
05494:
05495: return new SemanticValue(yyValue, yyOption1, yyError);
05496: }
05497:
05498: // Done.
05499: yyError = yyError.select("octal literal expected", yyStart);
05500: return yyError;
05501: }
05502:
05503: // =========================================================================
05504:
05505: /**
05506: * Parse nonterminal xtc.lang.JavaConstant.DecimalLiteral.
05507: *
05508: * @param yyStart The index.
05509: * @return The result.
05510: * @throws IOException Signals an I/O error.
05511: */
05512: private Result pDecimalLiteral(final int yyStart)
05513: throws IOException {
05514: int yyC;
05515: int yyIndex;
05516: Result yyResult;
05517: int yyOption1;
05518: String yyValue;
05519: ParseError yyError = ParseError.DUMMY;
05520:
05521: // Alternative 1.
05522:
05523: yyResult = pDecimalNumeral(yyStart);
05524: yyError = yyResult.select(yyError);
05525: if (yyResult.hasValue()) {
05526:
05527: yyOption1 = yyResult.index;
05528:
05529: yyC = character(yyOption1);
05530: if (-1 != yyC) {
05531: yyIndex = yyOption1 + 1;
05532:
05533: switch (yyC) {
05534: case 'L':
05535: case 'l': {
05536: yyOption1 = yyIndex;
05537: }
05538:
05539: default:
05540: /* No match. */
05541: }
05542: }
05543:
05544: yyValue = difference(yyStart, yyOption1);
05545:
05546: return new SemanticValue(yyValue, yyOption1, yyError);
05547: }
05548:
05549: // Done.
05550: yyError = yyError.select("decimal literal expected", yyStart);
05551: return yyError;
05552: }
05553:
05554: // =========================================================================
05555:
05556: /**
05557: * Parse nonterminal xtc.lang.JavaConstant.DecimalNumeral.
05558: *
05559: * @param yyStart The index.
05560: * @return The result.
05561: * @throws IOException Signals an I/O error.
05562: */
05563: private Result pDecimalNumeral(final int yyStart)
05564: throws IOException {
05565: int yyC;
05566: int yyIndex;
05567: int yyRepetition1;
05568: Void yyValue;
05569: ParseError yyError = ParseError.DUMMY;
05570:
05571: // Alternative 1.
05572:
05573: yyC = character(yyStart);
05574: if (-1 != yyC) {
05575: yyIndex = yyStart + 1;
05576:
05577: switch (yyC) {
05578: case '0': {
05579: yyValue = null;
05580:
05581: return new SemanticValue(yyValue, yyIndex, yyError);
05582: }
05583:
05584: case '1':
05585: case '2':
05586: case '3':
05587: case '4':
05588: case '5':
05589: case '6':
05590: case '7':
05591: case '8':
05592: case '9': {
05593: yyRepetition1 = yyIndex;
05594: while (true) {
05595:
05596: yyC = character(yyRepetition1);
05597: if (-1 != yyC) {
05598: yyIndex = yyRepetition1 + 1;
05599:
05600: switch (yyC) {
05601: case '0':
05602: case '1':
05603: case '2':
05604: case '3':
05605: case '4':
05606: case '5':
05607: case '6':
05608: case '7':
05609: case '8':
05610: case '9': {
05611: yyRepetition1 = yyIndex;
05612: continue;
05613: }
05614:
05615: default:
05616: /* No match. */
05617: }
05618: }
05619: break;
05620: }
05621:
05622: yyValue = null;
05623:
05624: return new SemanticValue(yyValue, yyRepetition1,
05625: yyError);
05626: }
05627:
05628: default:
05629: /* No match. */
05630: }
05631: }
05632:
05633: // Done.
05634: yyError = yyError.select("decimal numeral expected", yyStart);
05635: return yyError;
05636: }
05637:
05638: // =========================================================================
05639:
05640: /**
05641: * Parse nonterminal xtc.lang.JavaConstant.HexNumeral.
05642: *
05643: * @param yyStart The index.
05644: * @return The result.
05645: * @throws IOException Signals an I/O error.
05646: */
05647: private Result pHexNumeral(final int yyStart) throws IOException {
05648: int yyC;
05649: int yyIndex;
05650: int yyRepetition1;
05651: boolean yyRepeated1;
05652: Void yyValue;
05653: ParseError yyError = ParseError.DUMMY;
05654:
05655: // Alternative 1.
05656:
05657: yyC = character(yyStart);
05658: if ('0' == yyC) {
05659: yyIndex = yyStart + 1;
05660:
05661: yyC = character(yyIndex);
05662: if (-1 != yyC) {
05663: yyIndex = yyIndex + 1;
05664:
05665: switch (yyC) {
05666: case 'X':
05667: case 'x': {
05668: yyRepetition1 = yyIndex;
05669: yyRepeated1 = false;
05670: while (true) {
05671:
05672: yyC = character(yyRepetition1);
05673: if (-1 != yyC) {
05674: yyIndex = yyRepetition1 + 1;
05675:
05676: switch (yyC) {
05677: case '0':
05678: case '1':
05679: case '2':
05680: case '3':
05681: case '4':
05682: case '5':
05683: case '6':
05684: case '7':
05685: case '8':
05686: case '9':
05687: case 'A':
05688: case 'B':
05689: case 'C':
05690: case 'D':
05691: case 'E':
05692: case 'F':
05693: case 'a':
05694: case 'b':
05695: case 'c':
05696: case 'd':
05697: case 'e':
05698: case 'f': {
05699: yyRepetition1 = yyIndex;
05700: yyRepeated1 = true;
05701: continue;
05702: }
05703:
05704: default:
05705: /* No match. */
05706: }
05707: }
05708: break;
05709: }
05710:
05711: if (yyRepeated1) {
05712:
05713: yyValue = null;
05714:
05715: return new SemanticValue(yyValue,
05716: yyRepetition1, yyError);
05717: }
05718: }
05719: break;
05720:
05721: default:
05722: /* No match. */
05723: }
05724: }
05725: }
05726:
05727: // Done.
05728: yyError = yyError.select("hex numeral expected", yyStart);
05729: return yyError;
05730: }
05731:
05732: // =========================================================================
05733:
05734: /**
05735: * Parse nonterminal xtc.lang.JavaConstant.OctalNumeral.
05736: *
05737: * @param yyStart The index.
05738: * @return The result.
05739: * @throws IOException Signals an I/O error.
05740: */
05741: private Result pOctalNumeral(final int yyStart) throws IOException {
05742: int yyC;
05743: int yyIndex;
05744: int yyRepetition1;
05745: boolean yyRepeated1;
05746: Void yyValue;
05747: ParseError yyError = ParseError.DUMMY;
05748:
05749: // Alternative 1.
05750:
05751: yyC = character(yyStart);
05752: if ('0' == yyC) {
05753: yyIndex = yyStart + 1;
05754:
05755: yyRepetition1 = yyIndex;
05756: yyRepeated1 = false;
05757: while (true) {
05758:
05759: yyC = character(yyRepetition1);
05760: if (-1 != yyC) {
05761: yyIndex = yyRepetition1 + 1;
05762:
05763: switch (yyC) {
05764: case '0':
05765: case '1':
05766: case '2':
05767: case '3':
05768: case '4':
05769: case '5':
05770: case '6':
05771: case '7': {
05772: yyRepetition1 = yyIndex;
05773: yyRepeated1 = true;
05774: continue;
05775: }
05776:
05777: default:
05778: /* No match. */
05779: }
05780: }
05781: break;
05782: }
05783:
05784: if (yyRepeated1) {
05785:
05786: yyValue = null;
05787:
05788: return new SemanticValue(yyValue, yyRepetition1,
05789: yyError);
05790: }
05791: }
05792:
05793: // Done.
05794: yyError = yyError.select("octal numeral expected", yyStart);
05795: return yyError;
05796: }
05797:
05798: // =========================================================================
05799:
05800: /**
05801: * Parse nonterminal xtc.lang.JavaConstant.FloatingPointLiteral.
05802: *
05803: * @param yyStart The index.
05804: * @return The result.
05805: * @throws IOException Signals an I/O error.
05806: */
05807: private Result pFloatingPointLiteral(final int yyStart)
05808: throws IOException {
05809: Result yyResult;
05810: Node yyValue;
05811: ParseError yyError = ParseError.DUMMY;
05812:
05813: // Alternative 1.
05814:
05815: yyResult = pFloatingPointString(yyStart);
05816: yyError = yyResult.select(yyError);
05817: if (yyResult.hasValue()) {
05818: final String v$g$1 = yyResult.semanticValue();
05819:
05820: yyValue = GNode.create("FloatingPointLiteral", v$g$1);
05821: yyValue.setLocation(location(yyStart));
05822:
05823: return yyResult.createValue(yyValue, yyError);
05824: }
05825:
05826: // Done.
05827: return yyError;
05828: }
05829:
05830: // =========================================================================
05831:
05832: /**
05833: * Parse nonterminal xtc.lang.JavaConstant.FloatingPointString.
05834: *
05835: * @param yyStart The index.
05836: * @return The result.
05837: * @throws IOException Signals an I/O error.
05838: */
05839: private Result pFloatingPointString(final int yyStart)
05840: throws IOException {
05841: int yyC;
05842: int yyIndex;
05843: Result yyResult;
05844: int yyRepetition1;
05845: boolean yyRepeated1;
05846: int yyOption1;
05847: String yyValue;
05848: ParseError yyError = ParseError.DUMMY;
05849:
05850: // Alternative 1.
05851:
05852: yyRepetition1 = yyStart;
05853: yyRepeated1 = false;
05854: while (true) {
05855:
05856: yyC = character(yyRepetition1);
05857: if (-1 != yyC) {
05858: yyIndex = yyRepetition1 + 1;
05859:
05860: switch (yyC) {
05861: case '0':
05862: case '1':
05863: case '2':
05864: case '3':
05865: case '4':
05866: case '5':
05867: case '6':
05868: case '7':
05869: case '8':
05870: case '9': {
05871: yyRepetition1 = yyIndex;
05872: yyRepeated1 = true;
05873: continue;
05874: }
05875:
05876: default:
05877: /* No match. */
05878: }
05879: }
05880: break;
05881: }
05882:
05883: if (yyRepeated1) {
05884:
05885: yyC = character(yyRepetition1);
05886: if ('.' == yyC) {
05887: yyIndex = yyRepetition1 + 1;
05888:
05889: yyRepetition1 = yyIndex;
05890: while (true) {
05891:
05892: yyC = character(yyRepetition1);
05893: if (-1 != yyC) {
05894: yyIndex = yyRepetition1 + 1;
05895:
05896: switch (yyC) {
05897: case '0':
05898: case '1':
05899: case '2':
05900: case '3':
05901: case '4':
05902: case '5':
05903: case '6':
05904: case '7':
05905: case '8':
05906: case '9': {
05907: yyRepetition1 = yyIndex;
05908: continue;
05909: }
05910:
05911: default:
05912: /* No match. */
05913: }
05914: }
05915: break;
05916: }
05917:
05918: yyOption1 = yyRepetition1;
05919:
05920: yyResult = pJavaConstant$Exponent(yyOption1);
05921: yyError = yyResult.select(yyError);
05922: if (yyResult.hasValue()) {
05923:
05924: yyOption1 = yyResult.index;
05925: }
05926:
05927: yyC = character(yyOption1);
05928: if (-1 != yyC) {
05929: yyIndex = yyOption1 + 1;
05930:
05931: switch (yyC) {
05932: case 'D':
05933: case 'F':
05934: case 'd':
05935: case 'f': {
05936: yyOption1 = yyIndex;
05937: }
05938:
05939: default:
05940: /* No match. */
05941: }
05942: }
05943:
05944: yyValue = difference(yyStart, yyOption1);
05945:
05946: return new SemanticValue(yyValue, yyOption1, yyError);
05947: }
05948: }
05949:
05950: // Alternative 2.
05951:
05952: yyC = character(yyStart);
05953: if ('.' == yyC) {
05954: yyIndex = yyStart + 1;
05955:
05956: yyRepetition1 = yyIndex;
05957: yyRepeated1 = false;
05958: while (true) {
05959:
05960: yyC = character(yyRepetition1);
05961: if (-1 != yyC) {
05962: yyIndex = yyRepetition1 + 1;
05963:
05964: switch (yyC) {
05965: case '0':
05966: case '1':
05967: case '2':
05968: case '3':
05969: case '4':
05970: case '5':
05971: case '6':
05972: case '7':
05973: case '8':
05974: case '9': {
05975: yyRepetition1 = yyIndex;
05976: yyRepeated1 = true;
05977: continue;
05978: }
05979:
05980: default:
05981: /* No match. */
05982: }
05983: }
05984: break;
05985: }
05986:
05987: if (yyRepeated1) {
05988:
05989: yyOption1 = yyRepetition1;
05990:
05991: yyResult = pJavaConstant$Exponent(yyOption1);
05992: yyError = yyResult.select(yyError);
05993: if (yyResult.hasValue()) {
05994:
05995: yyOption1 = yyResult.index;
05996: }
05997:
05998: yyC = character(yyOption1);
05999: if (-1 != yyC) {
06000: yyIndex = yyOption1 + 1;
06001:
06002: switch (yyC) {
06003: case 'D':
06004: case 'F':
06005: case 'd':
06006: case 'f': {
06007: yyOption1 = yyIndex;
06008: }
06009:
06010: default:
06011: /* No match. */
06012: }
06013: }
06014:
06015: yyValue = difference(yyStart, yyOption1);
06016:
06017: return new SemanticValue(yyValue, yyOption1, yyError);
06018: }
06019: }
06020:
06021: // Alternative 3.
06022:
06023: yyRepetition1 = yyStart;
06024: yyRepeated1 = false;
06025: while (true) {
06026:
06027: yyC = character(yyRepetition1);
06028: if (-1 != yyC) {
06029: yyIndex = yyRepetition1 + 1;
06030:
06031: switch (yyC) {
06032: case '0':
06033: case '1':
06034: case '2':
06035: case '3':
06036: case '4':
06037: case '5':
06038: case '6':
06039: case '7':
06040: case '8':
06041: case '9': {
06042: yyRepetition1 = yyIndex;
06043: yyRepeated1 = true;
06044: continue;
06045: }
06046:
06047: default:
06048: /* No match. */
06049: }
06050: }
06051: break;
06052: }
06053:
06054: if (yyRepeated1) {
06055:
06056: final int yyChoice1 = yyRepetition1;
06057:
06058: // Nested alternative 1.
06059:
06060: yyResult = pJavaConstant$Exponent(yyChoice1);
06061: yyError = yyResult.select(yyError);
06062: if (yyResult.hasValue()) {
06063:
06064: yyOption1 = yyResult.index;
06065:
06066: yyC = character(yyOption1);
06067: if (-1 != yyC) {
06068: yyIndex = yyOption1 + 1;
06069:
06070: switch (yyC) {
06071: case 'D':
06072: case 'F':
06073: case 'd':
06074: case 'f': {
06075: yyOption1 = yyIndex;
06076: }
06077:
06078: default:
06079: /* No match. */
06080: }
06081: }
06082:
06083: yyValue = difference(yyStart, yyOption1);
06084:
06085: return new SemanticValue(yyValue, yyOption1, yyError);
06086: }
06087:
06088: // Nested alternative 2.
06089:
06090: yyOption1 = yyChoice1;
06091:
06092: yyResult = pJavaConstant$Exponent(yyOption1);
06093: yyError = yyResult.select(yyError);
06094: if (yyResult.hasValue()) {
06095:
06096: yyOption1 = yyResult.index;
06097: }
06098:
06099: yyC = character(yyOption1);
06100: if (-1 != yyC) {
06101: yyIndex = yyOption1 + 1;
06102:
06103: switch (yyC) {
06104: case 'D':
06105: case 'F':
06106: case 'd':
06107: case 'f': {
06108: yyValue = difference(yyStart, yyIndex);
06109:
06110: return new SemanticValue(yyValue, yyIndex, yyError);
06111: }
06112:
06113: default:
06114: /* No match. */
06115: }
06116: }
06117: }
06118:
06119: // Done.
06120: yyError = yyError.select("floating point string expected",
06121: yyStart);
06122: return yyError;
06123: }
06124:
06125: // =========================================================================
06126:
06127: /**
06128: * Parse nonterminal xtc.lang.JavaConstant.Exponent.
06129: *
06130: * @param yyStart The index.
06131: * @return The result.
06132: * @throws IOException Signals an I/O error.
06133: */
06134: private Result pJavaConstant$Exponent(final int yyStart)
06135: throws IOException {
06136:
06137: int yyC;
06138: int yyIndex;
06139: int yyRepetition1;
06140: boolean yyRepeated1;
06141: int yyOption1;
06142: Void yyValue;
06143: ParseError yyError = ParseError.DUMMY;
06144:
06145: // Alternative 1.
06146:
06147: yyC = character(yyStart);
06148: if (-1 != yyC) {
06149: yyIndex = yyStart + 1;
06150:
06151: switch (yyC) {
06152: case 'E':
06153: case 'e': {
06154: yyOption1 = yyIndex;
06155:
06156: yyC = character(yyOption1);
06157: if (-1 != yyC) {
06158: yyIndex = yyOption1 + 1;
06159:
06160: switch (yyC) {
06161: case '+':
06162: case '-': {
06163: yyOption1 = yyIndex;
06164: }
06165:
06166: default:
06167: /* No match. */
06168: }
06169: }
06170:
06171: yyRepetition1 = yyOption1;
06172: yyRepeated1 = false;
06173: while (true) {
06174:
06175: yyC = character(yyRepetition1);
06176: if (-1 != yyC) {
06177: yyIndex = yyRepetition1 + 1;
06178:
06179: switch (yyC) {
06180: case '0':
06181: case '1':
06182: case '2':
06183: case '3':
06184: case '4':
06185: case '5':
06186: case '6':
06187: case '7':
06188: case '8':
06189: case '9': {
06190: yyRepetition1 = yyIndex;
06191: yyRepeated1 = true;
06192: continue;
06193: }
06194:
06195: default:
06196: /* No match. */
06197: }
06198: }
06199: break;
06200: }
06201:
06202: if (yyRepeated1) {
06203:
06204: yyValue = null;
06205:
06206: return new SemanticValue(yyValue, yyRepetition1,
06207: yyError);
06208: }
06209: }
06210: break;
06211:
06212: default:
06213: /* No match. */
06214: }
06215: }
06216:
06217: // Done.
06218: yyError = yyError.select("exponent expected", yyStart);
06219: return yyError;
06220: }
06221:
06222: // =========================================================================
06223:
06224: /**
06225: * Parse nonterminal xtc.lang.JavaConstant.CharacterLiteral.
06226: *
06227: * @param yyStart The index.
06228: * @return The result.
06229: * @throws IOException Signals an I/O error.
06230: */
06231: private Result pJavaConstant$CharacterLiteral(final int yyStart)
06232: throws IOException {
06233:
06234: Result yyResult;
06235: Node yyValue;
06236: ParseError yyError = ParseError.DUMMY;
06237:
06238: // Alternative 1.
06239:
06240: yyResult = pJavaConstant$CharacterConstant(yyStart);
06241: yyError = yyResult.select(yyError);
06242: if (yyResult.hasValue()) {
06243: final String v$g$1 = yyResult.semanticValue();
06244:
06245: yyValue = GNode.create("CharacterLiteral", v$g$1);
06246: yyValue.setLocation(location(yyStart));
06247:
06248: return yyResult.createValue(yyValue, yyError);
06249: }
06250:
06251: // Done.
06252: return yyError;
06253: }
06254:
06255: // =========================================================================
06256:
06257: /**
06258: * Parse nonterminal xtc.lang.JavaConstant.StringLiteral.
06259: *
06260: * @param yyStart The index.
06261: * @return The result.
06262: * @throws IOException Signals an I/O error.
06263: */
06264: private Result pJavaConstant$StringLiteral(final int yyStart)
06265: throws IOException {
06266:
06267: Result yyResult;
06268: Node yyValue;
06269: ParseError yyError = ParseError.DUMMY;
06270:
06271: // Alternative 1.
06272:
06273: yyResult = pJavaConstant$StringConstant(yyStart);
06274: yyError = yyResult.select(yyError);
06275: if (yyResult.hasValue()) {
06276: final String v$g$1 = yyResult.semanticValue();
06277:
06278: yyValue = GNode.create("StringLiteral", v$g$1);
06279: yyValue.setLocation(location(yyStart));
06280:
06281: return yyResult.createValue(yyValue, yyError);
06282: }
06283:
06284: // Done.
06285: return yyError;
06286: }
06287:
06288: // =========================================================================
06289:
06290: /**
06291: * Parse nonterminal xtc.lang.JavaConstant.CharacterConstant.
06292: *
06293: * @param yyStart The index.
06294: * @return The result.
06295: * @throws IOException Signals an I/O error.
06296: */
06297: private Result pJavaConstant$CharacterConstant(final int yyStart)
06298: throws IOException {
06299:
06300: int yyC;
06301: int yyIndex;
06302: Result yyResult;
06303: String yyValue;
06304: ParseError yyError = ParseError.DUMMY;
06305:
06306: // Alternative 1.
06307:
06308: yyC = character(yyStart);
06309: if ('\'' == yyC) {
06310: yyIndex = yyStart + 1;
06311:
06312: yyResult = pJavaConstant$CharacterConstant$$Choice1(yyIndex);
06313: yyError = yyResult.select(yyError);
06314: if (yyResult.hasValue()) {
06315:
06316: yyC = character(yyResult.index);
06317: if ('\'' == yyC) {
06318: yyIndex = yyResult.index + 1;
06319:
06320: yyValue = difference(yyStart, yyIndex);
06321:
06322: return new SemanticValue(yyValue, yyIndex, yyError);
06323: }
06324: }
06325: }
06326:
06327: // Done.
06328: yyError = yyError
06329: .select("character constant expected", yyStart);
06330: return yyError;
06331: }
06332:
06333: // =========================================================================
06334:
06335: /**
06336: * Parse synthetic nonterminal JavaConstant.CharacterConstant$$Choice1.
06337: *
06338: * @param yyStart The index.
06339: * @return The result.
06340: * @throws IOException Signals an I/O error.
06341: */
06342: private Result pJavaConstant$CharacterConstant$$Choice1(
06343: final int yyStart) throws IOException {
06344:
06345: int yyC;
06346: int yyIndex;
06347: Void yyValue;
06348: ParseError yyError = ParseError.DUMMY;
06349:
06350: // Alternative 1.
06351:
06352: yyC = character(yyStart);
06353: if (-1 != yyC) {
06354: yyIndex = yyStart + 1;
06355:
06356: switch (yyC) {
06357: case '\\': {
06358: final int yyChoice1 = yyIndex;
06359:
06360: // Nested alternative 1.
06361:
06362: yyC = character(yyChoice1);
06363: if (-1 != yyC) {
06364: yyIndex = yyChoice1 + 1;
06365:
06366: switch (yyC) {
06367: case '\"':
06368: case '\'':
06369: case '\\':
06370: case 'b':
06371: case 'f':
06372: case 'n':
06373: case 'r':
06374: case 't': {
06375: yyValue = null;
06376:
06377: return new SemanticValue(yyValue, yyIndex,
06378: yyError);
06379: }
06380:
06381: case 'u': {
06382: yyC = character(yyIndex);
06383: if (-1 != yyC) {
06384: yyIndex = yyIndex + 1;
06385:
06386: switch (yyC) {
06387: case '0':
06388: case '1':
06389: case '2':
06390: case '3':
06391: case '4':
06392: case '5':
06393: case '6':
06394: case '7':
06395: case '8':
06396: case '9':
06397: case 'A':
06398: case 'B':
06399: case 'C':
06400: case 'D':
06401: case 'E':
06402: case 'F':
06403: case 'a':
06404: case 'b':
06405: case 'c':
06406: case 'd':
06407: case 'e':
06408: case 'f': {
06409: yyC = character(yyIndex);
06410: if (-1 != yyC) {
06411: yyIndex = yyIndex + 1;
06412:
06413: switch (yyC) {
06414: case '0':
06415: case '1':
06416: case '2':
06417: case '3':
06418: case '4':
06419: case '5':
06420: case '6':
06421: case '7':
06422: case '8':
06423: case '9':
06424: case 'A':
06425: case 'B':
06426: case 'C':
06427: case 'D':
06428: case 'E':
06429: case 'F':
06430: case 'a':
06431: case 'b':
06432: case 'c':
06433: case 'd':
06434: case 'e':
06435: case 'f': {
06436: yyC = character(yyIndex);
06437: if (-1 != yyC) {
06438: yyIndex = yyIndex + 1;
06439:
06440: switch (yyC) {
06441: case '0':
06442: case '1':
06443: case '2':
06444: case '3':
06445: case '4':
06446: case '5':
06447: case '6':
06448: case '7':
06449: case '8':
06450: case '9':
06451: case 'A':
06452: case 'B':
06453: case 'C':
06454: case 'D':
06455: case 'E':
06456: case 'F':
06457: case 'a':
06458: case 'b':
06459: case 'c':
06460: case 'd':
06461: case 'e':
06462: case 'f': {
06463: yyC = character(yyIndex);
06464: if (-1 != yyC) {
06465: yyIndex = yyIndex + 1;
06466:
06467: switch (yyC) {
06468: case '0':
06469: case '1':
06470: case '2':
06471: case '3':
06472: case '4':
06473: case '5':
06474: case '6':
06475: case '7':
06476: case '8':
06477: case '9':
06478: case 'A':
06479: case 'B':
06480: case 'C':
06481: case 'D':
06482: case 'E':
06483: case 'F':
06484: case 'a':
06485: case 'b':
06486: case 'c':
06487: case 'd':
06488: case 'e':
06489: case 'f': {
06490: yyValue = null;
06491:
06492: return new SemanticValue(
06493: yyValue,
06494: yyIndex,
06495: yyError);
06496: }
06497:
06498: default:
06499: /* No match. */
06500: }
06501: }
06502: }
06503: break;
06504:
06505: default:
06506: /* No match. */
06507: }
06508: }
06509: }
06510: break;
06511:
06512: default:
06513: /* No match. */
06514: }
06515: }
06516: }
06517: break;
06518:
06519: default:
06520: /* No match. */
06521: }
06522: }
06523: }
06524: break;
06525:
06526: default:
06527: /* No match. */
06528: }
06529: }
06530:
06531: // Nested alternative 2.
06532: { // Start scope for nested choice.
06533:
06534: final int yyChoice2 = yyChoice1;
06535:
06536: // Nested alternative 1.
06537:
06538: yyC = character(yyChoice2);
06539: if (-1 != yyC) {
06540: yyIndex = yyChoice2 + 1;
06541:
06542: switch (yyC) {
06543: case '0':
06544: case '1':
06545: case '2':
06546: case '3': {
06547: yyC = character(yyIndex);
06548: if (-1 != yyC) {
06549: yyIndex = yyIndex + 1;
06550:
06551: switch (yyC) {
06552: case '0':
06553: case '1':
06554: case '2':
06555: case '3':
06556: case '4':
06557: case '5':
06558: case '6':
06559: case '7': {
06560: yyC = character(yyIndex);
06561: if (-1 != yyC) {
06562: yyIndex = yyIndex + 1;
06563:
06564: switch (yyC) {
06565: case '0':
06566: case '1':
06567: case '2':
06568: case '3':
06569: case '4':
06570: case '5':
06571: case '6':
06572: case '7': {
06573: yyValue = null;
06574:
06575: return new SemanticValue(
06576: yyValue, yyIndex,
06577: yyError);
06578: }
06579:
06580: default:
06581: /* No match. */
06582: }
06583: }
06584: }
06585: break;
06586:
06587: default:
06588: /* No match. */
06589: }
06590: }
06591: }
06592: break;
06593:
06594: default:
06595: /* No match. */
06596: }
06597: }
06598:
06599: // Nested alternative 2.
06600:
06601: yyC = character(yyChoice2);
06602: if (-1 != yyC) {
06603: yyIndex = yyChoice2 + 1;
06604:
06605: switch (yyC) {
06606: case '0':
06607: case '1':
06608: case '2':
06609: case '3':
06610: case '4':
06611: case '5':
06612: case '6':
06613: case '7': {
06614: final int yyChoice3 = yyIndex;
06615:
06616: // Nested alternative 1.
06617:
06618: yyC = character(yyChoice3);
06619: if (-1 != yyC) {
06620: yyIndex = yyChoice3 + 1;
06621:
06622: switch (yyC) {
06623: case '0':
06624: case '1':
06625: case '2':
06626: case '3':
06627: case '4':
06628: case '5':
06629: case '6':
06630: case '7': {
06631: yyValue = null;
06632:
06633: return new SemanticValue(yyValue,
06634: yyIndex, yyError);
06635: }
06636:
06637: default:
06638: /* No match. */
06639: }
06640: }
06641:
06642: // Nested alternative 2.
06643:
06644: yyValue = null;
06645:
06646: return new SemanticValue(yyValue,
06647: yyChoice3, yyError);
06648: }
06649:
06650: default:
06651: /* No match. */
06652: }
06653: }
06654: } // End scope for nested choice.
06655: }
06656: break;
06657:
06658: default:
06659: /* No match. */
06660: }
06661: }
06662:
06663: // Alternative 2.
06664:
06665: yyC = character(yyStart);
06666: if (-1 != yyC) {
06667: yyIndex = yyStart + 1;
06668:
06669: switch (yyC) {
06670: case '\'':
06671: case '\\':
06672: /* No match. */
06673: break;
06674:
06675: default: {
06676: yyValue = null;
06677:
06678: return new SemanticValue(yyValue, yyIndex, yyError);
06679: }
06680: }
06681: }
06682:
06683: // Done.
06684: yyError = yyError
06685: .select("character constant expected", yyStart);
06686: return yyError;
06687: }
06688:
06689: // =========================================================================
06690:
06691: /**
06692: * Parse nonterminal xtc.lang.JavaConstant.StringConstant.
06693: *
06694: * @param yyStart The index.
06695: * @return The result.
06696: * @throws IOException Signals an I/O error.
06697: */
06698: private Result pJavaConstant$StringConstant(final int yyStart)
06699: throws IOException {
06700:
06701: int yyC;
06702: int yyIndex;
06703: int yyRepetition1;
06704: String yyValue;
06705: ParseError yyError = ParseError.DUMMY;
06706:
06707: // Alternative 1.
06708:
06709: yyC = character(yyStart);
06710: if ('\"' == yyC) {
06711: yyIndex = yyStart + 1;
06712:
06713: yyRepetition1 = yyIndex;
06714: while (true) {
06715:
06716: final int yyChoice1 = yyRepetition1;
06717:
06718: // Nested alternative 1.
06719:
06720: yyC = character(yyChoice1);
06721: if (-1 != yyC) {
06722: yyIndex = yyChoice1 + 1;
06723:
06724: switch (yyC) {
06725: case '\\': {
06726: final int yyChoice2 = yyIndex;
06727:
06728: // Nested alternative 1.
06729:
06730: yyC = character(yyChoice2);
06731: if (-1 != yyC) {
06732: yyIndex = yyChoice2 + 1;
06733:
06734: switch (yyC) {
06735: case '\"':
06736: case '\'':
06737: case '\\':
06738: case 'b':
06739: case 'f':
06740: case 'n':
06741: case 'r':
06742: case 't': {
06743: yyRepetition1 = yyIndex;
06744: continue;
06745: }
06746:
06747: case 'u': {
06748: yyC = character(yyIndex);
06749: if (-1 != yyC) {
06750: yyIndex = yyIndex + 1;
06751:
06752: switch (yyC) {
06753: case '0':
06754: case '1':
06755: case '2':
06756: case '3':
06757: case '4':
06758: case '5':
06759: case '6':
06760: case '7':
06761: case '8':
06762: case '9':
06763: case 'A':
06764: case 'B':
06765: case 'C':
06766: case 'D':
06767: case 'E':
06768: case 'F':
06769: case 'a':
06770: case 'b':
06771: case 'c':
06772: case 'd':
06773: case 'e':
06774: case 'f': {
06775: yyC = character(yyIndex);
06776: if (-1 != yyC) {
06777: yyIndex = yyIndex + 1;
06778:
06779: switch (yyC) {
06780: case '0':
06781: case '1':
06782: case '2':
06783: case '3':
06784: case '4':
06785: case '5':
06786: case '6':
06787: case '7':
06788: case '8':
06789: case '9':
06790: case 'A':
06791: case 'B':
06792: case 'C':
06793: case 'D':
06794: case 'E':
06795: case 'F':
06796: case 'a':
06797: case 'b':
06798: case 'c':
06799: case 'd':
06800: case 'e':
06801: case 'f': {
06802: yyC = character(yyIndex);
06803: if (-1 != yyC) {
06804: yyIndex = yyIndex + 1;
06805:
06806: switch (yyC) {
06807: case '0':
06808: case '1':
06809: case '2':
06810: case '3':
06811: case '4':
06812: case '5':
06813: case '6':
06814: case '7':
06815: case '8':
06816: case '9':
06817: case 'A':
06818: case 'B':
06819: case 'C':
06820: case 'D':
06821: case 'E':
06822: case 'F':
06823: case 'a':
06824: case 'b':
06825: case 'c':
06826: case 'd':
06827: case 'e':
06828: case 'f': {
06829: yyC = character(yyIndex);
06830: if (-1 != yyC) {
06831: yyIndex = yyIndex + 1;
06832:
06833: switch (yyC) {
06834: case '0':
06835: case '1':
06836: case '2':
06837: case '3':
06838: case '4':
06839: case '5':
06840: case '6':
06841: case '7':
06842: case '8':
06843: case '9':
06844: case 'A':
06845: case 'B':
06846: case 'C':
06847: case 'D':
06848: case 'E':
06849: case 'F':
06850: case 'a':
06851: case 'b':
06852: case 'c':
06853: case 'd':
06854: case 'e':
06855: case 'f': {
06856: yyRepetition1 = yyIndex;
06857: continue;
06858: }
06859:
06860: default:
06861: /* No match. */
06862: }
06863: }
06864: }
06865: break;
06866:
06867: default:
06868: /* No match. */
06869: }
06870: }
06871: }
06872: break;
06873:
06874: default:
06875: /* No match. */
06876: }
06877: }
06878: }
06879: break;
06880:
06881: default:
06882: /* No match. */
06883: }
06884: }
06885: }
06886: break;
06887:
06888: default:
06889: /* No match. */
06890: }
06891: }
06892:
06893: // Nested alternative 2.
06894: { // Start scope for nested choice.
06895:
06896: final int yyChoice3 = yyChoice2;
06897:
06898: // Nested alternative 1.
06899:
06900: yyC = character(yyChoice3);
06901: if (-1 != yyC) {
06902: yyIndex = yyChoice3 + 1;
06903:
06904: switch (yyC) {
06905: case '0':
06906: case '1':
06907: case '2':
06908: case '3': {
06909: yyC = character(yyIndex);
06910: if (-1 != yyC) {
06911: yyIndex = yyIndex + 1;
06912:
06913: switch (yyC) {
06914: case '0':
06915: case '1':
06916: case '2':
06917: case '3':
06918: case '4':
06919: case '5':
06920: case '6':
06921: case '7': {
06922: yyC = character(yyIndex);
06923: if (-1 != yyC) {
06924: yyIndex = yyIndex + 1;
06925:
06926: switch (yyC) {
06927: case '0':
06928: case '1':
06929: case '2':
06930: case '3':
06931: case '4':
06932: case '5':
06933: case '6':
06934: case '7': {
06935: yyRepetition1 = yyIndex;
06936: continue;
06937: }
06938:
06939: default:
06940: /* No match. */
06941: }
06942: }
06943: }
06944: break;
06945:
06946: default:
06947: /* No match. */
06948: }
06949: }
06950: }
06951: break;
06952:
06953: default:
06954: /* No match. */
06955: }
06956: }
06957:
06958: // Nested alternative 2.
06959:
06960: yyC = character(yyChoice3);
06961: if (-1 != yyC) {
06962: yyIndex = yyChoice3 + 1;
06963:
06964: switch (yyC) {
06965: case '0':
06966: case '1':
06967: case '2':
06968: case '3':
06969: case '4':
06970: case '5':
06971: case '6':
06972: case '7': {
06973: final int yyChoice4 = yyIndex;
06974:
06975: // Nested alternative 1.
06976:
06977: yyC = character(yyChoice4);
06978: if (-1 != yyC) {
06979: yyIndex = yyChoice4 + 1;
06980:
06981: switch (yyC) {
06982: case '0':
06983: case '1':
06984: case '2':
06985: case '3':
06986: case '4':
06987: case '5':
06988: case '6':
06989: case '7': {
06990: yyRepetition1 = yyIndex;
06991: continue;
06992: }
06993:
06994: default:
06995: /* No match. */
06996: }
06997: }
06998:
06999: // Nested alternative 2.
07000:
07001: yyRepetition1 = yyChoice4;
07002: continue;
07003: }
07004:
07005: default:
07006: /* No match. */
07007: }
07008: }
07009: } // End scope for nested choice.
07010: }
07011: break;
07012:
07013: default:
07014: /* No match. */
07015: }
07016: }
07017:
07018: // Nested alternative 2.
07019:
07020: yyC = character(yyChoice1);
07021: if (-1 != yyC) {
07022: yyIndex = yyChoice1 + 1;
07023:
07024: switch (yyC) {
07025: case '\"':
07026: case '\\':
07027: /* No match. */
07028: break;
07029:
07030: default: {
07031: yyRepetition1 = yyIndex;
07032: continue;
07033: }
07034: }
07035: }
07036: break;
07037: }
07038:
07039: yyC = character(yyRepetition1);
07040: if ('\"' == yyC) {
07041: yyIndex = yyRepetition1 + 1;
07042:
07043: yyValue = difference(yyStart, yyIndex);
07044:
07045: return new SemanticValue(yyValue, yyIndex, yyError);
07046: }
07047: }
07048:
07049: // Done.
07050: yyError = yyError.select("string constant expected", yyStart);
07051: return yyError;
07052: }
07053:
07054: // =========================================================================
07055:
07056: /**
07057: * Parse nonterminal xtc.lang.JavaIdentifier.QualifiedIdentifier.
07058: *
07059: * @param yyStart The index.
07060: * @return The result.
07061: * @throws IOException Signals an I/O error.
07062: */
07063: private Result pQualifiedIdentifier(final int yyStart)
07064: throws IOException {
07065: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
07066: if (null == yyColumn.chunk2)
07067: yyColumn.chunk2 = new Chunk2();
07068: if (null == yyColumn.chunk2.fQualifiedIdentifier)
07069: yyColumn.chunk2.fQualifiedIdentifier = pQualifiedIdentifier$1(yyStart);
07070: return yyColumn.chunk2.fQualifiedIdentifier;
07071: }
07072:
07073: /** Actually parse xtc.lang.JavaIdentifier.QualifiedIdentifier. */
07074: private Result pQualifiedIdentifier$1(final int yyStart)
07075: throws IOException {
07076:
07077: Result yyResult;
07078: Node yyValue;
07079: ParseError yyError = ParseError.DUMMY;
07080:
07081: // Alternative 1.
07082:
07083: yyResult = pJavaIdentifier$Identifier(yyStart);
07084: yyError = yyResult.select(yyError);
07085: if (yyResult.hasValue()) {
07086: final String v$g$1 = yyResult.semanticValue();
07087:
07088: yyResult = pQualifiedIdentifier$$Star1(yyResult.index);
07089: yyError = yyResult.select(yyError);
07090: if (yyResult.hasValue()) {
07091: final Pair<String> v$g$2 = yyResult.semanticValue();
07092:
07093: yyValue = GNode.createFromPair("QualifiedIdentifier",
07094: v$g$1, v$g$2);
07095: yyValue.setLocation(location(yyStart));
07096:
07097: return yyResult.createValue(yyValue, yyError);
07098: }
07099: }
07100:
07101: // Done.
07102: return yyError;
07103: }
07104:
07105: // =========================================================================
07106:
07107: /**
07108: * Parse synthetic nonterminal
07109: * xtc.lang.jeannie.Jeannie.QualifiedIdentifier$$Star1.
07110: *
07111: * @param yyStart The index.
07112: * @return The result.
07113: * @throws IOException Signals an I/O error.
07114: */
07115: private Result pQualifiedIdentifier$$Star1(final int yyStart)
07116: throws IOException {
07117:
07118: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
07119: if (null == yyColumn.chunk3)
07120: yyColumn.chunk3 = new Chunk3();
07121: if (null == yyColumn.chunk3.fQualifiedIdentifier$$Star1)
07122: yyColumn.chunk3.fQualifiedIdentifier$$Star1 = pQualifiedIdentifier$$Star1$1(yyStart);
07123: return yyColumn.chunk3.fQualifiedIdentifier$$Star1;
07124: }
07125:
07126: /** Actually parse xtc.lang.jeannie.Jeannie.QualifiedIdentifier$$Star1. */
07127: private Result pQualifiedIdentifier$$Star1$1(final int yyStart)
07128: throws IOException {
07129:
07130: Result yyResult;
07131: Pair<String> yyValue;
07132: ParseError yyError = ParseError.DUMMY;
07133:
07134: // Alternative 1.
07135:
07136: yyResult = pSymbol(yyStart);
07137: yyError = yyResult.select(yyError);
07138: if (yyResult.hasValue(".")) {
07139:
07140: yyResult = pJavaIdentifier$Identifier(yyResult.index);
07141: yyError = yyResult.select(yyError);
07142: if (yyResult.hasValue()) {
07143: final String v$el$1 = yyResult.semanticValue();
07144:
07145: yyResult = pQualifiedIdentifier$$Star1(yyResult.index);
07146: yyError = yyResult.select(yyError);
07147: if (yyResult.hasValue()) {
07148: final Pair<String> v$2 = yyResult.semanticValue();
07149:
07150: yyValue = new Pair<String>(v$el$1, v$2);
07151:
07152: return yyResult.createValue(yyValue, yyError);
07153: }
07154: }
07155: }
07156:
07157: // Alternative 2.
07158:
07159: yyValue = Pair.empty();
07160:
07161: return new SemanticValue(yyValue, yyStart, yyError);
07162: }
07163:
07164: // =========================================================================
07165:
07166: /**
07167: * Parse nonterminal xtc.lang.JavaIdentifier.Identifier.
07168: *
07169: * @param yyStart The index.
07170: * @return The result.
07171: * @throws IOException Signals an I/O error.
07172: */
07173: private Result pJavaIdentifier$Identifier(final int yyStart)
07174: throws IOException {
07175:
07176: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
07177: if (null == yyColumn.chunk3)
07178: yyColumn.chunk3 = new Chunk3();
07179: if (null == yyColumn.chunk3.fJavaIdentifier$Identifier)
07180: yyColumn.chunk3.fJavaIdentifier$Identifier = pJavaIdentifier$Identifier$1(yyStart);
07181: return yyColumn.chunk3.fJavaIdentifier$Identifier;
07182: }
07183:
07184: /** Actually parse xtc.lang.JavaIdentifier.Identifier. */
07185: private Result pJavaIdentifier$Identifier$1(final int yyStart)
07186: throws IOException {
07187:
07188: Result yyResult;
07189: String yyValue;
07190: ParseError yyError = ParseError.DUMMY;
07191:
07192: // Alternative 1.
07193:
07194: yyResult = pJavaIdentifier$Word(yyStart);
07195: yyError = yyResult.select(yyError);
07196: if (yyResult.hasValue()) {
07197: yyValue = yyResult.semanticValue();
07198:
07199: if (!contains(JAVA_KEYWORDS, toText(yyValue))) {
07200:
07201: return yyResult.createValue(yyValue, yyError);
07202: }
07203: }
07204:
07205: // Done.
07206: yyError = yyError.select("identifier expected", yyStart);
07207: return yyError;
07208: }
07209:
07210: // =========================================================================
07211:
07212: /**
07213: * Parse nonterminal xtc.lang.JavaIdentifier.Word.
07214: *
07215: * @param yyStart The index.
07216: * @return The result.
07217: * @throws IOException Signals an I/O error.
07218: */
07219: private Result pJavaIdentifier$Word(final int yyStart)
07220: throws IOException {
07221: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
07222: if (null == yyColumn.chunk3)
07223: yyColumn.chunk3 = new Chunk3();
07224: if (null == yyColumn.chunk3.fJavaIdentifier$Word)
07225: yyColumn.chunk3.fJavaIdentifier$Word = pJavaIdentifier$Word$1(yyStart);
07226: return yyColumn.chunk3.fJavaIdentifier$Word;
07227: }
07228:
07229: /** Actually parse xtc.lang.JavaIdentifier.Word. */
07230: private Result pJavaIdentifier$Word$1(final int yyStart)
07231: throws IOException {
07232:
07233: Result yyResult;
07234: String yyValue;
07235: ParseError yyError = ParseError.DUMMY;
07236:
07237: // Alternative 1.
07238:
07239: yyResult = pJavaIdentifier$WordCharacters(yyStart);
07240: yyError = yyResult.select(yyError);
07241: if (yyResult.hasValue()) {
07242: yyValue = yyResult.semanticValue();
07243:
07244: yyResult = pSpacing(yyResult.index);
07245: yyError = yyResult.select(yyError);
07246: if (yyResult.hasValue()) {
07247:
07248: return yyResult.createValue(yyValue, yyError);
07249: }
07250: }
07251:
07252: // Done.
07253: return yyError;
07254: }
07255:
07256: // =========================================================================
07257:
07258: /**
07259: * Parse nonterminal xtc.lang.JavaIdentifier.WordCharacters.
07260: *
07261: * @param yyStart The index.
07262: * @return The result.
07263: * @throws IOException Signals an I/O error.
07264: */
07265: private Result pJavaIdentifier$WordCharacters(final int yyStart)
07266: throws IOException {
07267:
07268: int yyC;
07269: int yyIndex;
07270: int yyRepetition1;
07271: String yyValue;
07272: ParseError yyError = ParseError.DUMMY;
07273:
07274: // Alternative 1.
07275:
07276: yyC = character(yyStart);
07277: if (-1 != yyC) {
07278: yyIndex = yyStart + 1;
07279: final char start = (char) yyC;
07280:
07281: if (Character.isJavaIdentifierStart(start)) {
07282:
07283: yyRepetition1 = yyIndex;
07284: while (true) {
07285:
07286: yyC = character(yyRepetition1);
07287: if (-1 != yyC) {
07288: yyIndex = yyRepetition1 + 1;
07289: final char part = (char) yyC;
07290:
07291: if (Character.isJavaIdentifierPart(part)) {
07292:
07293: yyRepetition1 = yyIndex;
07294: continue;
07295: }
07296: }
07297: break;
07298: }
07299:
07300: yyValue = difference(yyStart, yyRepetition1);
07301:
07302: return new SemanticValue(yyValue, yyRepetition1,
07303: yyError);
07304: }
07305: }
07306:
07307: // Done.
07308: yyError = yyError.select("word characters expected", yyStart);
07309: return yyError;
07310: }
07311:
07312: // =========================================================================
07313:
07314: /**
07315: * Parse nonterminal xtc.lang.jeannie.JeannieC.TranslationUnit.
07316: *
07317: * @param yyStart The index.
07318: * @return The result.
07319: * @throws IOException Signals an I/O error.
07320: */
07321: private Result pTranslationUnit(final int yyStart)
07322: throws IOException {
07323: Result yyResult;
07324: int yyRepetition1;
07325: Pair<Node> yyRepValue1;
07326: int yyOption1;
07327: Node yyOpValue1;
07328: Node yyValue;
07329: ParseError yyError = ParseError.DUMMY;
07330:
07331: // Alternative 1.
07332:
07333: yyResult = pPrelude(yyStart);
07334: yyError = yyResult.select(yyError);
07335: if (yyResult.hasValue()) {
07336:
07337: yyOption1 = yyResult.index;
07338: yyOpValue1 = null;
07339:
07340: yyResult = pJavaImports(yyOption1);
07341: yyError = yyResult.select(yyError);
07342: if (yyResult.hasValue()) {
07343: final Node v$el$1 = yyResult.semanticValue();
07344:
07345: yyOption1 = yyResult.index;
07346: yyOpValue1 = v$el$1;
07347: }
07348: { // Start scope for v$g$1.
07349: final Node v$g$1 = yyOpValue1;
07350:
07351: yyRepetition1 = yyOption1;
07352: yyRepValue1 = Pair.empty();
07353: while (true) {
07354:
07355: yyResult = pExternalDeclaration(yyRepetition1);
07356: yyError = yyResult.select(yyError);
07357: if (yyResult.hasValue()) {
07358: final Node v$el$2 = yyResult.semanticValue();
07359:
07360: yyRepetition1 = yyResult.index;
07361: yyRepValue1 = new Pair<Node>(v$el$2,
07362: yyRepValue1);
07363: continue;
07364: }
07365: break;
07366: }
07367: { // Start scope for v$g$2.
07368: final Pair<Node> v$g$2 = yyRepValue1.reverse();
07369:
07370: yyResult = pAnnotations(yyRepetition1);
07371: yyError = yyResult.select(yyError);
07372: if (yyResult.hasValue()) {
07373: final Node v$g$3 = yyResult.semanticValue();
07374:
07375: yyResult = pEndOfFile(yyResult.index);
07376: yyError = yyResult.select(yyError);
07377: if (yyResult.hasValue()) {
07378:
07379: yyValue = GNode.create("TranslationUnit",
07380: v$g$2.size() + 2).add(v$g$1)
07381: .addAll(v$g$2).add(v$g$3);
07382: yyValue.setLocation(location(yyStart));
07383:
07384: return yyResult.createValue(yyValue,
07385: yyError);
07386: }
07387: }
07388: } // End scope for v$g$2.
07389: } // End scope for v$g$1.
07390: }
07391:
07392: // Done.
07393: return yyError;
07394: }
07395:
07396: // =========================================================================
07397:
07398: /**
07399: * Parse nonterminal xtc.lang.jeannie.JeannieC.Prelude.
07400: *
07401: * @param yyStart The index.
07402: * @return The result.
07403: * @throws IOException Signals an I/O error.
07404: */
07405: private Result pPrelude(final int yyStart) throws IOException {
07406: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
07407: if (null == yyColumn.chunk3)
07408: yyColumn.chunk3 = new Chunk3();
07409: if (null == yyColumn.chunk3.fPrelude)
07410: yyColumn.chunk3.fPrelude = pPrelude$1(yyStart);
07411: return yyColumn.chunk3.fPrelude;
07412: }
07413:
07414: /** Actually parse xtc.lang.jeannie.JeannieC.Prelude. */
07415: private Result pPrelude$1(final int yyStart) throws IOException {
07416: Result yyResult;
07417: Void yyValue;
07418: ParseError yyError = ParseError.DUMMY;
07419:
07420: // Reset the global state object.
07421: yyState.reset(column(yyStart).file);
07422:
07423: // Alternative 1.
07424:
07425: yyResult = pDirective(yyStart);
07426: yyError = yyResult.select(yyError);
07427: if (yyResult.hasValue()) {
07428:
07429: yyResult = pSpacing(yyResult.index);
07430: yyError = yyResult.select(yyError);
07431: if (yyResult.hasValue()) {
07432:
07433: yyValue = null;
07434:
07435: return yyResult.createValue(yyValue, yyError);
07436: }
07437: }
07438:
07439: // Done.
07440: return yyError;
07441: }
07442:
07443: // =========================================================================
07444:
07445: /**
07446: * Parse nonterminal xtc.lang.jeannie.JeannieC.ExternalDeclaration.
07447: *
07448: * @param yyStart The index.
07449: * @return The result.
07450: * @throws IOException Signals an I/O error.
07451: */
07452: private Result pExternalDeclaration(final int yyStart)
07453: throws IOException {
07454: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
07455: if (null == yyColumn.chunk3)
07456: yyColumn.chunk3 = new Chunk3();
07457: if (null == yyColumn.chunk3.fExternalDeclaration)
07458: yyColumn.chunk3.fExternalDeclaration = pExternalDeclaration$1(yyStart);
07459: return yyColumn.chunk3.fExternalDeclaration;
07460: }
07461:
07462: /** Actually parse xtc.lang.jeannie.JeannieC.ExternalDeclaration. */
07463: private Result pExternalDeclaration$1(final int yyStart)
07464: throws IOException {
07465:
07466: Result yyResult;
07467: Node yyValue;
07468: ParseError yyError = ParseError.DUMMY;
07469:
07470: // Start a state modification.
07471: yyState.start();
07472:
07473: // Alternative <Declaration>.
07474:
07475: yyState.mark();
07476:
07477: yyResult = pJeannieC$Declaration(yyStart);
07478: yyError = yyResult.select(yyError);
07479: if (yyResult.hasValue()) {
07480: final Node d = yyResult.semanticValue();
07481:
07482: yyValue = yyState.annotate(d);
07483:
07484: // Commit the state modification.
07485: yyState.commit();
07486:
07487: setLocation(yyValue, yyStart);
07488: return yyResult.createValue(yyValue, yyError);
07489: }
07490:
07491: // Alternative <Function>.
07492:
07493: yyResult = pFunctionDefinition(yyStart);
07494: yyError = yyResult.select(yyError);
07495: if (yyResult.hasValue()) {
07496: final Node fd = yyResult.semanticValue();
07497:
07498: yyValue = yyState.annotate(fd);
07499:
07500: // Commit the state modification.
07501: yyState.commit();
07502:
07503: setLocation(yyValue, yyStart);
07504: return yyResult.createValue(yyValue, yyError);
07505: }
07506:
07507: // Alternative <Assembly>.
07508:
07509: yyResult = pAssemblyDefinition(yyStart);
07510: yyError = yyResult.select(yyError);
07511: if (yyResult.hasValue()) {
07512: final Node a = yyResult.semanticValue();
07513:
07514: yyValue = yyState.annotate(a);
07515:
07516: // Commit the state modification.
07517: yyState.commit();
07518:
07519: setLocation(yyValue, yyStart);
07520: return yyResult.createValue(yyValue, yyError);
07521: }
07522:
07523: // Alternative <Empty>.
07524:
07525: yyResult = pEmptyDefinition(yyStart);
07526: yyError = yyResult.select(yyError);
07527: if (yyResult.hasValue()) {
07528: final Node e = yyResult.semanticValue();
07529:
07530: yyValue = yyState.annotate(e);
07531:
07532: // Commit the state modification.
07533: yyState.commit();
07534:
07535: setLocation(yyValue, yyStart);
07536: return yyResult.createValue(yyValue, yyError);
07537: }
07538:
07539: // Abort the state modification.
07540: yyState.abort();
07541:
07542: // Done.
07543: return yyError;
07544: }
07545:
07546: // =========================================================================
07547:
07548: /**
07549: * Parse nonterminal xtc.lang.jeannie.JeannieC.FunctionDefinition.
07550: *
07551: * @param yyStart The index.
07552: * @return The result.
07553: * @throws IOException Signals an I/O error.
07554: */
07555: private Result pFunctionDefinition(final int yyStart)
07556: throws IOException {
07557: Result yyResult;
07558: int yyBase;
07559: int yyOption1;
07560: Object yyOpValue1;
07561: Node yyValue;
07562: ParseError yyError = ParseError.DUMMY;
07563:
07564: // Alternative <Definition>.
07565:
07566: yyOption1 = yyStart;
07567: yyOpValue1 = null;
07568:
07569: yyBase = yyOption1;
07570: yyResult = pKeyword(yyBase);
07571: yyError = yyResult.select(yyError);
07572: if (yyResult.hasValue("__extension__")) {
07573: final String v$el$1 = "__extension__";
07574:
07575: yyOption1 = yyResult.index;
07576: yyOpValue1 = v$el$1;
07577: } else {
07578: yyError = yyError.select("\"__extension__\" expected",
07579: yyBase);
07580: }
07581: { // Start scope for v$g$1.
07582: final String v$g$1 = cast(yyOpValue1);
07583:
07584: yyOpValue1 = null;
07585:
07586: yyResult = pDeclarationSpecifiers(yyOption1);
07587: yyError = yyResult.select(yyError);
07588: if (yyResult.hasValue()) {
07589: final Node v$el$2 = yyResult.semanticValue();
07590:
07591: yyOption1 = yyResult.index;
07592: yyOpValue1 = v$el$2;
07593: }
07594: { // Start scope for v$g$2.
07595: final Node v$g$2 = cast(yyOpValue1);
07596:
07597: yyResult = pJeannieC$Declarator(yyOption1);
07598: yyError = yyResult.select(yyError);
07599: if (yyResult.hasValue()) {
07600: final Node v$g$3 = yyResult.semanticValue();
07601:
07602: yyResult = pFunctionDeclaratorContext(yyResult.index);
07603: yyError = yyResult.select(yyError);
07604: if (yyResult.hasValue()) {
07605:
07606: yyOption1 = yyResult.index;
07607: yyOpValue1 = null;
07608:
07609: yyResult = pDeclarationList(yyOption1);
07610: yyError = yyResult.select(yyError);
07611: if (yyResult.hasValue()) {
07612: final Node v$el$3 = yyResult
07613: .semanticValue();
07614:
07615: yyOption1 = yyResult.index;
07616: yyOpValue1 = v$el$3;
07617: }
07618: { // Start scope for v$g$4.
07619: final Node v$g$4 = cast(yyOpValue1);
07620:
07621: yyResult = pCompoundStatement(yyOption1);
07622: yyError = yyResult.select(yyError);
07623: if (yyResult.hasValue()) {
07624: final Node v$g$5 = yyResult
07625: .semanticValue();
07626:
07627: yyValue = GNode.create(
07628: "FunctionDefinition", v$g$1,
07629: v$g$2, v$g$3, v$g$4, v$g$5);
07630: yyValue.setLocation(location(yyStart));
07631:
07632: return yyResult.createValue(yyValue,
07633: yyError);
07634: }
07635: } // End scope for v$g$4.
07636: }
07637: }
07638: } // End scope for v$g$2.
07639: } // End scope for v$g$1.
07640:
07641: // Done.
07642: return yyError;
07643: }
07644:
07645: // =========================================================================
07646:
07647: /**
07648: * Parse nonterminal xtc.lang.jeannie.JeannieC.DeclarationList.
07649: *
07650: * @param yyStart The index.
07651: * @return The result.
07652: * @throws IOException Signals an I/O error.
07653: */
07654: private Result pDeclarationList(final int yyStart)
07655: throws IOException {
07656: Result yyResult;
07657: int yyRepetition1;
07658: boolean yyRepeated1;
07659: Pair<Node> yyRepValue1;
07660: Node yyValue;
07661: ParseError yyError = ParseError.DUMMY;
07662:
07663: // Alternative <List>.
07664:
07665: yyRepetition1 = yyStart;
07666: yyRepeated1 = false;
07667: yyRepValue1 = Pair.empty();
07668: while (true) {
07669:
07670: yyResult = pDeclarationListEntry(yyRepetition1);
07671: yyError = yyResult.select(yyError);
07672: if (yyResult.hasValue()) {
07673: final Node v$el$1 = yyResult.semanticValue();
07674:
07675: yyRepetition1 = yyResult.index;
07676: yyRepeated1 = true;
07677: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
07678: continue;
07679: }
07680: break;
07681: }
07682:
07683: if (yyRepeated1) {
07684: final Pair<Node> v$g$1 = yyRepValue1.reverse();
07685:
07686: yyValue = GNode.createFromPair("DeclarationList", v$g$1);
07687: yyValue.setLocation(location(yyStart));
07688:
07689: return new SemanticValue(yyValue, yyRepetition1, yyError);
07690: }
07691:
07692: // Done.
07693: return yyError;
07694: }
07695:
07696: // =========================================================================
07697:
07698: /**
07699: * Parse nonterminal xtc.lang.jeannie.JeannieC.DeclarationListEntry.
07700: *
07701: * @param yyStart The index.
07702: * @return The result.
07703: * @throws IOException Signals an I/O error.
07704: */
07705: private Result pDeclarationListEntry(final int yyStart)
07706: throws IOException {
07707: Result yyResult;
07708: Node yyValue;
07709: ParseError yyError = ParseError.DUMMY;
07710:
07711: // Start a state modification.
07712: yyState.start();
07713:
07714: // Alternative <Entry>.
07715:
07716: yyResult = pJeannieC$Declaration(yyStart);
07717: yyError = yyResult.select(yyError);
07718: if (yyResult.hasValue()) {
07719: yyValue = yyResult.semanticValue();
07720:
07721: // Commit the state modification.
07722: yyState.commit();
07723:
07724: return yyResult.createValue(yyValue, yyError);
07725: }
07726:
07727: // Abort the state modification.
07728: yyState.abort();
07729:
07730: // Done.
07731: return yyError;
07732: }
07733:
07734: // =========================================================================
07735:
07736: /**
07737: * Parse nonterminal xtc.lang.jeannie.JeannieC.EmptyDefinition.
07738: *
07739: * @param yyStart The index.
07740: * @return The result.
07741: * @throws IOException Signals an I/O error.
07742: */
07743: private Result pEmptyDefinition(final int yyStart)
07744: throws IOException {
07745: Result yyResult;
07746: Node yyValue;
07747: ParseError yyError = ParseError.DUMMY;
07748:
07749: // Alternative 1.
07750:
07751: yyResult = pSymbol(yyStart);
07752: yyError = yyResult.select(yyError);
07753: if (yyResult.hasValue(";")) {
07754:
07755: yyValue = GNode.create("EmptyDefinition", false);
07756: yyValue.setLocation(location(yyStart));
07757:
07758: return yyResult.createValue(yyValue, yyError);
07759: }
07760:
07761: // Done.
07762: yyError = yyError.select("empty definition expected", yyStart);
07763: return yyError;
07764: }
07765:
07766: // =========================================================================
07767:
07768: /**
07769: * Parse nonterminal xtc.lang.jeannie.JeannieC.Annotations.
07770: *
07771: * @param yyStart The index.
07772: * @return The result.
07773: * @throws IOException Signals an I/O error.
07774: */
07775: private Result pAnnotations(final int yyStart) throws IOException {
07776: Node yyValue;
07777: ParseError yyError = ParseError.DUMMY;
07778:
07779: // Start a state modification.
07780: yyState.start();
07781:
07782: // Alternative 1.
07783:
07784: yyState.mark();
07785: yyValue = yyState.annotate(null);
07786:
07787: // Commit the state modification.
07788: yyState.commit();
07789:
07790: setLocation(yyValue, yyStart);
07791: return new SemanticValue(yyValue, yyStart, yyError);
07792: }
07793:
07794: // =========================================================================
07795:
07796: /**
07797: * Parse nonterminal xtc.lang.jeannie.JeannieC.Declaration.
07798: *
07799: * @param yyStart The index.
07800: * @return The result.
07801: * @throws IOException Signals an I/O error.
07802: */
07803: private Result pJeannieC$Declaration(final int yyStart)
07804: throws IOException {
07805: Result yyResult;
07806: int yyBase;
07807: int yyOption1;
07808: Object yyOpValue1;
07809: Node yyValue;
07810: ParseError yyError = ParseError.DUMMY;
07811:
07812: // Alternative 1.
07813:
07814: yyOption1 = yyStart;
07815: yyOpValue1 = null;
07816:
07817: yyBase = yyOption1;
07818: yyResult = pKeyword(yyBase);
07819: yyError = yyResult.select(yyError);
07820: if (yyResult.hasValue("__extension__")) {
07821: final String v$el$1 = "__extension__";
07822:
07823: yyOption1 = yyResult.index;
07824: yyOpValue1 = v$el$1;
07825: } else {
07826: yyError = yyError.select("\"__extension__\" expected",
07827: yyBase);
07828: }
07829: { // Start scope for v$g$1.
07830: final String v$g$1 = cast(yyOpValue1);
07831:
07832: yyResult = pDeclarationSpecifiers(yyOption1);
07833: yyError = yyResult.select(yyError);
07834: if (yyResult.hasValue()) {
07835: final Node v$g$2 = yyResult.semanticValue();
07836:
07837: yyOption1 = yyResult.index;
07838: yyOpValue1 = null;
07839:
07840: yyResult = pInitializedDeclaratorList(yyOption1);
07841: yyError = yyResult.select(yyError);
07842: if (yyResult.hasValue()) {
07843: final Node v$el$2 = yyResult.semanticValue();
07844:
07845: yyOption1 = yyResult.index;
07846: yyOpValue1 = v$el$2;
07847: }
07848: { // Start scope for l.
07849: final Node l = cast(yyOpValue1);
07850:
07851: if (yyState.isValid(l)) {
07852:
07853: yyBase = yyOption1;
07854: yyResult = pSymbol(yyBase);
07855: yyError = yyResult.select(yyError);
07856: if (yyResult.hasValue(";")) {
07857:
07858: yyValue = GNode.create("Declaration",
07859: v$g$1, v$g$2, l);
07860: yyValue.setLocation(location(yyStart));
07861:
07862: return yyResult.createValue(yyValue,
07863: yyError);
07864: } else {
07865: yyError = yyError.select("\";\" expected",
07866: yyBase);
07867: }
07868: }
07869: } // End scope for l.
07870: }
07871: } // End scope for v$g$1.
07872:
07873: // Done.
07874: yyError = yyError.select("declaration expected", yyStart);
07875: return yyError;
07876: }
07877:
07878: // =========================================================================
07879:
07880: /**
07881: * Parse nonterminal xtc.lang.jeannie.JeannieC.DeclarationSpecifiers.
07882: *
07883: * @param yyStart The index.
07884: * @return The result.
07885: * @throws IOException Signals an I/O error.
07886: */
07887: private Result pDeclarationSpecifiers(final int yyStart)
07888: throws IOException {
07889:
07890: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
07891: if (null == yyColumn.chunk3)
07892: yyColumn.chunk3 = new Chunk3();
07893: if (null == yyColumn.chunk3.fDeclarationSpecifiers)
07894: yyColumn.chunk3.fDeclarationSpecifiers = pDeclarationSpecifiers$1(yyStart);
07895: return yyColumn.chunk3.fDeclarationSpecifiers;
07896: }
07897:
07898: /** Actually parse xtc.lang.jeannie.JeannieC.DeclarationSpecifiers. */
07899: private Result pDeclarationSpecifiers$1(final int yyStart)
07900: throws IOException {
07901:
07902: Result yyResult;
07903: Node yyValue;
07904: ParseError yyError = ParseError.DUMMY;
07905:
07906: // Alternative 1.
07907:
07908: yyResult = pDeclarationSpecifierPlus(yyStart);
07909: yyError = yyResult.select(yyError);
07910: if (yyResult.hasValue()) {
07911: final Pair<Node> v$g$1 = yyResult.semanticValue();
07912:
07913: yyValue = GNode.createFromPair("DeclarationSpecifiers",
07914: v$g$1);
07915: yyValue.setLocation(location(yyStart));
07916:
07917: return yyResult.createValue(yyValue, yyError);
07918: }
07919:
07920: // Done.
07921: return yyError;
07922: }
07923:
07924: // =========================================================================
07925:
07926: /**
07927: * Parse nonterminal xtc.lang.jeannie.JeannieC.DeclarationSpecifierPlus.
07928: *
07929: * @param yyStart The index.
07930: * @return The result.
07931: * @throws IOException Signals an I/O error.
07932: */
07933: private Result pDeclarationSpecifierPlus(final int yyStart)
07934: throws IOException {
07935:
07936: Result yyResult;
07937: int yyRepetition1;
07938: boolean yyRepeated1;
07939: Pair<Node> yyRepValue1;
07940: Pair<Node> yyValue;
07941: ParseError yyError = ParseError.DUMMY;
07942:
07943: // Alternative 1.
07944:
07945: yyRepetition1 = yyStart;
07946: yyRepeated1 = false;
07947: yyRepValue1 = Pair.empty();
07948: while (true) {
07949:
07950: yyResult = pDeclarationSpecifier(yyRepetition1);
07951: yyError = yyResult.select(yyError);
07952: if (yyResult.hasValue()) {
07953: final Node v$el$1 = yyResult.semanticValue();
07954:
07955: yyRepetition1 = yyResult.index;
07956: yyRepeated1 = true;
07957: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
07958: continue;
07959: }
07960: break;
07961: }
07962:
07963: if (yyRepeated1) {
07964: yyValue = yyRepValue1.reverse();
07965:
07966: return new SemanticValue(yyValue, yyRepetition1, yyError);
07967: }
07968:
07969: // Done.
07970: return yyError;
07971: }
07972:
07973: // =========================================================================
07974:
07975: /**
07976: * Parse nonterminal xtc.lang.jeannie.JeannieC.DeclarationSpecifier.
07977: *
07978: * @param yyStart The index.
07979: * @return The result.
07980: * @throws IOException Signals an I/O error.
07981: */
07982: private Result pDeclarationSpecifier(final int yyStart)
07983: throws IOException {
07984: Result yyResult;
07985: Node yyValue;
07986: ParseError yyError = ParseError.DUMMY;
07987:
07988: // Alternative <StorageClass>.
07989:
07990: yyResult = pStorageClassSpecifier(yyStart);
07991: yyError = yyResult.select(yyError);
07992: if (yyResult.hasValue()) {
07993: yyValue = yyResult.semanticValue();
07994:
07995: return yyResult.createValue(yyValue, yyError);
07996: }
07997:
07998: // Alternative <TypeSpecifier>.
07999:
08000: yyResult = pTypeSpecifier(yyStart);
08001: yyError = yyResult.select(yyError);
08002: if (yyResult.hasValue()) {
08003: yyValue = yyResult.semanticValue();
08004:
08005: yyResult = pTypeSpecContext(yyResult.index);
08006: yyError = yyResult.select(yyError);
08007: if (yyResult.hasValue()) {
08008:
08009: return yyResult.createValue(yyValue, yyError);
08010: }
08011: }
08012:
08013: // Alternative <TypeQualifier>.
08014:
08015: yyResult = pTypeQualifier(yyStart);
08016: yyError = yyResult.select(yyError);
08017: if (yyResult.hasValue()) {
08018: yyValue = yyResult.semanticValue();
08019:
08020: return yyResult.createValue(yyValue, yyError);
08021: }
08022:
08023: // Alternative 4.
08024:
08025: yyResult = pKeyword(yyStart);
08026: yyError = yyResult.select(yyError);
08027: if (yyResult.hasValue("inline")) {
08028: final String v$g$1 = "inline";
08029:
08030: yyValue = GNode.create("FunctionSpecifier", v$g$1);
08031: yyValue.setLocation(location(yyStart));
08032:
08033: return yyResult.createValue(yyValue, yyError);
08034: }
08035:
08036: // Alternative 5.
08037:
08038: yyResult = pKeyword(yyStart);
08039: yyError = yyResult.select(yyError);
08040: if (yyResult.hasValue("__inline")) {
08041: final String v$g$2 = "__inline";
08042:
08043: yyValue = GNode.create("FunctionSpecifier", v$g$2);
08044: yyValue.setLocation(location(yyStart));
08045:
08046: return yyResult.createValue(yyValue, yyError);
08047: }
08048:
08049: // Alternative 6.
08050:
08051: yyResult = pKeyword(yyStart);
08052: yyError = yyResult.select(yyError);
08053: if (yyResult.hasValue("__inline__")) {
08054: final String v$g$3 = "__inline__";
08055:
08056: yyValue = GNode.create("FunctionSpecifier", v$g$3);
08057: yyValue.setLocation(location(yyStart));
08058:
08059: return yyResult.createValue(yyValue, yyError);
08060: }
08061:
08062: // Alternative <Attribute>.
08063:
08064: yyResult = pAttributeSpecifier(yyStart);
08065: yyError = yyResult.select(yyError);
08066: if (yyResult.hasValue()) {
08067: yyValue = yyResult.semanticValue();
08068:
08069: return yyResult.createValue(yyValue, yyError);
08070: }
08071:
08072: // Done.
08073: yyError = yyError.select("declaration specifier expected",
08074: yyStart);
08075: return yyError;
08076: }
08077:
08078: // =========================================================================
08079:
08080: /**
08081: * Parse nonterminal xtc.lang.jeannie.JeannieC.InitializedDeclaratorList.
08082: *
08083: * @param yyStart The index.
08084: * @return The result.
08085: * @throws IOException Signals an I/O error.
08086: */
08087: private Result pInitializedDeclaratorList(final int yyStart)
08088: throws IOException {
08089:
08090: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
08091: if (null == yyColumn.chunk3)
08092: yyColumn.chunk3 = new Chunk3();
08093: if (null == yyColumn.chunk3.fInitializedDeclaratorList)
08094: yyColumn.chunk3.fInitializedDeclaratorList = pInitializedDeclaratorList$1(yyStart);
08095: return yyColumn.chunk3.fInitializedDeclaratorList;
08096: }
08097:
08098: /** Actually parse xtc.lang.jeannie.JeannieC.InitializedDeclaratorList. */
08099: private Result pInitializedDeclaratorList$1(final int yyStart)
08100: throws IOException {
08101:
08102: Result yyResult;
08103: Node yyValue;
08104: ParseError yyError = ParseError.DUMMY;
08105:
08106: // Alternative <List>.
08107:
08108: yyResult = pInitializedDeclarator(yyStart);
08109: yyError = yyResult.select(yyError);
08110: if (yyResult.hasValue()) {
08111: final Node v$g$1 = yyResult.semanticValue();
08112:
08113: yyResult = pInitializedDeclaratorList$$Star1(yyResult.index);
08114: yyError = yyResult.select(yyError);
08115: if (yyResult.hasValue()) {
08116: final Pair<Node> v$g$2 = yyResult.semanticValue();
08117:
08118: yyValue = GNode.createFromPair(
08119: "InitializedDeclaratorList", v$g$1, v$g$2);
08120: yyValue.setLocation(location(yyStart));
08121:
08122: return yyResult.createValue(yyValue, yyError);
08123: }
08124: }
08125:
08126: // Done.
08127: return yyError;
08128: }
08129:
08130: // =========================================================================
08131:
08132: /**
08133: * Parse synthetic nonterminal
08134: * xtc.lang.jeannie.Jeannie.InitializedDeclaratorList$$Star1.
08135: *
08136: * @param yyStart The index.
08137: * @return The result.
08138: * @throws IOException Signals an I/O error.
08139: */
08140: private Result pInitializedDeclaratorList$$Star1(final int yyStart)
08141: throws IOException {
08142:
08143: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
08144: if (null == yyColumn.chunk3)
08145: yyColumn.chunk3 = new Chunk3();
08146: if (null == yyColumn.chunk3.fInitializedDeclaratorList$$Star1)
08147: yyColumn.chunk3.fInitializedDeclaratorList$$Star1 = pInitializedDeclaratorList$$Star1$1(yyStart);
08148: return yyColumn.chunk3.fInitializedDeclaratorList$$Star1;
08149: }
08150:
08151: /** Actually parse xtc.lang.jeannie.Jeannie.InitializedDeclaratorList$$Star1. */
08152: private Result pInitializedDeclaratorList$$Star1$1(final int yyStart)
08153: throws IOException {
08154:
08155: Result yyResult;
08156: Pair<Node> yyValue;
08157: ParseError yyError = ParseError.DUMMY;
08158:
08159: // Alternative 1.
08160:
08161: yyResult = pSymbol(yyStart);
08162: yyError = yyResult.select(yyError);
08163: if (yyResult.hasValue(",")) {
08164:
08165: yyResult = pInitializedDeclarator(yyResult.index);
08166: yyError = yyResult.select(yyError);
08167: if (yyResult.hasValue()) {
08168: final Node v$el$1 = yyResult.semanticValue();
08169:
08170: yyResult = pInitializedDeclaratorList$$Star1(yyResult.index);
08171: yyError = yyResult.select(yyError);
08172: if (yyResult.hasValue()) {
08173: final Pair<Node> v$2 = yyResult.semanticValue();
08174:
08175: yyValue = new Pair<Node>(v$el$1, v$2);
08176:
08177: return yyResult.createValue(yyValue, yyError);
08178: }
08179: }
08180: }
08181:
08182: // Alternative 2.
08183:
08184: yyValue = Pair.empty();
08185:
08186: return new SemanticValue(yyValue, yyStart, yyError);
08187: }
08188:
08189: // =========================================================================
08190:
08191: /**
08192: * Parse nonterminal xtc.lang.jeannie.JeannieC.InitializedDeclarator.
08193: *
08194: * @param yyStart The index.
08195: * @return The result.
08196: * @throws IOException Signals an I/O error.
08197: */
08198: private Result pInitializedDeclarator(final int yyStart)
08199: throws IOException {
08200:
08201: Result yyResult;
08202: int yyBase;
08203: int yyOption1;
08204: Node yyOpValue1;
08205: Node yyValue;
08206: ParseError yyError = ParseError.DUMMY;
08207:
08208: // Alternative 1.
08209:
08210: yyOption1 = yyStart;
08211: yyOpValue1 = null;
08212:
08213: yyResult = pAttributeSpecifierList(yyOption1);
08214: yyError = yyResult.select(yyError);
08215: if (yyResult.hasValue()) {
08216: final Node v$el$1 = yyResult.semanticValue();
08217:
08218: yyOption1 = yyResult.index;
08219: yyOpValue1 = v$el$1;
08220: }
08221: { // Start scope for v$g$1.
08222: final Node v$g$1 = yyOpValue1;
08223:
08224: yyResult = pJeannieC$Declarator(yyOption1);
08225: yyError = yyResult.select(yyError);
08226: if (yyResult.hasValue()) {
08227: final Node v$g$2 = yyResult.semanticValue();
08228:
08229: yyOption1 = yyResult.index;
08230: yyOpValue1 = null;
08231:
08232: yyResult = pSimpleAssemblyExpression(yyOption1);
08233: yyError = yyResult.select(yyError);
08234: if (yyResult.hasValue()) {
08235: final Node v$el$2 = yyResult.semanticValue();
08236:
08237: yyOption1 = yyResult.index;
08238: yyOpValue1 = v$el$2;
08239: }
08240: { // Start scope for v$g$3.
08241: final Node v$g$3 = yyOpValue1;
08242:
08243: yyOpValue1 = null;
08244:
08245: yyResult = pAttributeSpecifierList(yyOption1);
08246: yyError = yyResult.select(yyError);
08247: if (yyResult.hasValue()) {
08248: final Node v$el$3 = yyResult.semanticValue();
08249:
08250: yyOption1 = yyResult.index;
08251: yyOpValue1 = v$el$3;
08252: }
08253: { // Start scope for v$g$4.
08254: final Node v$g$4 = yyOpValue1;
08255:
08256: yyOpValue1 = null;
08257:
08258: yyBase = yyOption1;
08259: yyResult = pSymbol(yyBase);
08260: yyError = yyResult.select(yyError);
08261: if (yyResult.hasValue("=")) {
08262:
08263: yyResult = pInitializer(yyResult.index);
08264: yyError = yyResult.select(yyError);
08265: if (yyResult.hasValue()) {
08266: final Node v$el$4 = yyResult
08267: .semanticValue();
08268:
08269: yyOption1 = yyResult.index;
08270: yyOpValue1 = v$el$4;
08271: }
08272: } else {
08273: yyError = yyError.select("\"=\" expected",
08274: yyBase);
08275: }
08276: { // Start scope for v$g$5.
08277: final Node v$g$5 = yyOpValue1;
08278:
08279: yyValue = GNode.create(
08280: "InitializedDeclarator", v$g$1,
08281: v$g$2, v$g$3, v$g$4, v$g$5);
08282: yyValue.setLocation(location(yyStart));
08283:
08284: return new SemanticValue(yyValue,
08285: yyOption1, yyError);
08286: } // End scope for v$g$5.
08287: } // End scope for v$g$4.
08288: } // End scope for v$g$3.
08289: }
08290: } // End scope for v$g$1.
08291:
08292: // Done.
08293: return yyError;
08294: }
08295:
08296: // =========================================================================
08297:
08298: /**
08299: * Parse nonterminal xtc.lang.jeannie.JeannieC.StorageClassSpecifier.
08300: *
08301: * @param yyStart The index.
08302: * @return The result.
08303: * @throws IOException Signals an I/O error.
08304: */
08305: private Result pStorageClassSpecifier(final int yyStart)
08306: throws IOException {
08307:
08308: Result yyResult;
08309: Node yyValue;
08310: ParseError yyError = ParseError.DUMMY;
08311:
08312: // Alternative 1.
08313:
08314: yyResult = pKeyword(yyStart);
08315: yyError = yyResult.select(yyError);
08316: if (yyResult.hasValue("auto")) {
08317:
08318: yyValue = GNode.create("AutoSpecifier", false);
08319: yyValue.setLocation(location(yyStart));
08320:
08321: return yyResult.createValue(yyValue, yyError);
08322: }
08323:
08324: // Alternative 2.
08325:
08326: yyResult = pKeyword(yyStart);
08327: yyError = yyResult.select(yyError);
08328: if (yyResult.hasValue("extern")) {
08329:
08330: yyValue = GNode.create("ExternSpecifier", false);
08331: yyValue.setLocation(location(yyStart));
08332:
08333: return yyResult.createValue(yyValue, yyError);
08334: }
08335:
08336: // Alternative 3.
08337:
08338: yyResult = pKeyword(yyStart);
08339: yyError = yyResult.select(yyError);
08340: if (yyResult.hasValue("register")) {
08341:
08342: yyValue = GNode.create("RegisterSpecifier", false);
08343: yyValue.setLocation(location(yyStart));
08344:
08345: return yyResult.createValue(yyValue, yyError);
08346: }
08347:
08348: // Alternative 4.
08349:
08350: yyResult = pKeyword(yyStart);
08351: yyError = yyResult.select(yyError);
08352: if (yyResult.hasValue("static")) {
08353:
08354: yyValue = GNode.create("StaticSpecifier", false);
08355: yyValue.setLocation(location(yyStart));
08356:
08357: return yyResult.createValue(yyValue, yyError);
08358: }
08359:
08360: // Alternative 5.
08361:
08362: yyResult = pKeyword(yyStart);
08363: yyError = yyResult.select(yyError);
08364: if (yyResult.hasValue("typedef")) {
08365:
08366: yyResult = pTypedefContext(yyResult.index);
08367: yyError = yyResult.select(yyError);
08368: if (yyResult.hasValue()) {
08369:
08370: yyValue = GNode.create("TypedefSpecifier", false);
08371: yyValue.setLocation(location(yyStart));
08372:
08373: return yyResult.createValue(yyValue, yyError);
08374: }
08375: }
08376:
08377: // Done.
08378: yyError = yyError.select("storage class specifier expected",
08379: yyStart);
08380: return yyError;
08381: }
08382:
08383: // =========================================================================
08384:
08385: /**
08386: * Parse nonterminal xtc.lang.jeannie.JeannieC.TypeQualifier.
08387: *
08388: * @param yyStart The index.
08389: * @return The result.
08390: * @throws IOException Signals an I/O error.
08391: */
08392: private Result pTypeQualifier(final int yyStart) throws IOException {
08393: Result yyResult;
08394: Node yyValue;
08395: ParseError yyError = ParseError.DUMMY;
08396:
08397: // Alternative 1.
08398:
08399: yyResult = pKeyword(yyStart);
08400: yyError = yyResult.select(yyError);
08401: if (yyResult.hasValue("volatile")) {
08402: final String v$g$1 = "volatile";
08403:
08404: yyValue = GNode.create("VolatileQualifier", v$g$1);
08405: yyValue.setLocation(location(yyStart));
08406:
08407: return yyResult.createValue(yyValue, yyError);
08408: }
08409:
08410: // Alternative 2.
08411:
08412: yyResult = pKeyword(yyStart);
08413: yyError = yyResult.select(yyError);
08414: if (yyResult.hasValue("__volatile")) {
08415: final String v$g$2 = "__volatile";
08416:
08417: yyValue = GNode.create("VolatileQualifier", v$g$2);
08418: yyValue.setLocation(location(yyStart));
08419:
08420: return yyResult.createValue(yyValue, yyError);
08421: }
08422:
08423: // Alternative 3.
08424:
08425: yyResult = pKeyword(yyStart);
08426: yyError = yyResult.select(yyError);
08427: if (yyResult.hasValue("__volatile__")) {
08428: final String v$g$3 = "__volatile__";
08429:
08430: yyValue = GNode.create("VolatileQualifier", v$g$3);
08431: yyValue.setLocation(location(yyStart));
08432:
08433: return yyResult.createValue(yyValue, yyError);
08434: }
08435:
08436: // Alternative 4.
08437:
08438: yyResult = pKeyword(yyStart);
08439: yyError = yyResult.select(yyError);
08440: if (yyResult.hasValue("const")) {
08441: final String v$g$1 = "const";
08442:
08443: yyValue = GNode.create("ConstantQualifier", v$g$1);
08444: yyValue.setLocation(location(yyStart));
08445:
08446: return yyResult.createValue(yyValue, yyError);
08447: }
08448:
08449: // Alternative 5.
08450:
08451: yyResult = pKeyword(yyStart);
08452: yyError = yyResult.select(yyError);
08453: if (yyResult.hasValue("__const")) {
08454: final String v$g$2 = "__const";
08455:
08456: yyValue = GNode.create("ConstantQualifier", v$g$2);
08457: yyValue.setLocation(location(yyStart));
08458:
08459: return yyResult.createValue(yyValue, yyError);
08460: }
08461:
08462: // Alternative 6.
08463:
08464: yyResult = pKeyword(yyStart);
08465: yyError = yyResult.select(yyError);
08466: if (yyResult.hasValue("__const__")) {
08467: final String v$g$3 = "__const__";
08468:
08469: yyValue = GNode.create("ConstantQualifier", v$g$3);
08470: yyValue.setLocation(location(yyStart));
08471:
08472: return yyResult.createValue(yyValue, yyError);
08473: }
08474:
08475: // Alternative 7.
08476:
08477: yyResult = pKeyword(yyStart);
08478: yyError = yyResult.select(yyError);
08479: if (yyResult.hasValue("restrict")) {
08480: final String v$g$1 = "restrict";
08481:
08482: yyValue = GNode.create("RestrictQualifier", v$g$1);
08483: yyValue.setLocation(location(yyStart));
08484:
08485: return yyResult.createValue(yyValue, yyError);
08486: }
08487:
08488: // Alternative 8.
08489:
08490: yyResult = pKeyword(yyStart);
08491: yyError = yyResult.select(yyError);
08492: if (yyResult.hasValue("__restrict")) {
08493: final String v$g$2 = "__restrict";
08494:
08495: yyValue = GNode.create("RestrictQualifier", v$g$2);
08496: yyValue.setLocation(location(yyStart));
08497:
08498: return yyResult.createValue(yyValue, yyError);
08499: }
08500:
08501: // Alternative 9.
08502:
08503: yyResult = pKeyword(yyStart);
08504: yyError = yyResult.select(yyError);
08505: if (yyResult.hasValue("__restrict__")) {
08506: final String v$g$3 = "__restrict__";
08507:
08508: yyValue = GNode.create("RestrictQualifier", v$g$3);
08509: yyValue.setLocation(location(yyStart));
08510:
08511: return yyResult.createValue(yyValue, yyError);
08512: }
08513:
08514: // Done.
08515: yyError = yyError.select("type qualifier expected", yyStart);
08516: return yyError;
08517: }
08518:
08519: // =========================================================================
08520:
08521: /**
08522: * Parse nonterminal xtc.lang.jeannie.JeannieC.TypeSpecifier.
08523: *
08524: * @param yyStart The index.
08525: * @return The result.
08526: * @throws IOException Signals an I/O error.
08527: */
08528: private Result pTypeSpecifier(final int yyStart) throws IOException {
08529: Result yyResult;
08530: int yyBase;
08531: Node yyValue;
08532: ParseError yyError = ParseError.DUMMY;
08533:
08534: // Alternative <Enumeration>.
08535:
08536: yyResult = pEnumerationTypeSpecifier(yyStart);
08537: yyError = yyResult.select(yyError);
08538: if (yyResult.hasValue()) {
08539: yyValue = yyResult.semanticValue();
08540:
08541: return yyResult.createValue(yyValue, yyError);
08542: }
08543:
08544: // Alternative <Structure>.
08545:
08546: yyResult = pStructureTypeSpecifier(yyStart);
08547: yyError = yyResult.select(yyError);
08548: if (yyResult.hasValue()) {
08549: yyValue = yyResult.semanticValue();
08550:
08551: return yyResult.createValue(yyValue, yyError);
08552: }
08553:
08554: // Alternative <Union>.
08555:
08556: yyResult = pUnionTypeSpecifier(yyStart);
08557: yyError = yyResult.select(yyError);
08558: if (yyResult.hasValue()) {
08559: yyValue = yyResult.semanticValue();
08560:
08561: return yyResult.createValue(yyValue, yyError);
08562: }
08563:
08564: // Alternative <Floating>.
08565:
08566: yyResult = pFloatingPointTypeSpecifier(yyStart);
08567: yyError = yyResult.select(yyError);
08568: if (yyResult.hasValue()) {
08569: yyValue = yyResult.semanticValue();
08570:
08571: return yyResult.createValue(yyValue, yyError);
08572: }
08573:
08574: // Alternative <Integer>.
08575:
08576: yyResult = pIntegerTypeSpecifier(yyStart);
08577: yyError = yyResult.select(yyError);
08578: if (yyResult.hasValue()) {
08579: yyValue = yyResult.semanticValue();
08580:
08581: return yyResult.createValue(yyValue, yyError);
08582: }
08583:
08584: // Alternative <JavaTyp>.
08585:
08586: yyResult = pJavaType(yyStart);
08587: yyError = yyResult.select(yyError);
08588: if (yyResult.hasValue()) {
08589: yyValue = yyResult.semanticValue();
08590:
08591: return yyResult.createValue(yyValue, yyError);
08592: }
08593:
08594: // Alternative 7.
08595:
08596: yyResult = pCIdentifier$Identifier(yyStart);
08597: yyError = yyResult.select(yyError);
08598: if (yyResult.hasValue()) {
08599: final String id = yyResult.semanticValue();
08600:
08601: if (yyState.isType(toText(id))) {
08602:
08603: yyValue = GNode.create("TypedefName", id);
08604: yyValue.setLocation(location(yyStart));
08605:
08606: return yyResult.createValue(yyValue, yyError);
08607: }
08608: }
08609:
08610: // Alternative 8.
08611:
08612: yyResult = pTypeofKeyword(yyStart);
08613: yyError = yyResult.select(yyError);
08614: if (yyResult.hasValue()) {
08615:
08616: yyBase = yyResult.index;
08617: yyResult = pSymbol(yyBase);
08618: yyError = yyResult.select(yyError);
08619: if (yyResult.hasValue("(")) {
08620:
08621: final int yyChoice1 = yyResult.index;
08622:
08623: // Nested alternative 1.
08624:
08625: yyResult = pJeannieC$TypeName(yyChoice1);
08626: yyError = yyResult.select(yyError);
08627: if (yyResult.hasValue()) {
08628: final Node v$g$1 = yyResult.semanticValue();
08629:
08630: yyBase = yyResult.index;
08631: yyResult = pSymbol(yyBase);
08632: yyError = yyResult.select(yyError);
08633: if (yyResult.hasValue(")")) {
08634:
08635: yyValue = GNode
08636: .create("TypeofSpecifier", v$g$1);
08637: yyValue.setLocation(location(yyStart));
08638:
08639: return yyResult.createValue(yyValue, yyError);
08640: } else {
08641: yyError = yyError.select("\")\" expected",
08642: yyBase);
08643: }
08644: }
08645:
08646: // Nested alternative 2.
08647:
08648: yyResult = pCommaExpression(yyChoice1);
08649: yyError = yyResult.select(yyError);
08650: if (yyResult.hasValue()) {
08651: final Node v$g$2 = yyResult.semanticValue();
08652:
08653: yyBase = yyResult.index;
08654: yyResult = pSymbol(yyBase);
08655: yyError = yyResult.select(yyError);
08656: if (yyResult.hasValue(")")) {
08657:
08658: yyValue = GNode
08659: .create("TypeofSpecifier", v$g$2);
08660: yyValue.setLocation(location(yyStart));
08661:
08662: return yyResult.createValue(yyValue, yyError);
08663: } else {
08664: yyError = yyError.select("\")\" expected",
08665: yyBase);
08666: }
08667: }
08668: } else {
08669: yyError = yyError.select("\"(\" expected", yyBase);
08670: }
08671: }
08672:
08673: // Alternative 9.
08674:
08675: yyResult = pKeyword(yyStart);
08676: yyError = yyResult.select(yyError);
08677: if (yyResult.hasValue("void")) {
08678:
08679: yyValue = GNode.create("VoidTypeSpecifier", false);
08680: yyValue.setLocation(location(yyStart));
08681:
08682: return yyResult.createValue(yyValue, yyError);
08683: }
08684:
08685: // Alternative 10.
08686:
08687: yyResult = pKeyword(yyStart);
08688: yyError = yyResult.select(yyError);
08689: if (yyResult.hasValue("__builtin_va_list")) {
08690:
08691: yyValue = GNode.create("VarArgListSpecifier", false);
08692: yyValue.setLocation(location(yyStart));
08693:
08694: return yyResult.createValue(yyValue, yyError);
08695: }
08696:
08697: // Done.
08698: yyError = yyError.select("type specifier expected", yyStart);
08699: return yyError;
08700: }
08701:
08702: // =========================================================================
08703:
08704: /**
08705: * Parse nonterminal xtc.lang.jeannie.JeannieC.EnumerationTypeSpecifier.
08706: *
08707: * @param yyStart The index.
08708: * @return The result.
08709: * @throws IOException Signals an I/O error.
08710: */
08711: private Result pEnumerationTypeSpecifier(final int yyStart)
08712: throws IOException {
08713:
08714: Result yyResult;
08715: int yyBase;
08716: int yyOption1;
08717: Object yyOpValue1;
08718: Node yyValue;
08719: ParseError yyError = ParseError.DUMMY;
08720:
08721: // Alternative 1.
08722:
08723: yyResult = pKeyword(yyStart);
08724: yyError = yyResult.select(yyError);
08725: if (yyResult.hasValue("enum")) {
08726:
08727: yyOption1 = yyResult.index;
08728: yyOpValue1 = null;
08729:
08730: yyResult = pAttributeSpecifierList(yyOption1);
08731: yyError = yyResult.select(yyError);
08732: if (yyResult.hasValue()) {
08733: final Node v$el$1 = yyResult.semanticValue();
08734:
08735: yyOption1 = yyResult.index;
08736: yyOpValue1 = v$el$1;
08737: }
08738: { // Start scope for v$g$1.
08739: final Node v$g$1 = cast(yyOpValue1);
08740:
08741: final int yyChoice1 = yyOption1;
08742:
08743: // Nested alternative 1.
08744:
08745: yyOption1 = yyChoice1;
08746: yyOpValue1 = null;
08747:
08748: yyResult = pCIdentifier$Identifier(yyOption1);
08749: yyError = yyResult.select(yyError);
08750: if (yyResult.hasValue()) {
08751: final String v$el$2 = yyResult.semanticValue();
08752:
08753: yyOption1 = yyResult.index;
08754: yyOpValue1 = v$el$2;
08755: }
08756: { // Start scope for v$g$2.
08757: final String v$g$2 = cast(yyOpValue1);
08758:
08759: yyBase = yyOption1;
08760: yyResult = pSymbol(yyBase);
08761: yyError = yyResult.select(yyError);
08762: if (yyResult.hasValue("{")) {
08763:
08764: yyResult = pEnumeratorList(yyResult.index);
08765: yyError = yyResult.select(yyError);
08766: if (yyResult.hasValue()) {
08767: final Node v$g$3 = yyResult.semanticValue();
08768:
08769: yyOption1 = yyResult.index;
08770:
08771: yyBase = yyOption1;
08772: yyResult = pSymbol(yyBase);
08773: yyError = yyResult.select(yyError);
08774: if (yyResult.hasValue(",")) {
08775:
08776: yyOption1 = yyResult.index;
08777: } else {
08778: yyError = yyError.select(
08779: "\",\" expected", yyBase);
08780: }
08781:
08782: yyBase = yyOption1;
08783: yyResult = pSymbol(yyBase);
08784: yyError = yyResult.select(yyError);
08785: if (yyResult.hasValue("}")) {
08786:
08787: yyOption1 = yyResult.index;
08788: yyOpValue1 = null;
08789:
08790: yyResult = pAttributeSpecifierList(yyOption1);
08791: yyError = yyResult.select(yyError);
08792: if (yyResult.hasValue()) {
08793: final Node v$el$3 = yyResult
08794: .semanticValue();
08795:
08796: yyOption1 = yyResult.index;
08797: yyOpValue1 = v$el$3;
08798: }
08799: { // Start scope for v$g$4.
08800: final Node v$g$4 = cast(yyOpValue1);
08801:
08802: yyValue = GNode
08803: .create(
08804: "EnumerationTypeDefinition",
08805: v$g$1, v$g$2,
08806: v$g$3, v$g$4);
08807: yyValue
08808: .setLocation(location(yyStart));
08809:
08810: return new SemanticValue(yyValue,
08811: yyOption1, yyError);
08812: } // End scope for v$g$4.
08813: } else {
08814: yyError = yyError.select(
08815: "\"}\" expected", yyBase);
08816: }
08817: }
08818: } else {
08819: yyError = yyError.select("\"{\" expected",
08820: yyBase);
08821: }
08822: } // End scope for v$g$2.
08823:
08824: // Nested alternative 2.
08825:
08826: yyResult = pCIdentifier$Identifier(yyChoice1);
08827: yyError = yyResult.select(yyError);
08828: if (yyResult.hasValue()) {
08829: final String v$g$2 = yyResult.semanticValue();
08830:
08831: yyValue = GNode.create("EnumerationTypeReference",
08832: v$g$1, v$g$2);
08833: yyValue.setLocation(location(yyStart));
08834:
08835: return yyResult.createValue(yyValue, yyError);
08836: }
08837: } // End scope for v$g$1.
08838: }
08839:
08840: // Done.
08841: yyError = yyError.select("enumeration type specifier expected",
08842: yyStart);
08843: return yyError;
08844: }
08845:
08846: // =========================================================================
08847:
08848: /**
08849: * Parse nonterminal xtc.lang.jeannie.JeannieC.EnumeratorList.
08850: *
08851: * @param yyStart The index.
08852: * @return The result.
08853: * @throws IOException Signals an I/O error.
08854: */
08855: private Result pEnumeratorList(final int yyStart)
08856: throws IOException {
08857: Result yyResult;
08858: int yyBase;
08859: int yyRepetition1;
08860: Pair<Node> yyRepValue1;
08861: Node yyValue;
08862: ParseError yyError = ParseError.DUMMY;
08863:
08864: // Alternative <List>.
08865:
08866: yyResult = pEnumerator(yyStart);
08867: yyError = yyResult.select(yyError);
08868: if (yyResult.hasValue()) {
08869: final Node v$g$1 = yyResult.semanticValue();
08870:
08871: yyRepetition1 = yyResult.index;
08872: yyRepValue1 = Pair.empty();
08873: while (true) {
08874:
08875: yyBase = yyRepetition1;
08876: yyResult = pSymbol(yyBase);
08877: yyError = yyResult.select(yyError);
08878: if (yyResult.hasValue(",")) {
08879:
08880: yyResult = pEnumerator(yyResult.index);
08881: yyError = yyResult.select(yyError);
08882: if (yyResult.hasValue()) {
08883: final Node v$el$1 = yyResult.semanticValue();
08884:
08885: yyRepetition1 = yyResult.index;
08886: yyRepValue1 = new Pair<Node>(v$el$1,
08887: yyRepValue1);
08888: continue;
08889: }
08890: } else {
08891: yyError = yyError.select("\",\" expected", yyBase);
08892: }
08893: break;
08894: }
08895: { // Start scope for v$g$2.
08896: final Pair<Node> v$g$2 = yyRepValue1.reverse();
08897:
08898: yyValue = GNode.createFromPair("EnumeratorList", v$g$1,
08899: v$g$2);
08900: yyValue.setLocation(location(yyStart));
08901:
08902: return new SemanticValue(yyValue, yyRepetition1,
08903: yyError);
08904: } // End scope for v$g$2.
08905: }
08906:
08907: // Done.
08908: return yyError;
08909: }
08910:
08911: // =========================================================================
08912:
08913: /**
08914: * Parse nonterminal xtc.lang.jeannie.JeannieC.Enumerator.
08915: *
08916: * @param yyStart The index.
08917: * @return The result.
08918: * @throws IOException Signals an I/O error.
08919: */
08920: private Result pEnumerator(final int yyStart) throws IOException {
08921: Result yyResult;
08922: int yyBase;
08923: int yyOption1;
08924: Node yyOpValue1;
08925: Node yyValue;
08926: ParseError yyError = ParseError.DUMMY;
08927:
08928: // Alternative <Enumerator>.
08929:
08930: yyResult = pCIdentifier$Identifier(yyStart);
08931: yyError = yyResult.select(yyError);
08932: if (yyResult.hasValue()) {
08933: final String id = yyResult.semanticValue();
08934:
08935: yyState.bind(toText(id), false);
08936:
08937: yyOption1 = yyResult.index;
08938: yyOpValue1 = null;
08939:
08940: yyBase = yyOption1;
08941: yyResult = pSymbol(yyBase);
08942: yyError = yyResult.select(yyError);
08943: if (yyResult.hasValue("=")) {
08944:
08945: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
08946: yyError = yyResult.select(yyError);
08947: if (yyResult.hasValue()) {
08948: final Node v$el$1 = yyResult.semanticValue();
08949:
08950: yyOption1 = yyResult.index;
08951: yyOpValue1 = v$el$1;
08952: }
08953: } else {
08954: yyError = yyError.select("\"=\" expected", yyBase);
08955: }
08956: { // Start scope for v$g$1.
08957: final Node v$g$1 = yyOpValue1;
08958:
08959: yyValue = GNode.create("Enumerator", id, v$g$1);
08960: yyValue.setLocation(location(yyStart));
08961:
08962: return new SemanticValue(yyValue, yyOption1, yyError);
08963: } // End scope for v$g$1.
08964: }
08965:
08966: // Done.
08967: return yyError;
08968: }
08969:
08970: // =========================================================================
08971:
08972: /**
08973: * Parse nonterminal xtc.lang.jeannie.JeannieC.StructureTypeSpecifier.
08974: *
08975: * @param yyStart The index.
08976: * @return The result.
08977: * @throws IOException Signals an I/O error.
08978: */
08979: private Result pStructureTypeSpecifier(final int yyStart)
08980: throws IOException {
08981:
08982: Result yyResult;
08983: int yyBase;
08984: int yyOption1;
08985: Object yyOpValue1;
08986: Node yyValue;
08987: ParseError yyError = ParseError.DUMMY;
08988:
08989: // Alternative 1.
08990:
08991: yyResult = pKeyword(yyStart);
08992: yyError = yyResult.select(yyError);
08993: if (yyResult.hasValue("struct")) {
08994:
08995: yyOption1 = yyResult.index;
08996: yyOpValue1 = null;
08997:
08998: yyResult = pAttributeSpecifierList(yyOption1);
08999: yyError = yyResult.select(yyError);
09000: if (yyResult.hasValue()) {
09001: final Node v$el$1 = yyResult.semanticValue();
09002:
09003: yyOption1 = yyResult.index;
09004: yyOpValue1 = v$el$1;
09005: }
09006: { // Start scope for v$g$1.
09007: final Node v$g$1 = cast(yyOpValue1);
09008:
09009: final int yyChoice1 = yyOption1;
09010:
09011: // Nested alternative 1.
09012:
09013: yyOption1 = yyChoice1;
09014: yyOpValue1 = null;
09015:
09016: yyResult = pCIdentifier$Identifier(yyOption1);
09017: yyError = yyResult.select(yyError);
09018: if (yyResult.hasValue()) {
09019: final String v$el$2 = yyResult.semanticValue();
09020:
09021: yyOption1 = yyResult.index;
09022: yyOpValue1 = v$el$2;
09023: }
09024: { // Start scope for v$g$2.
09025: final String v$g$2 = cast(yyOpValue1);
09026:
09027: yyBase = yyOption1;
09028: yyResult = pSymbol(yyBase);
09029: yyError = yyResult.select(yyError);
09030: if (yyResult.hasValue("{")) {
09031:
09032: yyResult = pPushScope(yyResult.index);
09033: yyError = yyResult.select(yyError);
09034: if (yyResult.hasValue()) {
09035:
09036: yyResult = pEnterStructure(yyResult.index);
09037: yyError = yyResult.select(yyError);
09038: if (yyResult.hasValue()) {
09039:
09040: yyResult = pStructureDeclarationList(yyResult.index);
09041: yyError = yyResult.select(yyError);
09042: if (yyResult.hasValue()) {
09043: final Node v$g$3 = yyResult
09044: .semanticValue();
09045:
09046: yyBase = yyResult.index;
09047: yyResult = pSymbol(yyBase);
09048: yyError = yyResult.select(yyError);
09049: if (yyResult.hasValue("}")) {
09050:
09051: yyResult = pExitStructure(yyResult.index);
09052: yyError = yyResult
09053: .select(yyError);
09054: if (yyResult.hasValue()) {
09055:
09056: yyResult = pPopScope(yyResult.index);
09057: yyError = yyResult
09058: .select(yyError);
09059: if (yyResult.hasValue()) {
09060:
09061: yyOption1 = yyResult.index;
09062: yyOpValue1 = null;
09063:
09064: yyResult = pAttributeSpecifierList(yyOption1);
09065: yyError = yyResult
09066: .select(yyError);
09067: if (yyResult.hasValue()) {
09068: final Node v$el$3 = yyResult
09069: .semanticValue();
09070:
09071: yyOption1 = yyResult.index;
09072: yyOpValue1 = v$el$3;
09073: }
09074: { // Start scope for v$g$4.
09075: final Node v$g$4 = cast(yyOpValue1);
09076:
09077: yyValue = GNode
09078: .create(
09079: "StructureTypeDefinition",
09080: v$g$1,
09081: v$g$2,
09082: v$g$3,
09083: v$g$4);
09084: yyValue
09085: .setLocation(location(yyStart));
09086:
09087: return new SemanticValue(
09088: yyValue,
09089: yyOption1,
09090: yyError);
09091: } // End scope for v$g$4.
09092: }
09093: }
09094: } else {
09095: yyError = yyError.select(
09096: "\"}\" expected",
09097: yyBase);
09098: }
09099: }
09100: }
09101: }
09102: } else {
09103: yyError = yyError.select("\"{\" expected",
09104: yyBase);
09105: }
09106: } // End scope for v$g$2.
09107:
09108: // Nested alternative 2.
09109:
09110: yyResult = pCIdentifier$Identifier(yyChoice1);
09111: yyError = yyResult.select(yyError);
09112: if (yyResult.hasValue()) {
09113: final String v$g$2 = yyResult.semanticValue();
09114:
09115: yyValue = GNode.create("StructureTypeReference",
09116: v$g$1, v$g$2);
09117: yyValue.setLocation(location(yyStart));
09118:
09119: return yyResult.createValue(yyValue, yyError);
09120: }
09121: } // End scope for v$g$1.
09122: }
09123:
09124: // Done.
09125: yyError = yyError.select("structure type specifier expected",
09126: yyStart);
09127: return yyError;
09128: }
09129:
09130: // =========================================================================
09131:
09132: /**
09133: * Parse nonterminal xtc.lang.jeannie.JeannieC.UnionTypeSpecifier.
09134: *
09135: * @param yyStart The index.
09136: * @return The result.
09137: * @throws IOException Signals an I/O error.
09138: */
09139: private Result pUnionTypeSpecifier(final int yyStart)
09140: throws IOException {
09141: Result yyResult;
09142: int yyBase;
09143: int yyOption1;
09144: Object yyOpValue1;
09145: Node yyValue;
09146: ParseError yyError = ParseError.DUMMY;
09147:
09148: // Alternative 1.
09149:
09150: yyResult = pKeyword(yyStart);
09151: yyError = yyResult.select(yyError);
09152: if (yyResult.hasValue("union")) {
09153:
09154: yyOption1 = yyResult.index;
09155: yyOpValue1 = null;
09156:
09157: yyResult = pAttributeSpecifierList(yyOption1);
09158: yyError = yyResult.select(yyError);
09159: if (yyResult.hasValue()) {
09160: final Node v$el$1 = yyResult.semanticValue();
09161:
09162: yyOption1 = yyResult.index;
09163: yyOpValue1 = v$el$1;
09164: }
09165: { // Start scope for v$g$1.
09166: final Node v$g$1 = cast(yyOpValue1);
09167:
09168: final int yyChoice1 = yyOption1;
09169:
09170: // Nested alternative 1.
09171:
09172: yyOption1 = yyChoice1;
09173: yyOpValue1 = null;
09174:
09175: yyResult = pCIdentifier$Identifier(yyOption1);
09176: yyError = yyResult.select(yyError);
09177: if (yyResult.hasValue()) {
09178: final String v$el$2 = yyResult.semanticValue();
09179:
09180: yyOption1 = yyResult.index;
09181: yyOpValue1 = v$el$2;
09182: }
09183: { // Start scope for v$g$2.
09184: final String v$g$2 = cast(yyOpValue1);
09185:
09186: yyBase = yyOption1;
09187: yyResult = pSymbol(yyBase);
09188: yyError = yyResult.select(yyError);
09189: if (yyResult.hasValue("{")) {
09190:
09191: yyResult = pPushScope(yyResult.index);
09192: yyError = yyResult.select(yyError);
09193: if (yyResult.hasValue()) {
09194:
09195: yyResult = pEnterStructure(yyResult.index);
09196: yyError = yyResult.select(yyError);
09197: if (yyResult.hasValue()) {
09198:
09199: yyResult = pStructureDeclarationList(yyResult.index);
09200: yyError = yyResult.select(yyError);
09201: if (yyResult.hasValue()) {
09202: final Node v$g$3 = yyResult
09203: .semanticValue();
09204:
09205: yyBase = yyResult.index;
09206: yyResult = pSymbol(yyBase);
09207: yyError = yyResult.select(yyError);
09208: if (yyResult.hasValue("}")) {
09209:
09210: yyResult = pExitStructure(yyResult.index);
09211: yyError = yyResult
09212: .select(yyError);
09213: if (yyResult.hasValue()) {
09214:
09215: yyResult = pPopScope(yyResult.index);
09216: yyError = yyResult
09217: .select(yyError);
09218: if (yyResult.hasValue()) {
09219:
09220: yyOption1 = yyResult.index;
09221: yyOpValue1 = null;
09222:
09223: yyResult = pAttributeSpecifierList(yyOption1);
09224: yyError = yyResult
09225: .select(yyError);
09226: if (yyResult.hasValue()) {
09227: final Node v$el$3 = yyResult
09228: .semanticValue();
09229:
09230: yyOption1 = yyResult.index;
09231: yyOpValue1 = v$el$3;
09232: }
09233: { // Start scope for v$g$4.
09234: final Node v$g$4 = cast(yyOpValue1);
09235:
09236: yyValue = GNode
09237: .create(
09238: "UnionTypeDefinition",
09239: v$g$1,
09240: v$g$2,
09241: v$g$3,
09242: v$g$4);
09243: yyValue
09244: .setLocation(location(yyStart));
09245:
09246: return new SemanticValue(
09247: yyValue,
09248: yyOption1,
09249: yyError);
09250: } // End scope for v$g$4.
09251: }
09252: }
09253: } else {
09254: yyError = yyError.select(
09255: "\"}\" expected",
09256: yyBase);
09257: }
09258: }
09259: }
09260: }
09261: } else {
09262: yyError = yyError.select("\"{\" expected",
09263: yyBase);
09264: }
09265: } // End scope for v$g$2.
09266:
09267: // Nested alternative 2.
09268:
09269: yyResult = pCIdentifier$Identifier(yyChoice1);
09270: yyError = yyResult.select(yyError);
09271: if (yyResult.hasValue()) {
09272: final String v$g$2 = yyResult.semanticValue();
09273:
09274: yyValue = GNode.create("UnionTypeReference", v$g$1,
09275: v$g$2);
09276: yyValue.setLocation(location(yyStart));
09277:
09278: return yyResult.createValue(yyValue, yyError);
09279: }
09280: } // End scope for v$g$1.
09281: }
09282:
09283: // Done.
09284: yyError = yyError.select("union type specifier expected",
09285: yyStart);
09286: return yyError;
09287: }
09288:
09289: // =========================================================================
09290:
09291: /**
09292: * Parse nonterminal xtc.lang.jeannie.JeannieC.StructureDeclarationList.
09293: *
09294: * @param yyStart The index.
09295: * @return The result.
09296: * @throws IOException Signals an I/O error.
09297: */
09298: private Result pStructureDeclarationList(final int yyStart)
09299: throws IOException {
09300:
09301: Result yyResult;
09302: int yyRepetition1;
09303: boolean yyRepeated1;
09304: Pair<Node> yyRepValue1;
09305: Node yyValue;
09306: ParseError yyError = ParseError.DUMMY;
09307:
09308: // Alternative <Regular>.
09309:
09310: yyRepetition1 = yyStart;
09311: yyRepeated1 = false;
09312: yyRepValue1 = Pair.empty();
09313: while (true) {
09314:
09315: yyResult = pAnnotatedStructureDeclaration(yyRepetition1);
09316: yyError = yyResult.select(yyError);
09317: if (yyResult.hasValue()) {
09318: final Node v$el$1 = yyResult.semanticValue();
09319:
09320: yyRepetition1 = yyResult.index;
09321: yyRepeated1 = true;
09322: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
09323: continue;
09324: }
09325: break;
09326: }
09327:
09328: if (yyRepeated1) {
09329: final Pair<Node> v$g$1 = yyRepValue1.reverse();
09330:
09331: yyResult = pAnnotations(yyRepetition1);
09332: yyError = yyResult.select(yyError);
09333: if (yyResult.hasValue()) {
09334: final Node v$g$2 = yyResult.semanticValue();
09335:
09336: yyValue = GNode.create("StructureDeclarationList",
09337: v$g$1.size() + 1).addAll(v$g$1).add(v$g$2);
09338: yyValue.setLocation(location(yyStart));
09339:
09340: return yyResult.createValue(yyValue, yyError);
09341: }
09342: }
09343:
09344: // Alternative <Empty>.
09345:
09346: if (GCC) {
09347:
09348: yyResult = pAnnotations(yyStart);
09349: yyError = yyResult.select(yyError);
09350: if (yyResult.hasValue()) {
09351: final Node v$g$3 = yyResult.semanticValue();
09352:
09353: yyValue = GNode.create("StructureDeclarationList",
09354: v$g$3);
09355: yyValue.setLocation(location(yyStart));
09356:
09357: return yyResult.createValue(yyValue, yyError);
09358: }
09359: }
09360:
09361: // Done.
09362: yyError = yyError.select("structure declaration list expected",
09363: yyStart);
09364: return yyError;
09365: }
09366:
09367: // =========================================================================
09368:
09369: /**
09370: * Parse nonterminal
09371: * xtc.lang.jeannie.JeannieC.AnnotatedStructureDeclaration.
09372: *
09373: * @param yyStart The index.
09374: * @return The result.
09375: * @throws IOException Signals an I/O error.
09376: */
09377: private Result pAnnotatedStructureDeclaration(final int yyStart)
09378: throws IOException {
09379:
09380: Result yyResult;
09381: Node yyValue;
09382: ParseError yyError = ParseError.DUMMY;
09383:
09384: // Start a state modification.
09385: yyState.start();
09386:
09387: // Alternative 1.
09388:
09389: yyState.mark();
09390:
09391: yyResult = pStructureDeclaration(yyStart);
09392: yyError = yyResult.select(yyError);
09393: if (yyResult.hasValue()) {
09394: final Node d = yyResult.semanticValue();
09395:
09396: yyValue = yyState.annotate(d);
09397:
09398: // Commit the state modification.
09399: yyState.commit();
09400:
09401: setLocation(yyValue, yyStart);
09402: return yyResult.createValue(yyValue, yyError);
09403: }
09404:
09405: // Abort the state modification.
09406: yyState.abort();
09407:
09408: // Done.
09409: return yyError;
09410: }
09411:
09412: // =========================================================================
09413:
09414: /**
09415: * Parse nonterminal xtc.lang.jeannie.JeannieC.StructureDeclaration.
09416: *
09417: * @param yyStart The index.
09418: * @return The result.
09419: * @throws IOException Signals an I/O error.
09420: */
09421: private Result pStructureDeclaration(final int yyStart)
09422: throws IOException {
09423: Result yyResult;
09424: int yyBase;
09425: int yyRepetition1;
09426: boolean yyRepeated1;
09427: int yyOption1;
09428: String yyOpValue1;
09429: Node yyValue;
09430: ParseError yyError = ParseError.DUMMY;
09431:
09432: // Alternative <Declaration>.
09433:
09434: yyOption1 = yyStart;
09435: yyOpValue1 = null;
09436:
09437: yyBase = yyOption1;
09438: yyResult = pKeyword(yyBase);
09439: yyError = yyResult.select(yyError);
09440: if (yyResult.hasValue("__extension__")) {
09441: final String v$el$1 = "__extension__";
09442:
09443: yyOption1 = yyResult.index;
09444: yyOpValue1 = v$el$1;
09445: } else {
09446: yyError = yyError.select("\"__extension__\" expected",
09447: yyBase);
09448: }
09449: { // Start scope for v$g$1.
09450: final String v$g$1 = yyOpValue1;
09451:
09452: yyResult = pSpecifierQualifierList(yyOption1);
09453: yyError = yyResult.select(yyError);
09454: if (yyResult.hasValue()) {
09455: final Node v$g$2 = yyResult.semanticValue();
09456:
09457: yyResult = pOptionalStructureDeclaratorList(yyResult.index);
09458: yyError = yyResult.select(yyError);
09459: if (yyResult.hasValue()) {
09460: final Node v$g$3 = yyResult.semanticValue();
09461:
09462: yyBase = yyResult.index;
09463: yyResult = pSymbol(yyBase);
09464: yyError = yyResult.select(yyError);
09465: if (yyResult.hasValue(";")) {
09466:
09467: yyOption1 = yyResult.index;
09468:
09469: if (GCC) {
09470:
09471: yyRepetition1 = yyOption1;
09472: yyRepeated1 = false;
09473: while (true) {
09474:
09475: yyBase = yyRepetition1;
09476: yyResult = pSymbol(yyBase);
09477: yyError = yyResult.select(yyError);
09478: if (yyResult.hasValue(";")) {
09479:
09480: yyRepetition1 = yyResult.index;
09481: yyRepeated1 = true;
09482: continue;
09483: } else {
09484: yyError = yyError.select(
09485: "\";\" expected", yyBase);
09486: }
09487: break;
09488: }
09489:
09490: if (yyRepeated1) {
09491:
09492: yyOption1 = yyRepetition1;
09493: }
09494: }
09495:
09496: yyValue = GNode.create("StructureDeclaration",
09497: v$g$1, v$g$2, v$g$3);
09498: yyValue.setLocation(location(yyStart));
09499:
09500: return new SemanticValue(yyValue, yyOption1,
09501: yyError);
09502: } else {
09503: yyError = yyError.select("\";\" expected",
09504: yyBase);
09505: }
09506: }
09507: }
09508: } // End scope for v$g$1.
09509:
09510: // Done.
09511: yyError = yyError.select("structure declaration expected",
09512: yyStart);
09513: return yyError;
09514: }
09515:
09516: // =========================================================================
09517:
09518: /**
09519: * Parse nonterminal xtc.lang.jeannie.JeannieC.SpecifierQualifierList.
09520: *
09521: * @param yyStart The index.
09522: * @return The result.
09523: * @throws IOException Signals an I/O error.
09524: */
09525: private Result pSpecifierQualifierList(final int yyStart)
09526: throws IOException {
09527:
09528: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
09529: if (null == yyColumn.chunk3)
09530: yyColumn.chunk3 = new Chunk3();
09531: if (null == yyColumn.chunk3.fSpecifierQualifierList)
09532: yyColumn.chunk3.fSpecifierQualifierList = pSpecifierQualifierList$1(yyStart);
09533: return yyColumn.chunk3.fSpecifierQualifierList;
09534: }
09535:
09536: /** Actually parse xtc.lang.jeannie.JeannieC.SpecifierQualifierList. */
09537: private Result pSpecifierQualifierList$1(final int yyStart)
09538: throws IOException {
09539:
09540: Result yyResult;
09541: Node yyValue;
09542: ParseError yyError = ParseError.DUMMY;
09543:
09544: // Alternative 1.
09545:
09546: yyResult = pSpecifierQualifierPlus(yyStart);
09547: yyError = yyResult.select(yyError);
09548: if (yyResult.hasValue()) {
09549: final Pair<Node> v$g$1 = yyResult.semanticValue();
09550:
09551: yyValue = GNode.createFromPair("SpecifierQualifierList",
09552: v$g$1);
09553: yyValue.setLocation(location(yyStart));
09554:
09555: return yyResult.createValue(yyValue, yyError);
09556: }
09557:
09558: // Done.
09559: return yyError;
09560: }
09561:
09562: // =========================================================================
09563:
09564: /**
09565: * Parse nonterminal xtc.lang.jeannie.JeannieC.SpecifierQualifierPlus.
09566: *
09567: * @param yyStart The index.
09568: * @return The result.
09569: * @throws IOException Signals an I/O error.
09570: */
09571: private Result pSpecifierQualifierPlus(final int yyStart)
09572: throws IOException {
09573:
09574: Result yyResult;
09575: int yyRepetition1;
09576: boolean yyRepeated1;
09577: Pair<Node> yyRepValue1;
09578: Pair<Node> yyValue;
09579: ParseError yyError = ParseError.DUMMY;
09580:
09581: // Alternative 1.
09582:
09583: yyRepetition1 = yyStart;
09584: yyRepeated1 = false;
09585: yyRepValue1 = Pair.empty();
09586: while (true) {
09587:
09588: yyResult = pSpecifierQualifier(yyRepetition1);
09589: yyError = yyResult.select(yyError);
09590: if (yyResult.hasValue()) {
09591: final Node v$el$1 = yyResult.semanticValue();
09592:
09593: yyRepetition1 = yyResult.index;
09594: yyRepeated1 = true;
09595: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
09596: continue;
09597: }
09598: break;
09599: }
09600:
09601: if (yyRepeated1) {
09602: yyValue = yyRepValue1.reverse();
09603:
09604: return new SemanticValue(yyValue, yyRepetition1, yyError);
09605: }
09606:
09607: // Done.
09608: return yyError;
09609: }
09610:
09611: // =========================================================================
09612:
09613: /**
09614: * Parse nonterminal xtc.lang.jeannie.JeannieC.SpecifierQualifier.
09615: *
09616: * @param yyStart The index.
09617: * @return The result.
09618: * @throws IOException Signals an I/O error.
09619: */
09620: private Result pSpecifierQualifier(final int yyStart)
09621: throws IOException {
09622: Result yyResult;
09623: Node yyValue;
09624: ParseError yyError = ParseError.DUMMY;
09625:
09626: // Alternative <TypeSpecifier>.
09627:
09628: yyResult = pTypeSpecifier(yyStart);
09629: yyError = yyResult.select(yyError);
09630: if (yyResult.hasValue()) {
09631: yyValue = yyResult.semanticValue();
09632:
09633: yyResult = pTypeSpecContext(yyResult.index);
09634: yyError = yyResult.select(yyError);
09635: if (yyResult.hasValue()) {
09636:
09637: return yyResult.createValue(yyValue, yyError);
09638: }
09639: }
09640:
09641: // Alternative <TypeQualifier>.
09642:
09643: yyResult = pTypeQualifier(yyStart);
09644: yyError = yyResult.select(yyError);
09645: if (yyResult.hasValue()) {
09646: yyValue = yyResult.semanticValue();
09647:
09648: return yyResult.createValue(yyValue, yyError);
09649: }
09650:
09651: // Alternative <Attribute>.
09652:
09653: yyResult = pAttributeSpecifier(yyStart);
09654: yyError = yyResult.select(yyError);
09655: if (yyResult.hasValue()) {
09656: yyValue = yyResult.semanticValue();
09657:
09658: return yyResult.createValue(yyValue, yyError);
09659: }
09660:
09661: // Done.
09662: return yyError;
09663: }
09664:
09665: // =========================================================================
09666:
09667: /**
09668: * Parse nonterminal
09669: * xtc.lang.jeannie.JeannieC.OptionalStructureDeclaratorList.
09670: *
09671: * @param yyStart The index.
09672: * @return The result.
09673: * @throws IOException Signals an I/O error.
09674: */
09675: private Result pOptionalStructureDeclaratorList(final int yyStart)
09676: throws IOException {
09677:
09678: Result yyResult;
09679: Node yyValue;
09680: ParseError yyError = ParseError.DUMMY;
09681:
09682: // Alternative <List>.
09683:
09684: yyResult = pStructureDeclaratorList(yyStart);
09685: yyError = yyResult.select(yyError);
09686: if (yyResult.hasValue()) {
09687: yyValue = yyResult.semanticValue();
09688:
09689: return yyResult.createValue(yyValue, yyError);
09690: }
09691:
09692: // Alternative <Null>.
09693:
09694: if (GCC) {
09695: { // Start scope for yyValue.
09696: yyValue = null;
09697:
09698: return new SemanticValue(yyValue, yyStart, yyError);
09699: } // End scope for yyValue.
09700: }
09701:
09702: // Done.
09703: yyError = yyError.select(
09704: "optional structure declarator list expected", yyStart);
09705: return yyError;
09706: }
09707:
09708: // =========================================================================
09709:
09710: /**
09711: * Parse nonterminal xtc.lang.jeannie.JeannieC.StructureDeclaratorList.
09712: *
09713: * @param yyStart The index.
09714: * @return The result.
09715: * @throws IOException Signals an I/O error.
09716: */
09717: private Result pStructureDeclaratorList(final int yyStart)
09718: throws IOException {
09719:
09720: Result yyResult;
09721: int yyBase;
09722: int yyRepetition1;
09723: Pair<Node> yyRepValue1;
09724: Node yyValue;
09725: ParseError yyError = ParseError.DUMMY;
09726:
09727: // Alternative <List>.
09728:
09729: yyResult = pStructureDeclarator(yyStart);
09730: yyError = yyResult.select(yyError);
09731: if (yyResult.hasValue()) {
09732: final Node v$g$1 = yyResult.semanticValue();
09733:
09734: yyRepetition1 = yyResult.index;
09735: yyRepValue1 = Pair.empty();
09736: while (true) {
09737:
09738: yyBase = yyRepetition1;
09739: yyResult = pSymbol(yyBase);
09740: yyError = yyResult.select(yyError);
09741: if (yyResult.hasValue(",")) {
09742:
09743: yyResult = pStructureDeclarator(yyResult.index);
09744: yyError = yyResult.select(yyError);
09745: if (yyResult.hasValue()) {
09746: final Node v$el$1 = yyResult.semanticValue();
09747:
09748: yyRepetition1 = yyResult.index;
09749: yyRepValue1 = new Pair<Node>(v$el$1,
09750: yyRepValue1);
09751: continue;
09752: }
09753: } else {
09754: yyError = yyError.select("\",\" expected", yyBase);
09755: }
09756: break;
09757: }
09758: { // Start scope for v$g$2.
09759: final Pair<Node> v$g$2 = yyRepValue1.reverse();
09760:
09761: yyValue = GNode.createFromPair(
09762: "StructureDeclaratorList", v$g$1, v$g$2);
09763: yyValue.setLocation(location(yyStart));
09764:
09765: return new SemanticValue(yyValue, yyRepetition1,
09766: yyError);
09767: } // End scope for v$g$2.
09768: }
09769:
09770: // Done.
09771: return yyError;
09772: }
09773:
09774: // =========================================================================
09775:
09776: /**
09777: * Parse nonterminal xtc.lang.jeannie.JeannieC.StructureDeclarator.
09778: *
09779: * @param yyStart The index.
09780: * @return The result.
09781: * @throws IOException Signals an I/O error.
09782: */
09783: private Result pStructureDeclarator(final int yyStart)
09784: throws IOException {
09785: Result yyResult;
09786: int yyBase;
09787: int yyOption1;
09788: Node yyOpValue1;
09789: Node yyValue;
09790: ParseError yyError = ParseError.DUMMY;
09791:
09792: // Alternative 1.
09793:
09794: yyOption1 = yyStart;
09795: yyOpValue1 = null;
09796:
09797: yyResult = pAttributeSpecifierList(yyOption1);
09798: yyError = yyResult.select(yyError);
09799: if (yyResult.hasValue()) {
09800: final Node v$el$1 = yyResult.semanticValue();
09801:
09802: yyOption1 = yyResult.index;
09803: yyOpValue1 = v$el$1;
09804: }
09805: { // Start scope for v$g$1.
09806: final Node v$g$1 = yyOpValue1;
09807:
09808: yyOpValue1 = null;
09809:
09810: yyResult = pJeannieC$Declarator(yyOption1);
09811: yyError = yyResult.select(yyError);
09812: if (yyResult.hasValue()) {
09813: final Node v$el$2 = yyResult.semanticValue();
09814:
09815: yyOption1 = yyResult.index;
09816: yyOpValue1 = v$el$2;
09817: }
09818: { // Start scope for v$g$2.
09819: final Node v$g$2 = yyOpValue1;
09820:
09821: yyBase = yyOption1;
09822: yyResult = pSymbol(yyBase);
09823: yyError = yyResult.select(yyError);
09824: if (yyResult.hasValue(":")) {
09825:
09826: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
09827: yyError = yyResult.select(yyError);
09828: if (yyResult.hasValue()) {
09829: final Node v$g$3 = yyResult.semanticValue();
09830:
09831: yyOption1 = yyResult.index;
09832: yyOpValue1 = null;
09833:
09834: yyResult = pAttributeSpecifierList(yyOption1);
09835: yyError = yyResult.select(yyError);
09836: if (yyResult.hasValue()) {
09837: final Node v$el$3 = yyResult
09838: .semanticValue();
09839:
09840: yyOption1 = yyResult.index;
09841: yyOpValue1 = v$el$3;
09842: }
09843: { // Start scope for v$g$4.
09844: final Node v$g$4 = yyOpValue1;
09845:
09846: yyValue = GNode.create("BitField", v$g$1,
09847: v$g$2, v$g$3, v$g$4);
09848: yyValue.setLocation(location(yyStart));
09849:
09850: return new SemanticValue(yyValue,
09851: yyOption1, yyError);
09852: } // End scope for v$g$4.
09853: }
09854: } else {
09855: yyError = yyError.select("\":\" expected", yyBase);
09856: }
09857: } // End scope for v$g$2.
09858: } // End scope for v$g$1.
09859:
09860: // Alternative <Simple>.
09861:
09862: yyResult = pAttributedDeclarator(yyStart);
09863: yyError = yyResult.select(yyError);
09864: if (yyResult.hasValue()) {
09865: yyValue = yyResult.semanticValue();
09866:
09867: return yyResult.createValue(yyValue, yyError);
09868: }
09869:
09870: // Done.
09871: return yyError;
09872: }
09873:
09874: // =========================================================================
09875:
09876: /**
09877: * Parse nonterminal xtc.lang.jeannie.JeannieC.AttributedDeclarator.
09878: *
09879: * @param yyStart The index.
09880: * @return The result.
09881: * @throws IOException Signals an I/O error.
09882: */
09883: private Result pAttributedDeclarator(final int yyStart)
09884: throws IOException {
09885: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
09886: if (null == yyColumn.chunk3)
09887: yyColumn.chunk3 = new Chunk3();
09888: if (null == yyColumn.chunk3.fAttributedDeclarator)
09889: yyColumn.chunk3.fAttributedDeclarator = pAttributedDeclarator$1(yyStart);
09890: return yyColumn.chunk3.fAttributedDeclarator;
09891: }
09892:
09893: /** Actually parse xtc.lang.jeannie.JeannieC.AttributedDeclarator. */
09894: private Result pAttributedDeclarator$1(final int yyStart)
09895: throws IOException {
09896:
09897: Result yyResult;
09898: int yyOption1;
09899: Node yyOpValue1;
09900: Node yyValue;
09901: ParseError yyError = ParseError.DUMMY;
09902:
09903: // Alternative 1.
09904:
09905: yyOption1 = yyStart;
09906: yyOpValue1 = null;
09907:
09908: yyResult = pAttributeSpecifierList(yyOption1);
09909: yyError = yyResult.select(yyError);
09910: if (yyResult.hasValue()) {
09911: final Node v$el$1 = yyResult.semanticValue();
09912:
09913: yyOption1 = yyResult.index;
09914: yyOpValue1 = v$el$1;
09915: }
09916: { // Start scope for v$g$1.
09917: final Node v$g$1 = yyOpValue1;
09918:
09919: yyResult = pJeannieC$Declarator(yyOption1);
09920: yyError = yyResult.select(yyError);
09921: if (yyResult.hasValue()) {
09922: final Node v$g$2 = yyResult.semanticValue();
09923:
09924: yyOption1 = yyResult.index;
09925: yyOpValue1 = null;
09926:
09927: yyResult = pAttributeSpecifierList(yyOption1);
09928: yyError = yyResult.select(yyError);
09929: if (yyResult.hasValue()) {
09930: final Node v$el$2 = yyResult.semanticValue();
09931:
09932: yyOption1 = yyResult.index;
09933: yyOpValue1 = v$el$2;
09934: }
09935: { // Start scope for v$g$3.
09936: final Node v$g$3 = yyOpValue1;
09937:
09938: yyValue = GNode.create("AttributedDeclarator",
09939: v$g$1, v$g$2, v$g$3);
09940: yyValue.setLocation(location(yyStart));
09941:
09942: return new SemanticValue(yyValue, yyOption1,
09943: yyError);
09944: } // End scope for v$g$3.
09945: }
09946: } // End scope for v$g$1.
09947:
09948: // Done.
09949: return yyError;
09950: }
09951:
09952: // =========================================================================
09953:
09954: /**
09955: * Parse nonterminal xtc.lang.jeannie.JeannieC.Declarator.
09956: *
09957: * @param yyStart The index.
09958: * @return The result.
09959: * @throws IOException Signals an I/O error.
09960: */
09961: private Result pJeannieC$Declarator(final int yyStart)
09962: throws IOException {
09963: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
09964: if (null == yyColumn.chunk4)
09965: yyColumn.chunk4 = new Chunk4();
09966: if (null == yyColumn.chunk4.fJeannieC$Declarator)
09967: yyColumn.chunk4.fJeannieC$Declarator = pJeannieC$Declarator$1(yyStart);
09968: return yyColumn.chunk4.fJeannieC$Declarator;
09969: }
09970:
09971: /** Actually parse xtc.lang.jeannie.JeannieC.Declarator. */
09972: private Result pJeannieC$Declarator$1(final int yyStart)
09973: throws IOException {
09974:
09975: Result yyResult;
09976: Node yyValue;
09977: ParseError yyError = ParseError.DUMMY;
09978:
09979: // Alternative <Pointer>.
09980:
09981: yyResult = pPointerDeclarator(yyStart);
09982: yyError = yyResult.select(yyError);
09983: if (yyResult.hasValue()) {
09984: yyValue = yyResult.semanticValue();
09985:
09986: return yyResult.createValue(yyValue, yyError);
09987: }
09988:
09989: // Alternative <Direct>.
09990:
09991: yyResult = pDirectDeclarator(yyStart);
09992: yyError = yyResult.select(yyError);
09993: if (yyResult.hasValue()) {
09994: yyValue = yyResult.semanticValue();
09995:
09996: return yyResult.createValue(yyValue, yyError);
09997: }
09998:
09999: // Done.
10000: return yyError;
10001: }
10002:
10003: // =========================================================================
10004:
10005: /**
10006: * Parse nonterminal xtc.lang.jeannie.JeannieC.PointerDeclarator.
10007: *
10008: * @param yyStart The index.
10009: * @return The result.
10010: * @throws IOException Signals an I/O error.
10011: */
10012: private Result pPointerDeclarator(final int yyStart)
10013: throws IOException {
10014: Result yyResult;
10015: Node yyValue;
10016: ParseError yyError = ParseError.DUMMY;
10017:
10018: // Alternative 1.
10019:
10020: yyResult = pPointer(yyStart);
10021: yyError = yyResult.select(yyError);
10022: if (yyResult.hasValue()) {
10023: final Node v$g$1 = yyResult.semanticValue();
10024:
10025: yyResult = pDirectDeclarator(yyResult.index);
10026: yyError = yyResult.select(yyError);
10027: if (yyResult.hasValue()) {
10028: final Node v$g$2 = yyResult.semanticValue();
10029:
10030: yyValue = GNode.create("PointerDeclarator", v$g$1,
10031: v$g$2);
10032: yyValue.setLocation(location(yyStart));
10033:
10034: return yyResult.createValue(yyValue, yyError);
10035: }
10036: }
10037:
10038: // Done.
10039: return yyError;
10040: }
10041:
10042: // =========================================================================
10043:
10044: /**
10045: * Parse nonterminal xtc.lang.jeannie.JeannieC.Pointer.
10046: *
10047: * @param yyStart The index.
10048: * @return The result.
10049: * @throws IOException Signals an I/O error.
10050: */
10051: private Result pPointer(final int yyStart) throws IOException {
10052: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
10053: if (null == yyColumn.chunk4)
10054: yyColumn.chunk4 = new Chunk4();
10055: if (null == yyColumn.chunk4.fPointer)
10056: yyColumn.chunk4.fPointer = pPointer$1(yyStart);
10057: return yyColumn.chunk4.fPointer;
10058: }
10059:
10060: /** Actually parse xtc.lang.jeannie.JeannieC.Pointer. */
10061: private Result pPointer$1(final int yyStart) throws IOException {
10062: Result yyResult;
10063: int yyOption1;
10064: Node yyOpValue1;
10065: Node yyValue;
10066: ParseError yyError = ParseError.DUMMY;
10067:
10068: // Alternative 1.
10069:
10070: yyResult = pSymbol(yyStart);
10071: yyError = yyResult.select(yyError);
10072: if (yyResult.hasValue("*")) {
10073:
10074: yyResult = pTypeQualifierList(yyResult.index);
10075: yyError = yyResult.select(yyError);
10076: if (yyResult.hasValue()) {
10077: final Node v$g$1 = yyResult.semanticValue();
10078:
10079: yyOption1 = yyResult.index;
10080: yyOpValue1 = null;
10081:
10082: yyResult = pPointer(yyOption1);
10083: yyError = yyResult.select(yyError);
10084: if (yyResult.hasValue()) {
10085: final Node v$el$1 = yyResult.semanticValue();
10086:
10087: yyOption1 = yyResult.index;
10088: yyOpValue1 = v$el$1;
10089: }
10090: { // Start scope for v$g$2.
10091: final Node v$g$2 = yyOpValue1;
10092:
10093: yyValue = GNode.create("Pointer", v$g$1, v$g$2);
10094: yyValue.setLocation(location(yyStart));
10095:
10096: return new SemanticValue(yyValue, yyOption1,
10097: yyError);
10098: } // End scope for v$g$2.
10099: }
10100: }
10101:
10102: // Done.
10103: yyError = yyError.select("pointer expected", yyStart);
10104: return yyError;
10105: }
10106:
10107: // =========================================================================
10108:
10109: /**
10110: * Parse nonterminal xtc.lang.jeannie.JeannieC.TypeQualifierList.
10111: *
10112: * @param yyStart The index.
10113: * @return The result.
10114: * @throws IOException Signals an I/O error.
10115: */
10116: private Result pTypeQualifierList(final int yyStart)
10117: throws IOException {
10118: Result yyResult;
10119: int yyRepetition1;
10120: Pair<Node> yyRepValue1;
10121: Node yyValue;
10122: ParseError yyError = ParseError.DUMMY;
10123:
10124: // Alternative 1.
10125:
10126: yyRepetition1 = yyStart;
10127: yyRepValue1 = Pair.empty();
10128: while (true) {
10129:
10130: yyResult = pTypeQualifierList$$Choice1(yyRepetition1);
10131: yyError = yyResult.select(yyError);
10132: if (yyResult.hasValue()) {
10133: final Node v$el$1 = yyResult.semanticValue();
10134:
10135: yyRepetition1 = yyResult.index;
10136: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
10137: continue;
10138: }
10139: break;
10140: }
10141: { // Start scope for v$g$1.
10142: final Pair<Node> v$g$1 = yyRepValue1.reverse();
10143:
10144: yyValue = GNode.createFromPair("TypeQualifierList", v$g$1);
10145: yyValue.setLocation(location(yyStart));
10146:
10147: return new SemanticValue(yyValue, yyRepetition1, yyError);
10148: } // End scope for v$g$1.
10149: }
10150:
10151: // =========================================================================
10152:
10153: /**
10154: * Parse synthetic nonterminal
10155: * xtc.lang.jeannie.Jeannie.TypeQualifierList$$Choice1.
10156: *
10157: * @param yyStart The index.
10158: * @return The result.
10159: * @throws IOException Signals an I/O error.
10160: */
10161: private Result pTypeQualifierList$$Choice1(final int yyStart)
10162: throws IOException {
10163:
10164: Result yyResult;
10165: Node yyValue;
10166: ParseError yyError = ParseError.DUMMY;
10167:
10168: // Alternative 1.
10169:
10170: yyResult = pTypeQualifier(yyStart);
10171: yyError = yyResult.select(yyError);
10172: if (yyResult.hasValue()) {
10173: yyValue = yyResult.semanticValue();
10174:
10175: return yyResult.createValue(yyValue, yyError);
10176: }
10177:
10178: // Alternative 2.
10179:
10180: yyResult = pAttributeSpecifier(yyStart);
10181: yyError = yyResult.select(yyError);
10182: if (yyResult.hasValue()) {
10183: yyValue = yyResult.semanticValue();
10184:
10185: return yyResult.createValue(yyValue, yyError);
10186: }
10187:
10188: // Done.
10189: return yyError;
10190: }
10191:
10192: // =========================================================================
10193:
10194: /**
10195: * Parse nonterminal xtc.lang.jeannie.JeannieC.DirectDeclarator.
10196: *
10197: * @param yyStart The index.
10198: * @return The result.
10199: * @throws IOException Signals an I/O error.
10200: */
10201: private Result pDirectDeclarator(final int yyStart)
10202: throws IOException {
10203: Result yyResult;
10204: int yyBase;
10205: int yyRepetition1;
10206: Pair<Action<Node>> yyRepValue1;
10207: Node yyValue;
10208: ParseError yyError = ParseError.DUMMY;
10209:
10210: // Alternative <FullBase>.
10211:
10212: yyResult = pSymbol(yyStart);
10213: yyError = yyResult.select(yyError);
10214: if (yyResult.hasValue("(")) {
10215:
10216: yyResult = pAttributedDeclarator(yyResult.index);
10217: yyError = yyResult.select(yyError);
10218: if (yyResult.hasValue()) {
10219: final Node v$g$7 = yyResult.semanticValue();
10220:
10221: yyBase = yyResult.index;
10222: yyResult = pSymbol(yyBase);
10223: yyError = yyResult.select(yyError);
10224: if (yyResult.hasValue(")")) {
10225:
10226: yyRepetition1 = yyResult.index;
10227: yyRepValue1 = Pair.empty();
10228: while (true) {
10229:
10230: yyResult = pDirectDeclarator$$Tail1(yyRepetition1);
10231: yyError = yyResult.select(yyError);
10232: if (yyResult.hasValue()) {
10233: final Action<Node> v$8 = yyResult
10234: .semanticValue();
10235:
10236: yyRepetition1 = yyResult.index;
10237: yyRepValue1 = new Pair<Action<Node>>(v$8,
10238: yyRepValue1);
10239: continue;
10240: }
10241: break;
10242: }
10243: { // Start scope for v$9.
10244: final Pair<Action<Node>> v$9 = yyRepValue1
10245: .reverse();
10246:
10247: yyValue = apply(v$9, v$g$7, yyStart);
10248:
10249: return new SemanticValue(yyValue,
10250: yyRepetition1, yyError);
10251: } // End scope for v$9.
10252: } else {
10253: yyError = yyError.select("\")\" expected", yyBase);
10254: }
10255: }
10256: }
10257:
10258: // Alternative <SimpleBase>.
10259:
10260: yyResult = pSimpleDeclarator(yyStart);
10261: yyError = yyResult.select(yyError);
10262: if (yyResult.hasValue()) {
10263: final Node v$g$10 = yyResult.semanticValue();
10264:
10265: yyRepetition1 = yyResult.index;
10266: yyRepValue1 = Pair.empty();
10267: while (true) {
10268:
10269: yyResult = pDirectDeclarator$$Tail1(yyRepetition1);
10270: yyError = yyResult.select(yyError);
10271: if (yyResult.hasValue()) {
10272: final Action<Node> v$11 = yyResult.semanticValue();
10273:
10274: yyRepetition1 = yyResult.index;
10275: yyRepValue1 = new Pair<Action<Node>>(v$11,
10276: yyRepValue1);
10277: continue;
10278: }
10279: break;
10280: }
10281: { // Start scope for v$12.
10282: final Pair<Action<Node>> v$12 = yyRepValue1.reverse();
10283:
10284: yyValue = apply(v$12, v$g$10, yyStart);
10285:
10286: return new SemanticValue(yyValue, yyRepetition1,
10287: yyError);
10288: } // End scope for v$12.
10289: }
10290:
10291: // Done.
10292: yyError = yyError.select("direct declarator expected", yyStart);
10293: return yyError;
10294: }
10295:
10296: // =========================================================================
10297:
10298: /**
10299: * Parse synthetic nonterminal
10300: * xtc.lang.jeannie.Jeannie.DirectDeclarator$$Tail1.
10301: *
10302: * @param yyStart The index.
10303: * @return The result.
10304: * @throws IOException Signals an I/O error.
10305: */
10306: private Result pDirectDeclarator$$Tail1(final int yyStart)
10307: throws IOException {
10308:
10309: Result yyResult;
10310: int yyBase;
10311: int yyOption1;
10312: Node yyOpValue1;
10313: Action<Node> yyValue;
10314: ParseError yyError = ParseError.DUMMY;
10315:
10316: // Alternative 1.
10317:
10318: yyResult = pSymbol(yyStart);
10319: yyError = yyResult.select(yyError);
10320: if (yyResult.hasValue("(")) {
10321:
10322: yyResult = pPushScope(yyResult.index);
10323: yyError = yyResult.select(yyError);
10324: if (yyResult.hasValue()) {
10325:
10326: final int yyChoice1 = yyResult.index;
10327:
10328: // Nested alternative 1.
10329:
10330: yyResult = pParameterTypeList(yyChoice1);
10331: yyError = yyResult.select(yyError);
10332: if (yyResult.hasValue()) {
10333: final Node v$g$2 = yyResult.semanticValue();
10334:
10335: yyBase = yyResult.index;
10336: yyResult = pSymbol(yyBase);
10337: yyError = yyResult.select(yyError);
10338: if (yyResult.hasValue(")")) {
10339:
10340: yyResult = pParameterContext(yyResult.index);
10341: yyError = yyResult.select(yyError);
10342: if (yyResult.hasValue()) {
10343:
10344: yyResult = pJavaThrows(yyResult.index);
10345: yyError = yyResult.select(yyError);
10346: if (yyResult.hasValue()) {
10347: final Node javaThrows = yyResult
10348: .semanticValue();
10349:
10350: yyValue = new Action<Node>() {
10351: public Node run(Node v$1) {
10352: return GNode.create(
10353: "FunctionDeclarator",
10354: v$1, v$g$2, javaThrows);
10355: }
10356: };
10357:
10358: return yyResult.createValue(yyValue,
10359: yyError);
10360: }
10361: }
10362: } else {
10363: yyError = yyError.select("\")\" expected",
10364: yyBase);
10365: }
10366: }
10367:
10368: // Nested alternative 2.
10369:
10370: yyOption1 = yyChoice1;
10371: yyOpValue1 = null;
10372:
10373: yyResult = pIdentifierList(yyOption1);
10374: yyError = yyResult.select(yyError);
10375: if (yyResult.hasValue()) {
10376: final Node v$el$1 = yyResult.semanticValue();
10377:
10378: yyOption1 = yyResult.index;
10379: yyOpValue1 = v$el$1;
10380: }
10381: { // Start scope for v$g$3.
10382: final Node v$g$3 = yyOpValue1;
10383:
10384: yyBase = yyOption1;
10385: yyResult = pSymbol(yyBase);
10386: yyError = yyResult.select(yyError);
10387: if (yyResult.hasValue(")")) {
10388:
10389: yyResult = pParameterContext(yyResult.index);
10390: yyError = yyResult.select(yyError);
10391: if (yyResult.hasValue()) {
10392:
10393: yyResult = pJavaThrows(yyResult.index);
10394: yyError = yyResult.select(yyError);
10395: if (yyResult.hasValue()) {
10396: final Node javaThrows = yyResult
10397: .semanticValue();
10398:
10399: yyValue = new Action<Node>() {
10400: public Node run(Node v$1) {
10401: return GNode.create(
10402: "FunctionDeclarator",
10403: v$1, v$g$3, javaThrows);
10404: }
10405: };
10406:
10407: return yyResult.createValue(yyValue,
10408: yyError);
10409: }
10410: }
10411: } else {
10412: yyError = yyError.select("\")\" expected",
10413: yyBase);
10414: }
10415: } // End scope for v$g$3.
10416: }
10417: }
10418:
10419: // Alternative 2.
10420:
10421: yyResult = pSymbol(yyStart);
10422: yyError = yyResult.select(yyError);
10423: if (yyResult.hasValue("[")) {
10424:
10425: yyResult = pArrayQualifierList(yyResult.index);
10426: yyError = yyResult.select(yyError);
10427: if (yyResult.hasValue()) {
10428: final Node v$g$4 = yyResult.semanticValue();
10429:
10430: final int yyChoice1 = yyResult.index;
10431:
10432: // Nested alternative 1.
10433:
10434: yyOption1 = yyChoice1;
10435: yyOpValue1 = null;
10436:
10437: yyResult = pAssignmentExpression(yyOption1);
10438: yyError = yyResult.select(yyError);
10439: if (yyResult.hasValue()) {
10440: final Node v$el$2 = yyResult.semanticValue();
10441:
10442: yyOption1 = yyResult.index;
10443: yyOpValue1 = v$el$2;
10444: }
10445: { // Start scope for v$g$5.
10446: final Node v$g$5 = yyOpValue1;
10447:
10448: yyBase = yyOption1;
10449: yyResult = pSymbol(yyBase);
10450: yyError = yyResult.select(yyError);
10451: if (yyResult.hasValue("]")) {
10452:
10453: yyValue = new Action<Node>() {
10454: public Node run(Node v$1) {
10455: return GNode.create("ArrayDeclarator",
10456: v$1, v$g$4, v$g$5);
10457: }
10458: };
10459:
10460: return yyResult.createValue(yyValue, yyError);
10461: } else {
10462: yyError = yyError.select("\"]\" expected",
10463: yyBase);
10464: }
10465: } // End scope for v$g$5.
10466:
10467: // Nested alternative 2.
10468:
10469: yyBase = yyChoice1;
10470: yyResult = pSymbol(yyBase);
10471: yyError = yyResult.select(yyError);
10472: if (yyResult.hasValue("*")) {
10473: final String v$g$6 = "*";
10474:
10475: yyBase = yyResult.index;
10476: yyResult = pSymbol(yyBase);
10477: yyError = yyResult.select(yyError);
10478: if (yyResult.hasValue("]")) {
10479:
10480: yyValue = new Action<Node>() {
10481: public Node run(Node v$1) {
10482: return GNode.create("ArrayDeclarator",
10483: v$1, v$g$4, v$g$6);
10484: }
10485: };
10486:
10487: return yyResult.createValue(yyValue, yyError);
10488: } else {
10489: yyError = yyError.select("\"]\" expected",
10490: yyBase);
10491: }
10492: } else {
10493: yyError = yyError.select("\"*\" expected", yyBase);
10494: }
10495: }
10496: }
10497:
10498: // Done.
10499: yyError = yyError.select("direct declarator expected", yyStart);
10500: return yyError;
10501: }
10502:
10503: // =========================================================================
10504:
10505: /**
10506: * Parse nonterminal xtc.lang.jeannie.JeannieC.VariableLength.
10507: *
10508: * @param yyStart The index.
10509: * @return The result.
10510: * @throws IOException Signals an I/O error.
10511: */
10512: private Result pVariableLength(final int yyStart)
10513: throws IOException {
10514: Result yyResult;
10515: Node yyValue;
10516: ParseError yyError = ParseError.DUMMY;
10517:
10518: // Alternative 1.
10519:
10520: yyResult = pSymbol(yyStart);
10521: yyError = yyResult.select(yyError);
10522: if (yyResult.hasValue("*")) {
10523:
10524: yyValue = GNode.create("VariableLength", false);
10525: yyValue.setLocation(location(yyStart));
10526:
10527: return yyResult.createValue(yyValue, yyError);
10528: }
10529:
10530: // Done.
10531: yyError = yyError.select("variable length expected", yyStart);
10532: return yyError;
10533: }
10534:
10535: // =========================================================================
10536:
10537: /**
10538: * Parse nonterminal xtc.lang.jeannie.JeannieC.SimpleDeclarator.
10539: *
10540: * @param yyStart The index.
10541: * @return The result.
10542: * @throws IOException Signals an I/O error.
10543: */
10544: private Result pSimpleDeclarator(final int yyStart)
10545: throws IOException {
10546: Result yyResult;
10547: Node yyValue;
10548: ParseError yyError = ParseError.DUMMY;
10549:
10550: // Alternative <Declarator>.
10551:
10552: yyResult = pCIdentifier$Identifier(yyStart);
10553: yyError = yyResult.select(yyError);
10554: if (yyResult.hasValue()) {
10555: final String id = yyResult.semanticValue();
10556:
10557: yyState.bind(toText(id));
10558:
10559: yyValue = GNode.create("SimpleDeclarator", id);
10560: yyValue.setLocation(location(yyStart));
10561:
10562: return yyResult.createValue(yyValue, yyError);
10563: }
10564:
10565: // Done.
10566: return yyError;
10567: }
10568:
10569: // =========================================================================
10570:
10571: /**
10572: * Parse nonterminal xtc.lang.jeannie.JeannieC.ParameterTypeList.
10573: *
10574: * @param yyStart The index.
10575: * @return The result.
10576: * @throws IOException Signals an I/O error.
10577: */
10578: private Result pParameterTypeList(final int yyStart)
10579: throws IOException {
10580: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
10581: if (null == yyColumn.chunk4)
10582: yyColumn.chunk4 = new Chunk4();
10583: if (null == yyColumn.chunk4.fParameterTypeList)
10584: yyColumn.chunk4.fParameterTypeList = pParameterTypeList$1(yyStart);
10585: return yyColumn.chunk4.fParameterTypeList;
10586: }
10587:
10588: /** Actually parse xtc.lang.jeannie.JeannieC.ParameterTypeList. */
10589: private Result pParameterTypeList$1(final int yyStart)
10590: throws IOException {
10591: Result yyResult;
10592: int yyBase;
10593: int yyOption1;
10594: String yyOpValue1;
10595: Node yyValue;
10596: ParseError yyError = ParseError.DUMMY;
10597:
10598: // Alternative 1.
10599:
10600: yyResult = pParameterList(yyStart);
10601: yyError = yyResult.select(yyError);
10602: if (yyResult.hasValue()) {
10603: final Node v$g$1 = yyResult.semanticValue();
10604:
10605: yyOption1 = yyResult.index;
10606: yyOpValue1 = null;
10607:
10608: yyBase = yyOption1;
10609: yyResult = pSymbol(yyBase);
10610: yyError = yyResult.select(yyError);
10611: if (yyResult.hasValue(",")) {
10612:
10613: yyBase = yyResult.index;
10614: yyResult = pSymbol(yyBase);
10615: yyError = yyResult.select(yyError);
10616: if (yyResult.hasValue("...")) {
10617: final String v$el$1 = "...";
10618:
10619: yyOption1 = yyResult.index;
10620: yyOpValue1 = v$el$1;
10621: } else {
10622: yyError = yyError
10623: .select("\"...\" expected", yyBase);
10624: }
10625: } else {
10626: yyError = yyError.select("\",\" expected", yyBase);
10627: }
10628: { // Start scope for v$g$2.
10629: final String v$g$2 = yyOpValue1;
10630:
10631: yyValue = GNode.create("ParameterTypeList", v$g$1,
10632: v$g$2);
10633: yyValue.setLocation(location(yyStart));
10634:
10635: return new SemanticValue(yyValue, yyOption1, yyError);
10636: } // End scope for v$g$2.
10637: }
10638:
10639: // Done.
10640: return yyError;
10641: }
10642:
10643: // =========================================================================
10644:
10645: /**
10646: * Parse nonterminal xtc.lang.jeannie.JeannieC.ParameterList.
10647: *
10648: * @param yyStart The index.
10649: * @return The result.
10650: * @throws IOException Signals an I/O error.
10651: */
10652: private Result pParameterList(final int yyStart) throws IOException {
10653: Result yyResult;
10654: int yyBase;
10655: int yyRepetition1;
10656: Pair<Node> yyRepValue1;
10657: Node yyValue;
10658: ParseError yyError = ParseError.DUMMY;
10659:
10660: // Alternative 1.
10661:
10662: yyResult = pParameterDeclaration(yyStart);
10663: yyError = yyResult.select(yyError);
10664: if (yyResult.hasValue()) {
10665: final Node v$g$1 = yyResult.semanticValue();
10666:
10667: yyRepetition1 = yyResult.index;
10668: yyRepValue1 = Pair.empty();
10669: while (true) {
10670:
10671: yyBase = yyRepetition1;
10672: yyResult = pSymbol(yyBase);
10673: yyError = yyResult.select(yyError);
10674: if (yyResult.hasValue(",")) {
10675:
10676: yyResult = pParameterDeclaration(yyResult.index);
10677: yyError = yyResult.select(yyError);
10678: if (yyResult.hasValue()) {
10679: final Node v$el$1 = yyResult.semanticValue();
10680:
10681: yyRepetition1 = yyResult.index;
10682: yyRepValue1 = new Pair<Node>(v$el$1,
10683: yyRepValue1);
10684: continue;
10685: }
10686: } else {
10687: yyError = yyError.select("\",\" expected", yyBase);
10688: }
10689: break;
10690: }
10691: { // Start scope for v$g$2.
10692: final Pair<Node> v$g$2 = yyRepValue1.reverse();
10693:
10694: yyValue = GNode.createFromPair("ParameterList", v$g$1,
10695: v$g$2);
10696: yyValue.setLocation(location(yyStart));
10697:
10698: return new SemanticValue(yyValue, yyRepetition1,
10699: yyError);
10700: } // End scope for v$g$2.
10701: }
10702:
10703: // Done.
10704: return yyError;
10705: }
10706:
10707: // =========================================================================
10708:
10709: /**
10710: * Parse nonterminal xtc.lang.jeannie.JeannieC.ParameterDeclaration.
10711: *
10712: * @param yyStart The index.
10713: * @return The result.
10714: * @throws IOException Signals an I/O error.
10715: */
10716: private Result pParameterDeclaration(final int yyStart)
10717: throws IOException {
10718: Result yyResult;
10719: int yyOption1;
10720: Node yyOpValue1;
10721: Node yyValue;
10722: ParseError yyError = ParseError.DUMMY;
10723:
10724: // Start a state modification.
10725: yyState.start();
10726:
10727: // Alternative 1.
10728:
10729: yyResult = pDeclarationSpecifiers(yyStart);
10730: yyError = yyResult.select(yyError);
10731: if (yyResult.hasValue()) {
10732: final Node v$g$1 = yyResult.semanticValue();
10733:
10734: final int yyChoice1 = yyResult.index;
10735:
10736: // Nested alternative 1.
10737:
10738: yyResult = pJeannieC$Declarator(yyChoice1);
10739: yyError = yyResult.select(yyError);
10740: if (yyResult.hasValue()) {
10741: final Node v$g$2 = yyResult.semanticValue();
10742:
10743: yyOption1 = yyResult.index;
10744: yyOpValue1 = null;
10745:
10746: yyResult = pAttributeSpecifierList(yyOption1);
10747: yyError = yyResult.select(yyError);
10748: if (yyResult.hasValue()) {
10749: final Node v$el$1 = yyResult.semanticValue();
10750:
10751: yyOption1 = yyResult.index;
10752: yyOpValue1 = v$el$1;
10753: }
10754: { // Start scope for v$g$3.
10755: final Node v$g$3 = yyOpValue1;
10756:
10757: yyValue = GNode.create("ParameterDeclaration",
10758: v$g$1, v$g$2, v$g$3);
10759: yyValue.setLocation(location(yyStart));
10760:
10761: // Commit the state modification.
10762: yyState.commit();
10763:
10764: return new SemanticValue(yyValue, yyOption1,
10765: yyError);
10766: } // End scope for v$g$3.
10767: }
10768:
10769: // Nested alternative 2.
10770:
10771: yyOption1 = yyChoice1;
10772: yyOpValue1 = null;
10773:
10774: yyResult = pAbstractDeclarator(yyOption1);
10775: yyError = yyResult.select(yyError);
10776: if (yyResult.hasValue()) {
10777: final Node v$el$2 = yyResult.semanticValue();
10778:
10779: yyOption1 = yyResult.index;
10780: yyOpValue1 = v$el$2;
10781: }
10782: { // Start scope for v$g$4.
10783: final Node v$g$4 = yyOpValue1;
10784:
10785: yyOpValue1 = null;
10786:
10787: yyResult = pAttributeSpecifierList(yyOption1);
10788: yyError = yyResult.select(yyError);
10789: if (yyResult.hasValue()) {
10790: final Node v$el$3 = yyResult.semanticValue();
10791:
10792: yyOption1 = yyResult.index;
10793: yyOpValue1 = v$el$3;
10794: }
10795: { // Start scope for v$g$5.
10796: final Node v$g$5 = yyOpValue1;
10797:
10798: yyValue = GNode.create("ParameterDeclaration",
10799: v$g$1, v$g$4, v$g$5);
10800: yyValue.setLocation(location(yyStart));
10801:
10802: // Commit the state modification.
10803: yyState.commit();
10804:
10805: return new SemanticValue(yyValue, yyOption1,
10806: yyError);
10807: } // End scope for v$g$5.
10808: } // End scope for v$g$4.
10809: }
10810:
10811: // Abort the state modification.
10812: yyState.abort();
10813:
10814: // Done.
10815: return yyError;
10816: }
10817:
10818: // =========================================================================
10819:
10820: /**
10821: * Parse nonterminal xtc.lang.jeannie.JeannieC.AttributedAbstractDeclarator.
10822: *
10823: * @param yyStart The index.
10824: * @return The result.
10825: * @throws IOException Signals an I/O error.
10826: */
10827: private Result pAttributedAbstractDeclarator(final int yyStart)
10828: throws IOException {
10829:
10830: Result yyResult;
10831: int yyOption1;
10832: Node yyOpValue1;
10833: Node yyValue;
10834: ParseError yyError = ParseError.DUMMY;
10835:
10836: // Alternative 1.
10837:
10838: yyOption1 = yyStart;
10839: yyOpValue1 = null;
10840:
10841: yyResult = pAttributeSpecifierList(yyOption1);
10842: yyError = yyResult.select(yyError);
10843: if (yyResult.hasValue()) {
10844: final Node v$el$1 = yyResult.semanticValue();
10845:
10846: yyOption1 = yyResult.index;
10847: yyOpValue1 = v$el$1;
10848: }
10849: { // Start scope for v$g$1.
10850: final Node v$g$1 = yyOpValue1;
10851:
10852: yyResult = pAbstractDeclarator(yyOption1);
10853: yyError = yyResult.select(yyError);
10854: if (yyResult.hasValue()) {
10855: final Node v$g$2 = yyResult.semanticValue();
10856:
10857: yyValue = GNode.create("AttributedAbstractDeclarator",
10858: v$g$1, v$g$2);
10859: yyValue.setLocation(location(yyStart));
10860:
10861: return yyResult.createValue(yyValue, yyError);
10862: }
10863: } // End scope for v$g$1.
10864:
10865: // Done.
10866: return yyError;
10867: }
10868:
10869: // =========================================================================
10870:
10871: /**
10872: * Parse nonterminal xtc.lang.jeannie.JeannieC.AbstractDeclarator.
10873: *
10874: * @param yyStart The index.
10875: * @return The result.
10876: * @throws IOException Signals an I/O error.
10877: */
10878: private Result pAbstractDeclarator(final int yyStart)
10879: throws IOException {
10880: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
10881: if (null == yyColumn.chunk4)
10882: yyColumn.chunk4 = new Chunk4();
10883: if (null == yyColumn.chunk4.fAbstractDeclarator)
10884: yyColumn.chunk4.fAbstractDeclarator = pAbstractDeclarator$1(yyStart);
10885: return yyColumn.chunk4.fAbstractDeclarator;
10886: }
10887:
10888: /** Actually parse xtc.lang.jeannie.JeannieC.AbstractDeclarator. */
10889: private Result pAbstractDeclarator$1(final int yyStart)
10890: throws IOException {
10891: Result yyResult;
10892: int yyOption1;
10893: Node yyOpValue1;
10894: Node yyValue;
10895: ParseError yyError = ParseError.DUMMY;
10896:
10897: // Alternative 1.
10898:
10899: yyOption1 = yyStart;
10900: yyOpValue1 = null;
10901:
10902: yyResult = pPointer(yyOption1);
10903: yyError = yyResult.select(yyError);
10904: if (yyResult.hasValue()) {
10905: final Node v$el$1 = yyResult.semanticValue();
10906:
10907: yyOption1 = yyResult.index;
10908: yyOpValue1 = v$el$1;
10909: }
10910: { // Start scope for p.
10911: final Node p = yyOpValue1;
10912:
10913: yyResult = pDirectAbstractDeclarator(yyOption1);
10914: yyError = yyResult.select(yyError);
10915: if (yyResult.hasValue()) {
10916: final Node d = yyResult.semanticValue();
10917:
10918: if ((null != p) || (null != d)) {
10919:
10920: yyValue = GNode.create("AbstractDeclarator", p, d);
10921: yyValue.setLocation(location(yyStart));
10922:
10923: return yyResult.createValue(yyValue, yyError);
10924: }
10925: }
10926: } // End scope for p.
10927:
10928: // Done.
10929: yyError = yyError.select("abstract declarator expected",
10930: yyStart);
10931: return yyError;
10932: }
10933:
10934: // =========================================================================
10935:
10936: /**
10937: * Parse nonterminal xtc.lang.jeannie.JeannieC.DirectAbstractDeclarator.
10938: *
10939: * @param yyStart The index.
10940: * @return The result.
10941: * @throws IOException Signals an I/O error.
10942: */
10943: private Result pDirectAbstractDeclarator(final int yyStart)
10944: throws IOException {
10945:
10946: Result yyResult;
10947: int yyBase;
10948: int yyRepetition1;
10949: Pair<Action<Node>> yyRepValue1;
10950: Node yyValue;
10951: ParseError yyError = ParseError.DUMMY;
10952:
10953: // Alternative <Parenthesized>.
10954:
10955: yyResult = pSymbol(yyStart);
10956: yyError = yyResult.select(yyError);
10957: if (yyResult.hasValue("(")) {
10958:
10959: yyResult = pAttributedAbstractDeclarator(yyResult.index);
10960: yyError = yyResult.select(yyError);
10961: if (yyResult.hasValue()) {
10962: final Node v$g$7 = yyResult.semanticValue();
10963:
10964: yyBase = yyResult.index;
10965: yyResult = pSymbol(yyBase);
10966: yyError = yyResult.select(yyError);
10967: if (yyResult.hasValue(")")) {
10968:
10969: yyRepetition1 = yyResult.index;
10970: yyRepValue1 = Pair.empty();
10971: while (true) {
10972:
10973: yyResult = pDirectAbstractDeclarator$$Tail1(yyRepetition1);
10974: yyError = yyResult.select(yyError);
10975: if (yyResult.hasValue()) {
10976: final Action<Node> v$8 = yyResult
10977: .semanticValue();
10978:
10979: yyRepetition1 = yyResult.index;
10980: yyRepValue1 = new Pair<Action<Node>>(v$8,
10981: yyRepValue1);
10982: continue;
10983: }
10984: break;
10985: }
10986: { // Start scope for v$9.
10987: final Pair<Action<Node>> v$9 = yyRepValue1
10988: .reverse();
10989:
10990: yyValue = apply(v$9, v$g$7, yyStart);
10991:
10992: return new SemanticValue(yyValue,
10993: yyRepetition1, yyError);
10994: } // End scope for v$9.
10995: } else {
10996: yyError = yyError.select("\")\" expected", yyBase);
10997: }
10998: }
10999: }
11000:
11001: // Alternative <Empty>.
11002:
11003: yyRepetition1 = yyStart;
11004: yyRepValue1 = Pair.empty();
11005: while (true) {
11006:
11007: yyResult = pDirectAbstractDeclarator$$Tail1(yyRepetition1);
11008: yyError = yyResult.select(yyError);
11009: if (yyResult.hasValue()) {
11010: final Action<Node> v$11 = yyResult.semanticValue();
11011:
11012: yyRepetition1 = yyResult.index;
11013: yyRepValue1 = new Pair<Action<Node>>(v$11, yyRepValue1);
11014: continue;
11015: }
11016: break;
11017: }
11018: { // Start scope for v$12.
11019: final Pair<Action<Node>> v$12 = yyRepValue1.reverse();
11020:
11021: yyValue = apply(v$12, null, yyStart);
11022:
11023: return new SemanticValue(yyValue, yyRepetition1, yyError);
11024: } // End scope for v$12.
11025: }
11026:
11027: // =========================================================================
11028:
11029: /**
11030: * Parse synthetic nonterminal
11031: * xtc.lang.jeannie.Jeannie.DirectAbstractDeclarator$$Tail1.
11032: *
11033: * @param yyStart The index.
11034: * @return The result.
11035: * @throws IOException Signals an I/O error.
11036: */
11037: private Result pDirectAbstractDeclarator$$Tail1(final int yyStart)
11038: throws IOException {
11039:
11040: Result yyResult;
11041: int yyBase;
11042: int yyOption1;
11043: Node yyOpValue1;
11044: Action<Node> yyValue;
11045: ParseError yyError = ParseError.DUMMY;
11046:
11047: // Alternative 1.
11048:
11049: yyResult = pSymbol(yyStart);
11050: yyError = yyResult.select(yyError);
11051: if (yyResult.hasValue("[")) {
11052: final String v$g$2 = "[";
11053:
11054: final int yyChoice1 = yyResult.index;
11055:
11056: // Nested alternative 1.
11057:
11058: yyOption1 = yyChoice1;
11059: yyOpValue1 = null;
11060:
11061: yyResult = pAssignmentExpression(yyOption1);
11062: yyError = yyResult.select(yyError);
11063: if (yyResult.hasValue()) {
11064: final Node v$el$1 = yyResult.semanticValue();
11065:
11066: yyOption1 = yyResult.index;
11067: yyOpValue1 = v$el$1;
11068: }
11069: { // Start scope for v$g$3.
11070: final Node v$g$3 = yyOpValue1;
11071:
11072: yyBase = yyOption1;
11073: yyResult = pSymbol(yyBase);
11074: yyError = yyResult.select(yyError);
11075: if (yyResult.hasValue("]")) {
11076:
11077: yyValue = new Action<Node>() {
11078: public Node run(Node v$1) {
11079: return GNode.create(
11080: "DirectAbstractDeclarator", v$1,
11081: v$g$2, v$g$3);
11082: }
11083: };
11084:
11085: return yyResult.createValue(yyValue, yyError);
11086: } else {
11087: yyError = yyError.select("\"]\" expected", yyBase);
11088: }
11089: } // End scope for v$g$3.
11090:
11091: // Nested alternative 2.
11092:
11093: yyResult = pVariableLength(yyChoice1);
11094: yyError = yyResult.select(yyError);
11095: if (yyResult.hasValue()) {
11096: final Node v$g$4 = yyResult.semanticValue();
11097:
11098: yyBase = yyResult.index;
11099: yyResult = pSymbol(yyBase);
11100: yyError = yyResult.select(yyError);
11101: if (yyResult.hasValue("]")) {
11102:
11103: yyValue = new Action<Node>() {
11104: public Node run(Node v$1) {
11105: return GNode.create(
11106: "DirectAbstractDeclarator", v$1,
11107: v$g$2, v$g$4);
11108: }
11109: };
11110:
11111: return yyResult.createValue(yyValue, yyError);
11112: } else {
11113: yyError = yyError.select("\"]\" expected", yyBase);
11114: }
11115: }
11116: }
11117:
11118: // Alternative 2.
11119:
11120: yyResult = pSymbol(yyStart);
11121: yyError = yyResult.select(yyError);
11122: if (yyResult.hasValue("(")) {
11123: final String v$g$5 = "(";
11124:
11125: yyOption1 = yyResult.index;
11126: yyOpValue1 = null;
11127:
11128: yyResult = pParameterTypeList(yyOption1);
11129: yyError = yyResult.select(yyError);
11130: if (yyResult.hasValue()) {
11131: final Node v$el$2 = yyResult.semanticValue();
11132:
11133: yyOption1 = yyResult.index;
11134: yyOpValue1 = v$el$2;
11135: }
11136: { // Start scope for v$g$6.
11137: final Node v$g$6 = yyOpValue1;
11138:
11139: yyBase = yyOption1;
11140: yyResult = pSymbol(yyBase);
11141: yyError = yyResult.select(yyError);
11142: if (yyResult.hasValue(")")) {
11143:
11144: yyValue = new Action<Node>() {
11145: public Node run(Node v$1) {
11146: return GNode.create(
11147: "DirectAbstractDeclarator", v$1,
11148: v$g$5, v$g$6);
11149: }
11150: };
11151:
11152: return yyResult.createValue(yyValue, yyError);
11153: } else {
11154: yyError = yyError.select("\")\" expected", yyBase);
11155: }
11156: } // End scope for v$g$6.
11157: }
11158:
11159: // Done.
11160: yyError = yyError.select("direct abstract declarator expected",
11161: yyStart);
11162: return yyError;
11163: }
11164:
11165: // =========================================================================
11166:
11167: /**
11168: * Parse nonterminal xtc.lang.jeannie.JeannieC.IdentifierList.
11169: *
11170: * @param yyStart The index.
11171: * @return The result.
11172: * @throws IOException Signals an I/O error.
11173: */
11174: private Result pIdentifierList(final int yyStart)
11175: throws IOException {
11176: Result yyResult;
11177: int yyBase;
11178: int yyRepetition1;
11179: Pair<String> yyRepValue1;
11180: Node yyValue;
11181: ParseError yyError = ParseError.DUMMY;
11182:
11183: // Alternative 1.
11184:
11185: yyResult = pCIdentifier$Identifier(yyStart);
11186: yyError = yyResult.select(yyError);
11187: if (yyResult.hasValue()) {
11188: final String id1 = yyResult.semanticValue();
11189:
11190: yyState.bind(toText(id1));
11191:
11192: yyRepetition1 = yyResult.index;
11193: yyRepValue1 = Pair.empty();
11194: while (true) {
11195:
11196: yyBase = yyRepetition1;
11197: yyResult = pSymbol(yyBase);
11198: yyError = yyResult.select(yyError);
11199: if (yyResult.hasValue(",")) {
11200:
11201: yyResult = pCIdentifier$Identifier(yyResult.index);
11202: yyError = yyResult.select(yyError);
11203: if (yyResult.hasValue()) {
11204: final String id2 = yyResult.semanticValue();
11205:
11206: yyState.bind(toText(id2));
11207:
11208: yyRepetition1 = yyResult.index;
11209: yyRepValue1 = new Pair<String>(id2, yyRepValue1);
11210: continue;
11211: }
11212: } else {
11213: yyError = yyError.select("\",\" expected", yyBase);
11214: }
11215: break;
11216: }
11217: { // Start scope for v$g$1.
11218: final Pair<String> v$g$1 = yyRepValue1.reverse();
11219:
11220: yyValue = GNode.createFromPair("IdentifierList", id1,
11221: v$g$1);
11222: yyValue.setLocation(location(yyStart));
11223:
11224: return new SemanticValue(yyValue, yyRepetition1,
11225: yyError);
11226: } // End scope for v$g$1.
11227: }
11228:
11229: // Done.
11230: return yyError;
11231: }
11232:
11233: // =========================================================================
11234:
11235: /**
11236: * Parse nonterminal xtc.lang.jeannie.JeannieC.ArrayQualifierList.
11237: *
11238: * @param yyStart The index.
11239: * @return The result.
11240: * @throws IOException Signals an I/O error.
11241: */
11242: private Result pArrayQualifierList(final int yyStart)
11243: throws IOException {
11244: Result yyResult;
11245: int yyRepetition1;
11246: Pair<Node> yyRepValue1;
11247: Node yyValue;
11248: ParseError yyError = ParseError.DUMMY;
11249:
11250: // Alternative 1.
11251:
11252: yyRepetition1 = yyStart;
11253: yyRepValue1 = Pair.empty();
11254: while (true) {
11255:
11256: yyResult = pArrayQualifierList$$Choice1(yyRepetition1);
11257: yyError = yyResult.select(yyError);
11258: if (yyResult.hasValue()) {
11259: final Node v$el$1 = yyResult.semanticValue();
11260:
11261: yyRepetition1 = yyResult.index;
11262: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
11263: continue;
11264: }
11265: break;
11266: }
11267: { // Start scope for v$g$1.
11268: final Pair<Node> v$g$1 = yyRepValue1.reverse();
11269:
11270: yyValue = GNode.createFromPair("ArrayQualifierList", v$g$1);
11271: yyValue.setLocation(location(yyStart));
11272:
11273: return new SemanticValue(yyValue, yyRepetition1, yyError);
11274: } // End scope for v$g$1.
11275: }
11276:
11277: // =========================================================================
11278:
11279: /**
11280: * Parse synthetic nonterminal
11281: * xtc.lang.jeannie.Jeannie.ArrayQualifierList$$Choice1.
11282: *
11283: * @param yyStart The index.
11284: * @return The result.
11285: * @throws IOException Signals an I/O error.
11286: */
11287: private Result pArrayQualifierList$$Choice1(final int yyStart)
11288: throws IOException {
11289:
11290: Result yyResult;
11291: Node yyValue;
11292: ParseError yyError = ParseError.DUMMY;
11293:
11294: // Alternative 1.
11295:
11296: yyResult = pKeyword(yyStart);
11297: yyError = yyResult.select(yyError);
11298: if (yyResult.hasValue("static")) {
11299:
11300: yyValue = GNode.create("StaticSpecifier", false);
11301: yyValue.setLocation(location(yyStart));
11302:
11303: return yyResult.createValue(yyValue, yyError);
11304: }
11305:
11306: // Alternative 2.
11307:
11308: yyResult = pKeyword(yyStart);
11309: yyError = yyResult.select(yyError);
11310: if (yyResult.hasValue("volatile")) {
11311: final String v$g$1 = "volatile";
11312:
11313: yyValue = GNode.create("VolatileQualifier", v$g$1);
11314: yyValue.setLocation(location(yyStart));
11315:
11316: return yyResult.createValue(yyValue, yyError);
11317: }
11318:
11319: // Alternative 3.
11320:
11321: yyResult = pKeyword(yyStart);
11322: yyError = yyResult.select(yyError);
11323: if (yyResult.hasValue("__volatile")) {
11324: final String v$g$2 = "__volatile";
11325:
11326: yyValue = GNode.create("VolatileQualifier", v$g$2);
11327: yyValue.setLocation(location(yyStart));
11328:
11329: return yyResult.createValue(yyValue, yyError);
11330: }
11331:
11332: // Alternative 4.
11333:
11334: yyResult = pKeyword(yyStart);
11335: yyError = yyResult.select(yyError);
11336: if (yyResult.hasValue("__volatile__")) {
11337: final String v$g$3 = "__volatile__";
11338:
11339: yyValue = GNode.create("VolatileQualifier", v$g$3);
11340: yyValue.setLocation(location(yyStart));
11341:
11342: return yyResult.createValue(yyValue, yyError);
11343: }
11344:
11345: // Alternative 5.
11346:
11347: yyResult = pKeyword(yyStart);
11348: yyError = yyResult.select(yyError);
11349: if (yyResult.hasValue("restrict")) {
11350: final String v$g$1 = "restrict";
11351:
11352: yyValue = GNode.create("RestrictQualifier", v$g$1);
11353: yyValue.setLocation(location(yyStart));
11354:
11355: return yyResult.createValue(yyValue, yyError);
11356: }
11357:
11358: // Alternative 6.
11359:
11360: yyResult = pKeyword(yyStart);
11361: yyError = yyResult.select(yyError);
11362: if (yyResult.hasValue("__restrict")) {
11363: final String v$g$2 = "__restrict";
11364:
11365: yyValue = GNode.create("RestrictQualifier", v$g$2);
11366: yyValue.setLocation(location(yyStart));
11367:
11368: return yyResult.createValue(yyValue, yyError);
11369: }
11370:
11371: // Alternative 7.
11372:
11373: yyResult = pKeyword(yyStart);
11374: yyError = yyResult.select(yyError);
11375: if (yyResult.hasValue("__restrict__")) {
11376: final String v$g$3 = "__restrict__";
11377:
11378: yyValue = GNode.create("RestrictQualifier", v$g$3);
11379: yyValue.setLocation(location(yyStart));
11380:
11381: return yyResult.createValue(yyValue, yyError);
11382: }
11383:
11384: // Alternative 8.
11385:
11386: yyResult = pKeyword(yyStart);
11387: yyError = yyResult.select(yyError);
11388: if (yyResult.hasValue("const")) {
11389: final String v$g$1 = "const";
11390:
11391: yyValue = GNode.create("ConstantQualifier", v$g$1);
11392: yyValue.setLocation(location(yyStart));
11393:
11394: return yyResult.createValue(yyValue, yyError);
11395: }
11396:
11397: // Alternative 9.
11398:
11399: yyResult = pKeyword(yyStart);
11400: yyError = yyResult.select(yyError);
11401: if (yyResult.hasValue("__const")) {
11402: final String v$g$2 = "__const";
11403:
11404: yyValue = GNode.create("ConstantQualifier", v$g$2);
11405: yyValue.setLocation(location(yyStart));
11406:
11407: return yyResult.createValue(yyValue, yyError);
11408: }
11409:
11410: // Alternative 10.
11411:
11412: yyResult = pKeyword(yyStart);
11413: yyError = yyResult.select(yyError);
11414: if (yyResult.hasValue("__const__")) {
11415: final String v$g$3 = "__const__";
11416:
11417: yyValue = GNode.create("ConstantQualifier", v$g$3);
11418: yyValue.setLocation(location(yyStart));
11419:
11420: return yyResult.createValue(yyValue, yyError);
11421: }
11422:
11423: // Alternative 11.
11424:
11425: yyResult = pAttributeSpecifier(yyStart);
11426: yyError = yyResult.select(yyError);
11427: if (yyResult.hasValue()) {
11428: yyValue = yyResult.semanticValue();
11429:
11430: return yyResult.createValue(yyValue, yyError);
11431: }
11432:
11433: // Done.
11434: yyError = yyError.select("array qualifier list expected",
11435: yyStart);
11436: return yyError;
11437: }
11438:
11439: // =========================================================================
11440:
11441: /**
11442: * Parse nonterminal xtc.lang.jeannie.JeannieC.FloatingPointTypeSpecifier.
11443: *
11444: * @param yyStart The index.
11445: * @return The result.
11446: * @throws IOException Signals an I/O error.
11447: */
11448: private Result pFloatingPointTypeSpecifier(final int yyStart)
11449: throws IOException {
11450:
11451: Result yyResult;
11452: Node yyValue;
11453: ParseError yyError = ParseError.DUMMY;
11454:
11455: // Alternative 1.
11456:
11457: yyResult = pKeyword(yyStart);
11458: yyError = yyResult.select(yyError);
11459: if (yyResult.hasValue("_Complex")) {
11460: final String v$g$1 = "_Complex";
11461:
11462: yyValue = GNode.create("Complex", v$g$1);
11463: yyValue.setLocation(location(yyStart));
11464:
11465: return yyResult.createValue(yyValue, yyError);
11466: }
11467:
11468: // Alternative 2.
11469:
11470: yyResult = pKeyword(yyStart);
11471: yyError = yyResult.select(yyError);
11472: if (yyResult.hasValue("__complex__")) {
11473: final String v$g$2 = "__complex__";
11474:
11475: yyValue = GNode.create("Complex", v$g$2);
11476: yyValue.setLocation(location(yyStart));
11477:
11478: return yyResult.createValue(yyValue, yyError);
11479: }
11480:
11481: // Alternative 3.
11482:
11483: yyResult = pKeyword(yyStart);
11484: yyError = yyResult.select(yyError);
11485: if (yyResult.hasValue("double")) {
11486:
11487: yyValue = GNode.create("Double", false);
11488: yyValue.setLocation(location(yyStart));
11489:
11490: return yyResult.createValue(yyValue, yyError);
11491: }
11492:
11493: // Alternative 4.
11494:
11495: yyResult = pKeyword(yyStart);
11496: yyError = yyResult.select(yyError);
11497: if (yyResult.hasValue("float")) {
11498:
11499: yyValue = GNode.create("Float", false);
11500: yyValue.setLocation(location(yyStart));
11501:
11502: return yyResult.createValue(yyValue, yyError);
11503: }
11504:
11505: // Done.
11506: yyError = yyError.select(
11507: "floating point type specifier expected", yyStart);
11508: return yyError;
11509: }
11510:
11511: // =========================================================================
11512:
11513: /**
11514: * Parse nonterminal xtc.lang.jeannie.JeannieC.IntegerTypeSpecifier.
11515: *
11516: * @param yyStart The index.
11517: * @return The result.
11518: * @throws IOException Signals an I/O error.
11519: */
11520: private Result pIntegerTypeSpecifier(final int yyStart)
11521: throws IOException {
11522: Result yyResult;
11523: Node yyValue;
11524: ParseError yyError = ParseError.DUMMY;
11525:
11526: // Alternative 1.
11527:
11528: yyResult = pKeyword(yyStart);
11529: yyError = yyResult.select(yyError);
11530: if (yyResult.hasValue("long")) {
11531:
11532: yyValue = GNode.create("Long", false);
11533: yyValue.setLocation(location(yyStart));
11534:
11535: return yyResult.createValue(yyValue, yyError);
11536: }
11537:
11538: // Alternative 2.
11539:
11540: yyResult = pKeyword(yyStart);
11541: yyError = yyResult.select(yyError);
11542: if (yyResult.hasValue("int")) {
11543:
11544: yyValue = GNode.create("Int", false);
11545: yyValue.setLocation(location(yyStart));
11546:
11547: return yyResult.createValue(yyValue, yyError);
11548: }
11549:
11550: // Alternative 3.
11551:
11552: yyResult = pKeyword(yyStart);
11553: yyError = yyResult.select(yyError);
11554: if (yyResult.hasValue("short")) {
11555:
11556: yyValue = GNode.create("Short", false);
11557: yyValue.setLocation(location(yyStart));
11558:
11559: return yyResult.createValue(yyValue, yyError);
11560: }
11561:
11562: // Alternative 4.
11563:
11564: yyResult = pKeyword(yyStart);
11565: yyError = yyResult.select(yyError);
11566: if (yyResult.hasValue("char")) {
11567:
11568: yyValue = GNode.create("Char", false);
11569: yyValue.setLocation(location(yyStart));
11570:
11571: return yyResult.createValue(yyValue, yyError);
11572: }
11573:
11574: // Alternative 5.
11575:
11576: yyResult = pKeyword(yyStart);
11577: yyError = yyResult.select(yyError);
11578: if (yyResult.hasValue("_Bool")) {
11579:
11580: yyValue = GNode.create("Bool", false);
11581: yyValue.setLocation(location(yyStart));
11582:
11583: return yyResult.createValue(yyValue, yyError);
11584: }
11585:
11586: // Alternative 6.
11587:
11588: yyResult = pKeyword(yyStart);
11589: yyError = yyResult.select(yyError);
11590: if (yyResult.hasValue("unsigned")) {
11591:
11592: yyValue = GNode.create("Unsigned", false);
11593: yyValue.setLocation(location(yyStart));
11594:
11595: return yyResult.createValue(yyValue, yyError);
11596: }
11597:
11598: // Alternative 7.
11599:
11600: yyResult = pKeyword(yyStart);
11601: yyError = yyResult.select(yyError);
11602: if (yyResult.hasValue("signed")) {
11603: final String v$g$1 = "signed";
11604:
11605: yyValue = GNode.create("Signed", v$g$1);
11606: yyValue.setLocation(location(yyStart));
11607:
11608: return yyResult.createValue(yyValue, yyError);
11609: }
11610:
11611: // Alternative 8.
11612:
11613: yyResult = pKeyword(yyStart);
11614: yyError = yyResult.select(yyError);
11615: if (yyResult.hasValue("__signed")) {
11616: final String v$g$2 = "__signed";
11617:
11618: yyValue = GNode.create("Signed", v$g$2);
11619: yyValue.setLocation(location(yyStart));
11620:
11621: return yyResult.createValue(yyValue, yyError);
11622: }
11623:
11624: // Alternative 9.
11625:
11626: yyResult = pKeyword(yyStart);
11627: yyError = yyResult.select(yyError);
11628: if (yyResult.hasValue("__signed__")) {
11629: final String v$g$3 = "__signed__";
11630:
11631: yyValue = GNode.create("Signed", v$g$3);
11632: yyValue.setLocation(location(yyStart));
11633:
11634: return yyResult.createValue(yyValue, yyError);
11635: }
11636:
11637: // Done.
11638: yyError = yyError.select("integer type specifier expected",
11639: yyStart);
11640: return yyError;
11641: }
11642:
11643: // =========================================================================
11644:
11645: /**
11646: * Parse nonterminal xtc.lang.jeannie.JeannieC.TypeofKeyword.
11647: *
11648: * @param yyStart The index.
11649: * @return The result.
11650: * @throws IOException Signals an I/O error.
11651: */
11652: private Result pTypeofKeyword(final int yyStart) throws IOException {
11653: Result yyResult;
11654: Void yyValue;
11655: ParseError yyError = ParseError.DUMMY;
11656:
11657: // Alternative 1.
11658:
11659: yyResult = pKeyword(yyStart);
11660: yyError = yyResult.select(yyError);
11661: if (yyResult.hasValue("typeof")) {
11662:
11663: yyValue = null;
11664:
11665: return yyResult.createValue(yyValue, yyError);
11666: }
11667:
11668: // Alternative 2.
11669:
11670: yyResult = pKeyword(yyStart);
11671: yyError = yyResult.select(yyError);
11672: if (yyResult.hasValue("__typeof")) {
11673:
11674: yyValue = null;
11675:
11676: return yyResult.createValue(yyValue, yyError);
11677: }
11678:
11679: // Alternative 3.
11680:
11681: yyResult = pKeyword(yyStart);
11682: yyError = yyResult.select(yyError);
11683: if (yyResult.hasValue("__typeof__")) {
11684:
11685: yyValue = null;
11686:
11687: return yyResult.createValue(yyValue, yyError);
11688: }
11689:
11690: // Done.
11691: yyError = yyError.select("typeof keyword expected", yyStart);
11692: return yyError;
11693: }
11694:
11695: // =========================================================================
11696:
11697: /**
11698: * Parse nonterminal xtc.lang.jeannie.JeannieC.Initializer.
11699: *
11700: * @param yyStart The index.
11701: * @return The result.
11702: * @throws IOException Signals an I/O error.
11703: */
11704: private Result pInitializer(final int yyStart) throws IOException {
11705: Result yyResult;
11706: int yyBase;
11707: int yyOption1;
11708: Node yyValue;
11709: ParseError yyError = ParseError.DUMMY;
11710:
11711: // Alternative <Complex>.
11712:
11713: yyResult = pSymbol(yyStart);
11714: yyError = yyResult.select(yyError);
11715: if (yyResult.hasValue("{")) {
11716:
11717: yyResult = pInitializerList(yyResult.index);
11718: yyError = yyResult.select(yyError);
11719: if (yyResult.hasValue()) {
11720: yyValue = yyResult.semanticValue();
11721:
11722: yyOption1 = yyResult.index;
11723:
11724: yyBase = yyOption1;
11725: yyResult = pSymbol(yyBase);
11726: yyError = yyResult.select(yyError);
11727: if (yyResult.hasValue(",")) {
11728:
11729: yyOption1 = yyResult.index;
11730: } else {
11731: yyError = yyError.select("\",\" expected", yyBase);
11732: }
11733:
11734: yyBase = yyOption1;
11735: yyResult = pSymbol(yyBase);
11736: yyError = yyResult.select(yyError);
11737: if (yyResult.hasValue("}")) {
11738:
11739: return yyResult.createValue(yyValue, yyError);
11740: } else {
11741: yyError = yyError.select("\"}\" expected", yyBase);
11742: }
11743: }
11744: }
11745:
11746: // Alternative <Simple>.
11747:
11748: yyResult = pAssignmentExpression(yyStart);
11749: yyError = yyResult.select(yyError);
11750: if (yyResult.hasValue()) {
11751: yyValue = yyResult.semanticValue();
11752:
11753: return yyResult.createValue(yyValue, yyError);
11754: }
11755:
11756: // Done.
11757: yyError = yyError.select("initializer expected", yyStart);
11758: return yyError;
11759: }
11760:
11761: // =========================================================================
11762:
11763: /**
11764: * Parse nonterminal xtc.lang.jeannie.JeannieC.InitializerList.
11765: *
11766: * @param yyStart The index.
11767: * @return The result.
11768: * @throws IOException Signals an I/O error.
11769: */
11770: private Result pInitializerList(final int yyStart)
11771: throws IOException {
11772: Result yyResult;
11773: int yyBase;
11774: int yyRepetition1;
11775: Pair<Node> yyRepValue1;
11776: Node yyValue;
11777: ParseError yyError = ParseError.DUMMY;
11778:
11779: // Alternative 1.
11780:
11781: yyResult = pInitializerListEntry(yyStart);
11782: yyError = yyResult.select(yyError);
11783: if (yyResult.hasValue()) {
11784: final Node v$g$1 = yyResult.semanticValue();
11785:
11786: yyRepetition1 = yyResult.index;
11787: yyRepValue1 = Pair.empty();
11788: while (true) {
11789:
11790: yyBase = yyRepetition1;
11791: yyResult = pSymbol(yyBase);
11792: yyError = yyResult.select(yyError);
11793: if (yyResult.hasValue(",")) {
11794:
11795: yyResult = pInitializerListEntry(yyResult.index);
11796: yyError = yyResult.select(yyError);
11797: if (yyResult.hasValue()) {
11798: final Node v$el$1 = yyResult.semanticValue();
11799:
11800: yyRepetition1 = yyResult.index;
11801: yyRepValue1 = new Pair<Node>(v$el$1,
11802: yyRepValue1);
11803: continue;
11804: }
11805: } else {
11806: yyError = yyError.select("\",\" expected", yyBase);
11807: }
11808: break;
11809: }
11810: { // Start scope for v$g$2.
11811: final Pair<Node> v$g$2 = yyRepValue1.reverse();
11812:
11813: yyValue = GNode.createFromPair("InitializerList",
11814: v$g$1, v$g$2);
11815: yyValue.setLocation(location(yyStart));
11816:
11817: return new SemanticValue(yyValue, yyRepetition1,
11818: yyError);
11819: } // End scope for v$g$2.
11820: }
11821:
11822: // Alternative 2.
11823:
11824: if (GCC) {
11825:
11826: yyValue = GNode.create("InitializerList", false);
11827: yyValue.setLocation(location(yyStart));
11828:
11829: return new SemanticValue(yyValue, yyStart, yyError);
11830: }
11831:
11832: // Done.
11833: yyError = yyError.select("initializer list expected", yyStart);
11834: return yyError;
11835: }
11836:
11837: // =========================================================================
11838:
11839: /**
11840: * Parse nonterminal xtc.lang.jeannie.JeannieC.InitializerListEntry.
11841: *
11842: * @param yyStart The index.
11843: * @return The result.
11844: * @throws IOException Signals an I/O error.
11845: */
11846: private Result pInitializerListEntry(final int yyStart)
11847: throws IOException {
11848: Result yyResult;
11849: int yyOption1;
11850: Node yyOpValue1;
11851: Node yyValue;
11852: ParseError yyError = ParseError.DUMMY;
11853:
11854: // Alternative 1.
11855:
11856: yyOption1 = yyStart;
11857: yyOpValue1 = null;
11858:
11859: yyResult = pDesignation(yyOption1);
11860: yyError = yyResult.select(yyError);
11861: if (yyResult.hasValue()) {
11862: final Node v$el$1 = yyResult.semanticValue();
11863:
11864: yyOption1 = yyResult.index;
11865: yyOpValue1 = v$el$1;
11866: }
11867: { // Start scope for v$g$1.
11868: final Node v$g$1 = yyOpValue1;
11869:
11870: yyResult = pInitializer(yyOption1);
11871: yyError = yyResult.select(yyError);
11872: if (yyResult.hasValue()) {
11873: final Node v$g$2 = yyResult.semanticValue();
11874:
11875: yyValue = GNode.create("InitializerListEntry", v$g$1,
11876: v$g$2);
11877: yyValue.setLocation(location(yyStart));
11878:
11879: return yyResult.createValue(yyValue, yyError);
11880: }
11881: } // End scope for v$g$1.
11882:
11883: // Done.
11884: return yyError;
11885: }
11886:
11887: // =========================================================================
11888:
11889: /**
11890: * Parse nonterminal xtc.lang.jeannie.JeannieC.Designation.
11891: *
11892: * @param yyStart The index.
11893: * @return The result.
11894: * @throws IOException Signals an I/O error.
11895: */
11896: private Result pDesignation(final int yyStart) throws IOException {
11897: Result yyResult;
11898: int yyBase;
11899: int yyRepetition1;
11900: boolean yyRepeated1;
11901: Pair<Node> yyRepValue1;
11902: Node yyValue;
11903: ParseError yyError = ParseError.DUMMY;
11904:
11905: // Alternative <Standard>.
11906:
11907: yyRepetition1 = yyStart;
11908: yyRepeated1 = false;
11909: yyRepValue1 = Pair.empty();
11910: while (true) {
11911:
11912: yyResult = pDesignator(yyRepetition1);
11913: yyError = yyResult.select(yyError);
11914: if (yyResult.hasValue()) {
11915: final Node v$el$1 = yyResult.semanticValue();
11916:
11917: yyRepetition1 = yyResult.index;
11918: yyRepeated1 = true;
11919: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
11920: continue;
11921: }
11922: break;
11923: }
11924:
11925: if (yyRepeated1) {
11926: final Pair<Node> v$g$1 = yyRepValue1.reverse();
11927:
11928: yyBase = yyRepetition1;
11929: yyResult = pSymbol(yyBase);
11930: yyError = yyResult.select(yyError);
11931: if (yyResult.hasValue("=")) {
11932:
11933: yyValue = GNode.createFromPair("Designation", v$g$1);
11934: yyValue.setLocation(location(yyStart));
11935:
11936: return yyResult.createValue(yyValue, yyError);
11937: } else {
11938: yyError = yyError.select("\"=\" expected", yyBase);
11939: }
11940: }
11941:
11942: // Alternative 2.
11943:
11944: if (GCC) {
11945:
11946: final int yyChoice1 = yyStart;
11947:
11948: // Nested alternative 1.
11949:
11950: yyResult = pObsoleteArrayDesignation(yyChoice1);
11951: yyError = yyResult.select(yyError);
11952: if (yyResult.hasValue()) {
11953: yyValue = yyResult.semanticValue();
11954:
11955: return yyResult.createValue(yyValue, yyError);
11956: }
11957:
11958: // Nested alternative 2.
11959:
11960: yyResult = pObsoleteFieldDesignation(yyChoice1);
11961: yyError = yyResult.select(yyError);
11962: if (yyResult.hasValue()) {
11963: yyValue = yyResult.semanticValue();
11964:
11965: return yyResult.createValue(yyValue, yyError);
11966: }
11967: }
11968:
11969: // Done.
11970: yyError = yyError.select("designation expected", yyStart);
11971: return yyError;
11972: }
11973:
11974: // =========================================================================
11975:
11976: /**
11977: * Parse nonterminal xtc.lang.jeannie.JeannieC.Designator.
11978: *
11979: * @param yyStart The index.
11980: * @return The result.
11981: * @throws IOException Signals an I/O error.
11982: */
11983: private Result pDesignator(final int yyStart) throws IOException {
11984: Result yyResult;
11985: int yyBase;
11986: Node yyValue;
11987: ParseError yyError = ParseError.DUMMY;
11988:
11989: // Alternative <Array>.
11990:
11991: yyResult = pSymbol(yyStart);
11992: yyError = yyResult.select(yyError);
11993: if (yyResult.hasValue("[")) {
11994: final String v$g$1 = "[";
11995:
11996: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
11997: yyError = yyResult.select(yyError);
11998: if (yyResult.hasValue()) {
11999: final Node v$g$2 = yyResult.semanticValue();
12000:
12001: yyBase = yyResult.index;
12002: yyResult = pSymbol(yyBase);
12003: yyError = yyResult.select(yyError);
12004: if (yyResult.hasValue("]")) {
12005:
12006: yyValue = GNode.create("Designator", v$g$1, v$g$2);
12007: yyValue.setLocation(location(yyStart));
12008:
12009: return yyResult.createValue(yyValue, yyError);
12010: } else {
12011: yyError = yyError.select("\"]\" expected", yyBase);
12012: }
12013: }
12014: }
12015:
12016: // Alternative <ArrayRange>.
12017:
12018: if (GCC) {
12019:
12020: yyResult = pSymbol(yyStart);
12021: yyError = yyResult.select(yyError);
12022: if (yyResult.hasValue("[")) {
12023: final String v$g$3 = "[";
12024:
12025: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
12026: yyError = yyResult.select(yyError);
12027: if (yyResult.hasValue()) {
12028: final Node v$g$4 = yyResult.semanticValue();
12029:
12030: yyBase = yyResult.index;
12031: yyResult = pSymbol(yyBase);
12032: yyError = yyResult.select(yyError);
12033: if (yyResult.hasValue("...")) {
12034:
12035: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
12036: yyError = yyResult.select(yyError);
12037: if (yyResult.hasValue()) {
12038: final Node v$g$5 = yyResult.semanticValue();
12039:
12040: yyBase = yyResult.index;
12041: yyResult = pSymbol(yyBase);
12042: yyError = yyResult.select(yyError);
12043: if (yyResult.hasValue("]")) {
12044:
12045: yyValue = GNode.create("Designator",
12046: v$g$3, v$g$4, v$g$5);
12047: yyValue.setLocation(location(yyStart));
12048:
12049: return yyResult.createValue(yyValue,
12050: yyError);
12051: } else {
12052: yyError = yyError.select(
12053: "\"]\" expected", yyBase);
12054: }
12055: }
12056: } else {
12057: yyError = yyError.select("\"...\" expected",
12058: yyBase);
12059: }
12060: }
12061: }
12062: }
12063:
12064: // Alternative <Structure>.
12065:
12066: yyResult = pSymbol(yyStart);
12067: yyError = yyResult.select(yyError);
12068: if (yyResult.hasValue(".")) {
12069: final String v$g$6 = ".";
12070:
12071: yyResult = pJeannieC$PrimaryIdentifier(yyResult.index);
12072: yyError = yyResult.select(yyError);
12073: if (yyResult.hasValue()) {
12074: final Node v$g$7 = yyResult.semanticValue();
12075:
12076: yyValue = GNode.create("Designator", v$g$6, v$g$7);
12077: yyValue.setLocation(location(yyStart));
12078:
12079: return yyResult.createValue(yyValue, yyError);
12080: }
12081: }
12082:
12083: // Done.
12084: yyError = yyError.select("designator expected", yyStart);
12085: return yyError;
12086: }
12087:
12088: // =========================================================================
12089:
12090: /**
12091: * Parse nonterminal xtc.lang.jeannie.JeannieC.ObsoleteArrayDesignation.
12092: *
12093: * @param yyStart The index.
12094: * @return The result.
12095: * @throws IOException Signals an I/O error.
12096: */
12097: private Result pObsoleteArrayDesignation(final int yyStart)
12098: throws IOException {
12099:
12100: Result yyResult;
12101: int yyBase;
12102: Node yyValue;
12103: ParseError yyError = ParseError.DUMMY;
12104:
12105: // Alternative 1.
12106:
12107: yyResult = pSymbol(yyStart);
12108: yyError = yyResult.select(yyError);
12109: if (yyResult.hasValue("[")) {
12110: final String v$g$1 = "[";
12111:
12112: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
12113: yyError = yyResult.select(yyError);
12114: if (yyResult.hasValue()) {
12115: final Node v$g$2 = yyResult.semanticValue();
12116:
12117: final int yyChoice1 = yyResult.index;
12118:
12119: // Nested alternative 1.
12120:
12121: yyBase = yyChoice1;
12122: yyResult = pSymbol(yyBase);
12123: yyError = yyResult.select(yyError);
12124: if (yyResult.hasValue("]")) {
12125:
12126: yyValue = GNode.create("ObsoleteArrayDesignation",
12127: v$g$1, v$g$2);
12128: yyValue.setLocation(location(yyStart));
12129:
12130: return yyResult.createValue(yyValue, yyError);
12131: } else {
12132: yyError = yyError.select("\"]\" expected", yyBase);
12133: }
12134:
12135: // Nested alternative 2.
12136:
12137: yyBase = yyChoice1;
12138: yyResult = pSymbol(yyBase);
12139: yyError = yyResult.select(yyError);
12140: if (yyResult.hasValue("...")) {
12141:
12142: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
12143: yyError = yyResult.select(yyError);
12144: if (yyResult.hasValue()) {
12145: final Node v$g$3 = yyResult.semanticValue();
12146:
12147: yyBase = yyResult.index;
12148: yyResult = pSymbol(yyBase);
12149: yyError = yyResult.select(yyError);
12150: if (yyResult.hasValue("]")) {
12151:
12152: yyValue = GNode.create(
12153: "ObsoleteArrayDesignation", v$g$1,
12154: v$g$2, v$g$3);
12155: yyValue.setLocation(location(yyStart));
12156:
12157: return yyResult.createValue(yyValue,
12158: yyError);
12159: } else {
12160: yyError = yyError.select("\"]\" expected",
12161: yyBase);
12162: }
12163: }
12164: } else {
12165: yyError = yyError
12166: .select("\"...\" expected", yyBase);
12167: }
12168: }
12169: }
12170:
12171: // Done.
12172: yyError = yyError.select("obsolete array designation expected",
12173: yyStart);
12174: return yyError;
12175: }
12176:
12177: // =========================================================================
12178:
12179: /**
12180: * Parse nonterminal xtc.lang.jeannie.JeannieC.ObsoleteFieldDesignation.
12181: *
12182: * @param yyStart The index.
12183: * @return The result.
12184: * @throws IOException Signals an I/O error.
12185: */
12186: private Result pObsoleteFieldDesignation(final int yyStart)
12187: throws IOException {
12188:
12189: Result yyResult;
12190: int yyBase;
12191: Node yyValue;
12192: ParseError yyError = ParseError.DUMMY;
12193:
12194: // Alternative 1.
12195:
12196: yyResult = pCIdentifier$Identifier(yyStart);
12197: yyError = yyResult.select(yyError);
12198: if (yyResult.hasValue()) {
12199: final String v$g$1 = yyResult.semanticValue();
12200:
12201: yyBase = yyResult.index;
12202: yyResult = pSymbol(yyBase);
12203: yyError = yyResult.select(yyError);
12204: if (yyResult.hasValue(":")) {
12205:
12206: yyValue = GNode.create("ObsoleteFieldDesignation",
12207: v$g$1);
12208: yyValue.setLocation(location(yyStart));
12209:
12210: return yyResult.createValue(yyValue, yyError);
12211: } else {
12212: yyError = yyError.select("\":\" expected", yyBase);
12213: }
12214: }
12215:
12216: // Done.
12217: return yyError;
12218: }
12219:
12220: // =========================================================================
12221:
12222: /**
12223: * Parse nonterminal xtc.lang.jeannie.JeannieC.TypeName.
12224: *
12225: * @param yyStart The index.
12226: * @return The result.
12227: * @throws IOException Signals an I/O error.
12228: */
12229: private Result pJeannieC$TypeName(final int yyStart)
12230: throws IOException {
12231: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
12232: if (null == yyColumn.chunk4)
12233: yyColumn.chunk4 = new Chunk4();
12234: if (null == yyColumn.chunk4.fJeannieC$TypeName)
12235: yyColumn.chunk4.fJeannieC$TypeName = pJeannieC$TypeName$1(yyStart);
12236: return yyColumn.chunk4.fJeannieC$TypeName;
12237: }
12238:
12239: /** Actually parse xtc.lang.jeannie.JeannieC.TypeName. */
12240: private Result pJeannieC$TypeName$1(final int yyStart)
12241: throws IOException {
12242: Result yyResult;
12243: int yyOption1;
12244: Node yyOpValue1;
12245: Node yyValue;
12246: ParseError yyError = ParseError.DUMMY;
12247:
12248: // Start a state modification.
12249: yyState.start();
12250:
12251: // Alternative 1.
12252:
12253: yyResult = pSpecifierQualifierList(yyStart);
12254: yyError = yyResult.select(yyError);
12255: if (yyResult.hasValue()) {
12256: final Node v$g$1 = yyResult.semanticValue();
12257:
12258: yyOption1 = yyResult.index;
12259: yyOpValue1 = null;
12260:
12261: yyResult = pAbstractDeclarator(yyOption1);
12262: yyError = yyResult.select(yyError);
12263: if (yyResult.hasValue()) {
12264: final Node v$el$1 = yyResult.semanticValue();
12265:
12266: yyOption1 = yyResult.index;
12267: yyOpValue1 = v$el$1;
12268: }
12269: { // Start scope for v$g$2.
12270: final Node v$g$2 = yyOpValue1;
12271:
12272: yyValue = GNode.create("TypeName", v$g$1, v$g$2);
12273: yyValue.setLocation(location(yyStart));
12274:
12275: // Commit the state modification.
12276: yyState.commit();
12277:
12278: return new SemanticValue(yyValue, yyOption1, yyError);
12279: } // End scope for v$g$2.
12280: }
12281:
12282: // Abort the state modification.
12283: yyState.abort();
12284:
12285: // Done.
12286: return yyError;
12287: }
12288:
12289: // =========================================================================
12290:
12291: /**
12292: * Parse nonterminal xtc.lang.jeannie.JeannieC.AttributeSpecifierList.
12293: *
12294: * @param yyStart The index.
12295: * @return The result.
12296: * @throws IOException Signals an I/O error.
12297: */
12298: private Result pAttributeSpecifierList(final int yyStart)
12299: throws IOException {
12300:
12301: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
12302: if (null == yyColumn.chunk4)
12303: yyColumn.chunk4 = new Chunk4();
12304: if (null == yyColumn.chunk4.fAttributeSpecifierList)
12305: yyColumn.chunk4.fAttributeSpecifierList = pAttributeSpecifierList$1(yyStart);
12306: return yyColumn.chunk4.fAttributeSpecifierList;
12307: }
12308:
12309: /** Actually parse xtc.lang.jeannie.JeannieC.AttributeSpecifierList. */
12310: private Result pAttributeSpecifierList$1(final int yyStart)
12311: throws IOException {
12312:
12313: Result yyResult;
12314: Node yyValue;
12315: ParseError yyError = ParseError.DUMMY;
12316:
12317: // Alternative 1.
12318:
12319: yyResult = pAttributeSpecifierPlus(yyStart);
12320: yyError = yyResult.select(yyError);
12321: if (yyResult.hasValue()) {
12322: final Pair<Node> v$g$1 = yyResult.semanticValue();
12323:
12324: yyValue = GNode.createFromPair("AttributeSpecifierList",
12325: v$g$1);
12326: yyValue.setLocation(location(yyStart));
12327:
12328: return yyResult.createValue(yyValue, yyError);
12329: }
12330:
12331: // Done.
12332: return yyError;
12333: }
12334:
12335: // =========================================================================
12336:
12337: /**
12338: * Parse nonterminal xtc.lang.jeannie.JeannieC.AttributeSpecifierPlus.
12339: *
12340: * @param yyStart The index.
12341: * @return The result.
12342: * @throws IOException Signals an I/O error.
12343: */
12344: private Result pAttributeSpecifierPlus(final int yyStart)
12345: throws IOException {
12346:
12347: Result yyResult;
12348: int yyRepetition1;
12349: boolean yyRepeated1;
12350: Pair<Node> yyRepValue1;
12351: Pair<Node> yyValue;
12352: ParseError yyError = ParseError.DUMMY;
12353:
12354: // Alternative 1.
12355:
12356: yyRepetition1 = yyStart;
12357: yyRepeated1 = false;
12358: yyRepValue1 = Pair.empty();
12359: while (true) {
12360:
12361: yyResult = pAttributeSpecifier(yyRepetition1);
12362: yyError = yyResult.select(yyError);
12363: if (yyResult.hasValue()) {
12364: final Node v$el$1 = yyResult.semanticValue();
12365:
12366: yyRepetition1 = yyResult.index;
12367: yyRepeated1 = true;
12368: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
12369: continue;
12370: }
12371: break;
12372: }
12373:
12374: if (yyRepeated1) {
12375: yyValue = yyRepValue1.reverse();
12376:
12377: return new SemanticValue(yyValue, yyRepetition1, yyError);
12378: }
12379:
12380: // Done.
12381: return yyError;
12382: }
12383:
12384: // =========================================================================
12385:
12386: /**
12387: * Parse nonterminal xtc.lang.jeannie.JeannieC.AttributeSpecifier.
12388: *
12389: * @param yyStart The index.
12390: * @return The result.
12391: * @throws IOException Signals an I/O error.
12392: */
12393: private Result pAttributeSpecifier(final int yyStart)
12394: throws IOException {
12395: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
12396: if (null == yyColumn.chunk4)
12397: yyColumn.chunk4 = new Chunk4();
12398: if (null == yyColumn.chunk4.fAttributeSpecifier)
12399: yyColumn.chunk4.fAttributeSpecifier = pAttributeSpecifier$1(yyStart);
12400: return yyColumn.chunk4.fAttributeSpecifier;
12401: }
12402:
12403: /** Actually parse xtc.lang.jeannie.JeannieC.AttributeSpecifier. */
12404: private Result pAttributeSpecifier$1(final int yyStart)
12405: throws IOException {
12406: Result yyResult;
12407: int yyBase;
12408: int yyOption1;
12409: Node yyOpValue1;
12410: Node yyValue;
12411: ParseError yyError = ParseError.DUMMY;
12412:
12413: // Alternative 1.
12414:
12415: yyResult = pAttributeKeyword(yyStart);
12416: yyError = yyResult.select(yyError);
12417: if (yyResult.hasValue()) {
12418:
12419: yyBase = yyResult.index;
12420: yyResult = pSymbol(yyBase);
12421: yyError = yyResult.select(yyError);
12422: if (yyResult.hasValue("(")) {
12423:
12424: yyBase = yyResult.index;
12425: yyResult = pSymbol(yyBase);
12426: yyError = yyResult.select(yyError);
12427: if (yyResult.hasValue("(")) {
12428:
12429: yyOption1 = yyResult.index;
12430: yyOpValue1 = null;
12431:
12432: yyResult = pAttributeList(yyOption1);
12433: yyError = yyResult.select(yyError);
12434: if (yyResult.hasValue()) {
12435: final Node v$el$1 = yyResult.semanticValue();
12436:
12437: yyOption1 = yyResult.index;
12438: yyOpValue1 = v$el$1;
12439: }
12440: { // Start scope for v$g$1.
12441: final Node v$g$1 = yyOpValue1;
12442:
12443: yyBase = yyOption1;
12444: yyResult = pSymbol(yyBase);
12445: yyError = yyResult.select(yyError);
12446: if (yyResult.hasValue(")")) {
12447:
12448: yyBase = yyResult.index;
12449: yyResult = pSymbol(yyBase);
12450: yyError = yyResult.select(yyError);
12451: if (yyResult.hasValue(")")) {
12452:
12453: yyValue = GNode.create(
12454: "AttributeSpecifier", v$g$1);
12455: yyValue.setLocation(location(yyStart));
12456:
12457: return yyResult.createValue(yyValue,
12458: yyError);
12459: } else {
12460: yyError = yyError.select(
12461: "\")\" expected", yyBase);
12462: }
12463: } else {
12464: yyError = yyError.select("\")\" expected",
12465: yyBase);
12466: }
12467: } // End scope for v$g$1.
12468: } else {
12469: yyError = yyError.select("\"(\" expected", yyBase);
12470: }
12471: } else {
12472: yyError = yyError.select("\"(\" expected", yyBase);
12473: }
12474: }
12475:
12476: // Done.
12477: return yyError;
12478: }
12479:
12480: // =========================================================================
12481:
12482: /**
12483: * Parse nonterminal xtc.lang.jeannie.JeannieC.AttributeKeyword.
12484: *
12485: * @param yyStart The index.
12486: * @return The result.
12487: * @throws IOException Signals an I/O error.
12488: */
12489: private Result pAttributeKeyword(final int yyStart)
12490: throws IOException {
12491: Result yyResult;
12492: Void yyValue;
12493: ParseError yyError = ParseError.DUMMY;
12494:
12495: // Alternative 1.
12496:
12497: yyResult = pKeyword(yyStart);
12498: yyError = yyResult.select(yyError);
12499: if (yyResult.hasValue("__attribute")) {
12500:
12501: yyValue = null;
12502:
12503: return yyResult.createValue(yyValue, yyError);
12504: }
12505:
12506: // Alternative 2.
12507:
12508: yyResult = pKeyword(yyStart);
12509: yyError = yyResult.select(yyError);
12510: if (yyResult.hasValue("__attribute__")) {
12511:
12512: yyValue = null;
12513:
12514: return yyResult.createValue(yyValue, yyError);
12515: }
12516:
12517: // Done.
12518: yyError = yyError.select("attribute keyword expected", yyStart);
12519: return yyError;
12520: }
12521:
12522: // =========================================================================
12523:
12524: /**
12525: * Parse nonterminal xtc.lang.jeannie.JeannieC.AttributeList.
12526: *
12527: * @param yyStart The index.
12528: * @return The result.
12529: * @throws IOException Signals an I/O error.
12530: */
12531: private Result pAttributeList(final int yyStart) throws IOException {
12532: Result yyResult;
12533: int yyBase;
12534: int yyRepetition1;
12535: Pair<Node> yyRepValue1;
12536: Node yyValue;
12537: ParseError yyError = ParseError.DUMMY;
12538:
12539: // Alternative 1.
12540:
12541: yyResult = pAttributeListEntry(yyStart);
12542: yyError = yyResult.select(yyError);
12543: if (yyResult.hasValue()) {
12544: final Node v$g$1 = yyResult.semanticValue();
12545:
12546: yyRepetition1 = yyResult.index;
12547: yyRepValue1 = Pair.empty();
12548: while (true) {
12549:
12550: yyBase = yyRepetition1;
12551: yyResult = pSymbol(yyBase);
12552: yyError = yyResult.select(yyError);
12553: if (yyResult.hasValue(",")) {
12554:
12555: yyResult = pAttributeListEntry(yyResult.index);
12556: yyError = yyResult.select(yyError);
12557: if (yyResult.hasValue()) {
12558: final Node v$el$1 = yyResult.semanticValue();
12559:
12560: yyRepetition1 = yyResult.index;
12561: yyRepValue1 = new Pair<Node>(v$el$1,
12562: yyRepValue1);
12563: continue;
12564: }
12565: } else {
12566: yyError = yyError.select("\",\" expected", yyBase);
12567: }
12568: break;
12569: }
12570: { // Start scope for v$g$2.
12571: final Pair<Node> v$g$2 = yyRepValue1.reverse();
12572:
12573: yyValue = GNode.createFromPair("AttributeList", v$g$1,
12574: v$g$2);
12575: yyValue.setLocation(location(yyStart));
12576:
12577: return new SemanticValue(yyValue, yyRepetition1,
12578: yyError);
12579: } // End scope for v$g$2.
12580: }
12581:
12582: // Done.
12583: return yyError;
12584: }
12585:
12586: // =========================================================================
12587:
12588: /**
12589: * Parse nonterminal xtc.lang.jeannie.JeannieC.AttributeListEntry.
12590: *
12591: * @param yyStart The index.
12592: * @return The result.
12593: * @throws IOException Signals an I/O error.
12594: */
12595: private Result pAttributeListEntry(final int yyStart)
12596: throws IOException {
12597: Result yyResult;
12598: int yyBase;
12599: int yyOption1;
12600: Node yyOpValue1;
12601: int yyOption2;
12602: Node yyOpValue2;
12603: Node yyValue;
12604: ParseError yyError = ParseError.DUMMY;
12605:
12606: // Alternative 1.
12607:
12608: yyResult = pCIdentifier$Word(yyStart);
12609: yyError = yyResult.select(yyError);
12610: if (yyResult.hasValue()) {
12611: final String v$g$1 = yyResult.semanticValue();
12612:
12613: yyOption1 = yyResult.index;
12614: yyOpValue1 = null;
12615:
12616: yyBase = yyOption1;
12617: yyResult = pSymbol(yyBase);
12618: yyError = yyResult.select(yyError);
12619: if (yyResult.hasValue("(")) {
12620:
12621: yyOption2 = yyResult.index;
12622: yyOpValue2 = null;
12623:
12624: yyResult = pJeannieC$ExpressionList(yyOption2);
12625: yyError = yyResult.select(yyError);
12626: if (yyResult.hasValue()) {
12627: final Node v$el$2 = yyResult.semanticValue();
12628:
12629: yyOption2 = yyResult.index;
12630: yyOpValue2 = v$el$2;
12631: }
12632: { // Start scope for v$el$1.
12633: final Node v$el$1 = yyOpValue2;
12634:
12635: yyBase = yyOption2;
12636: yyResult = pSymbol(yyBase);
12637: yyError = yyResult.select(yyError);
12638: if (yyResult.hasValue(")")) {
12639:
12640: yyOption1 = yyResult.index;
12641: yyOpValue1 = v$el$1;
12642: } else {
12643: yyError = yyError.select("\")\" expected",
12644: yyBase);
12645: }
12646: } // End scope for v$el$1.
12647: } else {
12648: yyError = yyError.select("\"(\" expected", yyBase);
12649: }
12650: { // Start scope for v$g$2.
12651: final Node v$g$2 = yyOpValue1;
12652:
12653: yyValue = GNode.create("AttributeListEntry", v$g$1,
12654: v$g$2);
12655: yyValue.setLocation(location(yyStart));
12656:
12657: return new SemanticValue(yyValue, yyOption1, yyError);
12658: } // End scope for v$g$2.
12659: }
12660:
12661: // Done.
12662: return yyError;
12663: }
12664:
12665: // =========================================================================
12666:
12667: /**
12668: * Parse nonterminal xtc.lang.jeannie.JeannieC.Statement.
12669: *
12670: * @param yyStart The index.
12671: * @return The result.
12672: * @throws IOException Signals an I/O error.
12673: */
12674: private Result pJeannieC$Statement(final int yyStart)
12675: throws IOException {
12676: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
12677: if (null == yyColumn.chunk4)
12678: yyColumn.chunk4 = new Chunk4();
12679: if (null == yyColumn.chunk4.fJeannieC$Statement)
12680: yyColumn.chunk4.fJeannieC$Statement = pJeannieC$Statement$1(yyStart);
12681: return yyColumn.chunk4.fJeannieC$Statement;
12682: }
12683:
12684: /** Actually parse xtc.lang.jeannie.JeannieC.Statement. */
12685: private Result pJeannieC$Statement$1(final int yyStart)
12686: throws IOException {
12687: Result yyResult;
12688: int yyBase;
12689: int yyOption1;
12690: Node yyOpValue1;
12691: Node yyValue;
12692: ParseError yyError = ParseError.DUMMY;
12693:
12694: // Alternative 1.
12695:
12696: yyResult = pCommaExpression(yyStart);
12697: yyError = yyResult.select(yyError);
12698: if (yyResult.hasValue()) {
12699: final Node v$g$1 = yyResult.semanticValue();
12700:
12701: yyBase = yyResult.index;
12702: yyResult = pSymbol(yyBase);
12703: yyError = yyResult.select(yyError);
12704: if (yyResult.hasValue(";")) {
12705:
12706: yyValue = GNode.create("ExpressionStatement", v$g$1);
12707: yyValue.setLocation(location(yyStart));
12708:
12709: return yyResult.createValue(yyValue, yyError);
12710: } else {
12711: yyError = yyError.select("\";\" expected", yyBase);
12712: }
12713: }
12714:
12715: // Alternative <JavaInCStatement>.
12716:
12717: yyResult = pJavaInCStatement(yyStart);
12718: yyError = yyResult.select(yyError);
12719: if (yyResult.hasValue()) {
12720: yyValue = yyResult.semanticValue();
12721:
12722: return yyResult.createValue(yyValue, yyError);
12723: }
12724:
12725: // Alternative <Cancel>.
12726:
12727: yyResult = pCancelStatement(yyStart);
12728: yyError = yyResult.select(yyError);
12729: if (yyResult.hasValue()) {
12730: yyValue = yyResult.semanticValue();
12731:
12732: return yyResult.createValue(yyValue, yyError);
12733: }
12734:
12735: // Alternative <Commit>.
12736:
12737: yyResult = pCommitStatement(yyStart);
12738: yyError = yyResult.select(yyError);
12739: if (yyResult.hasValue()) {
12740: yyValue = yyResult.semanticValue();
12741:
12742: return yyResult.createValue(yyValue, yyError);
12743: }
12744:
12745: // Alternative <With>.
12746:
12747: yyResult = pWithStatement(yyStart);
12748: yyError = yyResult.select(yyError);
12749: if (yyResult.hasValue()) {
12750: yyValue = yyResult.semanticValue();
12751:
12752: return yyResult.createValue(yyValue, yyError);
12753: }
12754:
12755: // Alternative <Compound>.
12756:
12757: yyResult = pCompoundStatement(yyStart);
12758: yyError = yyResult.select(yyError);
12759: if (yyResult.hasValue()) {
12760: yyValue = yyResult.semanticValue();
12761:
12762: return yyResult.createValue(yyValue, yyError);
12763: }
12764:
12765: // Alternative 7.
12766:
12767: yyResult = pKeyword(yyStart);
12768: yyError = yyResult.select(yyError);
12769: if (yyResult.hasValue("if")) {
12770:
12771: yyBase = yyResult.index;
12772: yyResult = pSymbol(yyBase);
12773: yyError = yyResult.select(yyError);
12774: if (yyResult.hasValue("(")) {
12775:
12776: yyResult = pCommaExpression(yyResult.index);
12777: yyError = yyResult.select(yyError);
12778: if (yyResult.hasValue()) {
12779: final Node v$g$1 = yyResult.semanticValue();
12780:
12781: yyBase = yyResult.index;
12782: yyResult = pSymbol(yyBase);
12783: yyError = yyResult.select(yyError);
12784: if (yyResult.hasValue(")")) {
12785:
12786: yyResult = pJeannieC$Statement(yyResult.index);
12787: yyError = yyResult.select(yyError);
12788: if (yyResult.hasValue()) {
12789: final Node v$g$2 = yyResult.semanticValue();
12790:
12791: final int yyChoice1 = yyResult.index;
12792:
12793: // Nested alternative 1.
12794:
12795: yyBase = yyChoice1;
12796: yyResult = pKeyword(yyBase);
12797: yyError = yyResult.select(yyError);
12798: if (yyResult.hasValue("else")) {
12799:
12800: yyResult = pJeannieC$Statement(yyResult.index);
12801: yyError = yyResult.select(yyError);
12802: if (yyResult.hasValue()) {
12803: final Node v$g$3 = yyResult
12804: .semanticValue();
12805:
12806: yyValue = GNode.create(
12807: "IfElseStatement", v$g$1,
12808: v$g$2, v$g$3);
12809: yyValue
12810: .setLocation(location(yyStart));
12811:
12812: return yyResult.createValue(
12813: yyValue, yyError);
12814: }
12815: } else {
12816: yyError = yyError.select(
12817: "\"else\" expected", yyBase);
12818: }
12819:
12820: // Nested alternative 2.
12821:
12822: yyValue = GNode.create("IfStatement",
12823: v$g$1, v$g$2);
12824: yyValue.setLocation(location(yyStart));
12825:
12826: return new SemanticValue(yyValue,
12827: yyChoice1, yyError);
12828: }
12829: } else {
12830: yyError = yyError.select("\")\" expected",
12831: yyBase);
12832: }
12833: }
12834: } else {
12835: yyError = yyError.select("\"(\" expected", yyBase);
12836: }
12837: }
12838:
12839: // Alternative 8.
12840:
12841: yyResult = pKeyword(yyStart);
12842: yyError = yyResult.select(yyError);
12843: if (yyResult.hasValue("while")) {
12844:
12845: yyBase = yyResult.index;
12846: yyResult = pSymbol(yyBase);
12847: yyError = yyResult.select(yyError);
12848: if (yyResult.hasValue("(")) {
12849:
12850: yyResult = pCommaExpression(yyResult.index);
12851: yyError = yyResult.select(yyError);
12852: if (yyResult.hasValue()) {
12853: final Node v$g$1 = yyResult.semanticValue();
12854:
12855: yyBase = yyResult.index;
12856: yyResult = pSymbol(yyBase);
12857: yyError = yyResult.select(yyError);
12858: if (yyResult.hasValue(")")) {
12859:
12860: yyResult = pJeannieC$Statement(yyResult.index);
12861: yyError = yyResult.select(yyError);
12862: if (yyResult.hasValue()) {
12863: final Node v$g$2 = yyResult.semanticValue();
12864:
12865: yyValue = GNode.create("WhileStatement",
12866: v$g$1, v$g$2);
12867: yyValue.setLocation(location(yyStart));
12868:
12869: return yyResult.createValue(yyValue,
12870: yyError);
12871: }
12872: } else {
12873: yyError = yyError.select("\")\" expected",
12874: yyBase);
12875: }
12876: }
12877: } else {
12878: yyError = yyError.select("\"(\" expected", yyBase);
12879: }
12880: }
12881:
12882: // Alternative 9.
12883:
12884: yyResult = pKeyword(yyStart);
12885: yyError = yyResult.select(yyError);
12886: if (yyResult.hasValue("do")) {
12887:
12888: yyResult = pJeannieC$Statement(yyResult.index);
12889: yyError = yyResult.select(yyError);
12890: if (yyResult.hasValue()) {
12891: final Node v$g$1 = yyResult.semanticValue();
12892:
12893: yyBase = yyResult.index;
12894: yyResult = pKeyword(yyBase);
12895: yyError = yyResult.select(yyError);
12896: if (yyResult.hasValue("while")) {
12897:
12898: yyBase = yyResult.index;
12899: yyResult = pSymbol(yyBase);
12900: yyError = yyResult.select(yyError);
12901: if (yyResult.hasValue("(")) {
12902:
12903: yyResult = pCommaExpression(yyResult.index);
12904: yyError = yyResult.select(yyError);
12905: if (yyResult.hasValue()) {
12906: final Node v$g$2 = yyResult.semanticValue();
12907:
12908: yyBase = yyResult.index;
12909: yyResult = pSymbol(yyBase);
12910: yyError = yyResult.select(yyError);
12911: if (yyResult.hasValue(")")) {
12912:
12913: yyBase = yyResult.index;
12914: yyResult = pSymbol(yyBase);
12915: yyError = yyResult.select(yyError);
12916: if (yyResult.hasValue(";")) {
12917:
12918: yyValue = GNode
12919: .create("DoStatement",
12920: v$g$1, v$g$2);
12921: yyValue
12922: .setLocation(location(yyStart));
12923:
12924: return yyResult.createValue(
12925: yyValue, yyError);
12926: } else {
12927: yyError = yyError.select(
12928: "\";\" expected", yyBase);
12929: }
12930: } else {
12931: yyError = yyError.select(
12932: "\")\" expected", yyBase);
12933: }
12934: }
12935: } else {
12936: yyError = yyError.select("\"(\" expected",
12937: yyBase);
12938: }
12939: } else {
12940: yyError = yyError.select("\"while\" expected",
12941: yyBase);
12942: }
12943: }
12944: }
12945:
12946: // Alternative 10.
12947:
12948: yyResult = pKeyword(yyStart);
12949: yyError = yyResult.select(yyError);
12950: if (yyResult.hasValue("for")) {
12951:
12952: yyResult = pPushScope(yyResult.index);
12953: yyError = yyResult.select(yyError);
12954: if (yyResult.hasValue()) {
12955:
12956: yyBase = yyResult.index;
12957: yyResult = pSymbol(yyBase);
12958: yyError = yyResult.select(yyError);
12959: if (yyResult.hasValue("(")) {
12960:
12961: yyResult = pInitialClause(yyResult.index);
12962: yyError = yyResult.select(yyError);
12963: if (yyResult.hasValue()) {
12964: final Node v$g$1 = yyResult.semanticValue();
12965:
12966: yyOption1 = yyResult.index;
12967: yyOpValue1 = null;
12968:
12969: yyResult = pCommaExpression(yyOption1);
12970: yyError = yyResult.select(yyError);
12971: if (yyResult.hasValue()) {
12972: final Node v$el$1 = yyResult
12973: .semanticValue();
12974:
12975: yyOption1 = yyResult.index;
12976: yyOpValue1 = v$el$1;
12977: }
12978: { // Start scope for v$g$2.
12979: final Node v$g$2 = yyOpValue1;
12980:
12981: yyBase = yyOption1;
12982: yyResult = pSymbol(yyBase);
12983: yyError = yyResult.select(yyError);
12984: if (yyResult.hasValue(";")) {
12985:
12986: yyOption1 = yyResult.index;
12987: yyOpValue1 = null;
12988:
12989: yyResult = pCommaExpression(yyOption1);
12990: yyError = yyResult.select(yyError);
12991: if (yyResult.hasValue()) {
12992: final Node v$el$2 = yyResult
12993: .semanticValue();
12994:
12995: yyOption1 = yyResult.index;
12996: yyOpValue1 = v$el$2;
12997: }
12998: { // Start scope for v$g$3.
12999: final Node v$g$3 = yyOpValue1;
13000:
13001: yyBase = yyOption1;
13002: yyResult = pSymbol(yyBase);
13003: yyError = yyResult.select(yyError);
13004: if (yyResult.hasValue(")")) {
13005:
13006: yyResult = pJeannieC$Statement(yyResult.index);
13007: yyError = yyResult
13008: .select(yyError);
13009: if (yyResult.hasValue()) {
13010: final Node v$g$4 = yyResult
13011: .semanticValue();
13012:
13013: yyResult = pPopScope(yyResult.index);
13014: yyError = yyResult
13015: .select(yyError);
13016: if (yyResult.hasValue()) {
13017:
13018: yyValue = GNode.create(
13019: "ForStatement",
13020: v$g$1, v$g$2,
13021: v$g$3, v$g$4);
13022: yyValue
13023: .setLocation(location(yyStart));
13024:
13025: return yyResult
13026: .createValue(
13027: yyValue,
13028: yyError);
13029: }
13030: }
13031: } else {
13032: yyError = yyError.select(
13033: "\")\" expected",
13034: yyBase);
13035: }
13036: } // End scope for v$g$3.
13037: } else {
13038: yyError = yyError.select(
13039: "\";\" expected", yyBase);
13040: }
13041: } // End scope for v$g$2.
13042: }
13043: } else {
13044: yyError = yyError.select("\"(\" expected", yyBase);
13045: }
13046: }
13047: }
13048:
13049: // Alternative 11.
13050:
13051: yyResult = pKeyword(yyStart);
13052: yyError = yyResult.select(yyError);
13053: if (yyResult.hasValue("switch")) {
13054:
13055: yyBase = yyResult.index;
13056: yyResult = pSymbol(yyBase);
13057: yyError = yyResult.select(yyError);
13058: if (yyResult.hasValue("(")) {
13059:
13060: yyResult = pCommaExpression(yyResult.index);
13061: yyError = yyResult.select(yyError);
13062: if (yyResult.hasValue()) {
13063: final Node v$g$1 = yyResult.semanticValue();
13064:
13065: yyBase = yyResult.index;
13066: yyResult = pSymbol(yyBase);
13067: yyError = yyResult.select(yyError);
13068: if (yyResult.hasValue(")")) {
13069:
13070: yyResult = pJeannieC$Statement(yyResult.index);
13071: yyError = yyResult.select(yyError);
13072: if (yyResult.hasValue()) {
13073: final Node v$g$2 = yyResult.semanticValue();
13074:
13075: yyValue = GNode.create("SwitchStatement",
13076: v$g$1, v$g$2);
13077: yyValue.setLocation(location(yyStart));
13078:
13079: return yyResult.createValue(yyValue,
13080: yyError);
13081: }
13082: } else {
13083: yyError = yyError.select("\")\" expected",
13084: yyBase);
13085: }
13086: }
13087: } else {
13088: yyError = yyError.select("\"(\" expected", yyBase);
13089: }
13090: }
13091:
13092: // Alternative <Complete>.
13093:
13094: yyResult = pLabel(yyStart);
13095: yyError = yyResult.select(yyError);
13096: if (yyResult.hasValue()) {
13097: final Node v$g$1 = yyResult.semanticValue();
13098:
13099: yyResult = pJeannieC$Statement(yyResult.index);
13100: yyError = yyResult.select(yyError);
13101: if (yyResult.hasValue()) {
13102: final Node v$g$2 = yyResult.semanticValue();
13103:
13104: yyValue = GNode
13105: .create("LabeledStatement", v$g$1, v$g$2);
13106: yyValue.setLocation(location(yyStart));
13107:
13108: return yyResult.createValue(yyValue, yyError);
13109: }
13110: }
13111:
13112: // Alternative <Incomplete>.
13113:
13114: if (GCC) {
13115:
13116: yyResult = pLabel(yyStart);
13117: yyError = yyResult.select(yyError);
13118: if (yyResult.hasValue()) {
13119: final Node v$g$3 = yyResult.semanticValue();
13120:
13121: yyValue = GNode.create("LabeledStatement", v$g$3, null);
13122: yyValue.setLocation(location(yyStart));
13123:
13124: return yyResult.createValue(yyValue, yyError);
13125: }
13126: }
13127:
13128: // Alternative 14.
13129:
13130: yyResult = pKeyword(yyStart);
13131: yyError = yyResult.select(yyError);
13132: if (yyResult.hasValue("break")) {
13133:
13134: yyBase = yyResult.index;
13135: yyResult = pSymbol(yyBase);
13136: yyError = yyResult.select(yyError);
13137: if (yyResult.hasValue(";")) {
13138:
13139: yyValue = GNode.create("BreakStatement", false);
13140: yyValue.setLocation(location(yyStart));
13141:
13142: return yyResult.createValue(yyValue, yyError);
13143: } else {
13144: yyError = yyError.select("\";\" expected", yyBase);
13145: }
13146: }
13147:
13148: // Alternative 15.
13149:
13150: yyResult = pKeyword(yyStart);
13151: yyError = yyResult.select(yyError);
13152: if (yyResult.hasValue("continue")) {
13153:
13154: yyBase = yyResult.index;
13155: yyResult = pSymbol(yyBase);
13156: yyError = yyResult.select(yyError);
13157: if (yyResult.hasValue(";")) {
13158:
13159: yyValue = GNode.create("ContinueStatement", false);
13160: yyValue.setLocation(location(yyStart));
13161:
13162: return yyResult.createValue(yyValue, yyError);
13163: } else {
13164: yyError = yyError.select("\";\" expected", yyBase);
13165: }
13166: }
13167:
13168: // Alternative 16.
13169:
13170: yyResult = pKeyword(yyStart);
13171: yyError = yyResult.select(yyError);
13172: if (yyResult.hasValue("return")) {
13173:
13174: yyOption1 = yyResult.index;
13175: yyOpValue1 = null;
13176:
13177: yyResult = pCommaExpression(yyOption1);
13178: yyError = yyResult.select(yyError);
13179: if (yyResult.hasValue()) {
13180: final Node v$el$1 = yyResult.semanticValue();
13181:
13182: yyOption1 = yyResult.index;
13183: yyOpValue1 = v$el$1;
13184: }
13185: { // Start scope for v$g$1.
13186: final Node v$g$1 = yyOpValue1;
13187:
13188: yyBase = yyOption1;
13189: yyResult = pSymbol(yyBase);
13190: yyError = yyResult.select(yyError);
13191: if (yyResult.hasValue(";")) {
13192:
13193: yyValue = GNode.create("ReturnStatement", v$g$1);
13194: yyValue.setLocation(location(yyStart));
13195:
13196: return yyResult.createValue(yyValue, yyError);
13197: } else {
13198: yyError = yyError.select("\";\" expected", yyBase);
13199: }
13200: } // End scope for v$g$1.
13201: }
13202:
13203: // Alternative <Direct>.
13204:
13205: yyResult = pKeyword(yyStart);
13206: yyError = yyResult.select(yyError);
13207: if (yyResult.hasValue("goto")) {
13208:
13209: yyResult = pJeannieC$PrimaryIdentifier(yyResult.index);
13210: yyError = yyResult.select(yyError);
13211: if (yyResult.hasValue()) {
13212: final Node v$g$2 = yyResult.semanticValue();
13213:
13214: yyBase = yyResult.index;
13215: yyResult = pSymbol(yyBase);
13216: yyError = yyResult.select(yyError);
13217: if (yyResult.hasValue(";")) {
13218:
13219: yyValue = GNode
13220: .create("GotoStatement", null, v$g$2);
13221: yyValue.setLocation(location(yyStart));
13222:
13223: return yyResult.createValue(yyValue, yyError);
13224: } else {
13225: yyError = yyError.select("\";\" expected", yyBase);
13226: }
13227: }
13228: }
13229:
13230: // Alternative <Computed>.
13231:
13232: if (GCC) {
13233:
13234: yyResult = pKeyword(yyStart);
13235: yyError = yyResult.select(yyError);
13236: if (yyResult.hasValue("goto")) {
13237:
13238: yyBase = yyResult.index;
13239: yyResult = pSymbol(yyBase);
13240: yyError = yyResult.select(yyError);
13241: if (yyResult.hasValue("*")) {
13242: final String v$g$3 = "*";
13243:
13244: yyResult = pCommaExpression(yyResult.index);
13245: yyError = yyResult.select(yyError);
13246: if (yyResult.hasValue()) {
13247: final Node v$g$4 = yyResult.semanticValue();
13248:
13249: yyBase = yyResult.index;
13250: yyResult = pSymbol(yyBase);
13251: yyError = yyResult.select(yyError);
13252: if (yyResult.hasValue(";")) {
13253:
13254: yyValue = GNode.create("GotoStatement",
13255: v$g$3, v$g$4);
13256: yyValue.setLocation(location(yyStart));
13257:
13258: return yyResult.createValue(yyValue,
13259: yyError);
13260: } else {
13261: yyError = yyError.select("\";\" expected",
13262: yyBase);
13263: }
13264: }
13265: } else {
13266: yyError = yyError.select("\"*\" expected", yyBase);
13267: }
13268: }
13269: }
13270:
13271: // Alternative 19.
13272:
13273: yyResult = pAsmKeyword(yyStart);
13274: yyError = yyResult.select(yyError);
13275: if (yyResult.hasValue()) {
13276:
13277: yyOption1 = yyResult.index;
13278: yyOpValue1 = null;
13279:
13280: yyResult = pTypeQualifier(yyOption1);
13281: yyError = yyResult.select(yyError);
13282: if (yyResult.hasValue()) {
13283: final Node v$el$1 = yyResult.semanticValue();
13284:
13285: yyOption1 = yyResult.index;
13286: yyOpValue1 = v$el$1;
13287: }
13288: { // Start scope for v$g$1.
13289: final Node v$g$1 = yyOpValue1;
13290:
13291: yyBase = yyOption1;
13292: yyResult = pSymbol(yyBase);
13293: yyError = yyResult.select(yyError);
13294: if (yyResult.hasValue("(")) {
13295:
13296: yyResult = pAssemblyArgument(yyResult.index);
13297: yyError = yyResult.select(yyError);
13298: if (yyResult.hasValue()) {
13299: final Node v$g$2 = yyResult.semanticValue();
13300:
13301: yyBase = yyResult.index;
13302: yyResult = pSymbol(yyBase);
13303: yyError = yyResult.select(yyError);
13304: if (yyResult.hasValue(")")) {
13305:
13306: yyBase = yyResult.index;
13307: yyResult = pSymbol(yyBase);
13308: yyError = yyResult.select(yyError);
13309: if (yyResult.hasValue(";")) {
13310: final String v$g$3 = ";";
13311:
13312: yyValue = GNode.create(
13313: "AssemblyStatement", v$g$1,
13314: v$g$2, v$g$3);
13315: yyValue.setLocation(location(yyStart));
13316:
13317: return yyResult.createValue(yyValue,
13318: yyError);
13319: } else {
13320: yyError = yyError.select(
13321: "\";\" expected", yyBase);
13322: }
13323: } else {
13324: yyError = yyError.select("\")\" expected",
13325: yyBase);
13326: }
13327: }
13328: } else {
13329: yyError = yyError.select("\"(\" expected", yyBase);
13330: }
13331: } // End scope for v$g$1.
13332: }
13333:
13334: // Alternative 20.
13335:
13336: yyResult = pSymbol(yyStart);
13337: yyError = yyResult.select(yyError);
13338: if (yyResult.hasValue(";")) {
13339:
13340: yyValue = GNode.create("EmptyStatement", false);
13341: yyValue.setLocation(location(yyStart));
13342:
13343: return yyResult.createValue(yyValue, yyError);
13344: }
13345:
13346: // Done.
13347: yyError = yyError.select("statement expected", yyStart);
13348: return yyError;
13349: }
13350:
13351: // =========================================================================
13352:
13353: /**
13354: * Parse nonterminal xtc.lang.jeannie.JeannieC.Label.
13355: *
13356: * @param yyStart The index.
13357: * @return The result.
13358: * @throws IOException Signals an I/O error.
13359: */
13360: private Result pLabel(final int yyStart) throws IOException {
13361: Result yyResult;
13362: int yyBase;
13363: int yyOption1;
13364: Node yyOpValue1;
13365: Node yyValue;
13366: ParseError yyError = ParseError.DUMMY;
13367:
13368: // Alternative <Label>.
13369:
13370: yyResult = pCIdentifier$Identifier(yyStart);
13371: yyError = yyResult.select(yyError);
13372: if (yyResult.hasValue()) {
13373: final String v$g$1 = yyResult.semanticValue();
13374:
13375: yyBase = yyResult.index;
13376: yyResult = pSymbol(yyBase);
13377: yyError = yyResult.select(yyError);
13378: if (yyResult.hasValue(":")) {
13379:
13380: yyOption1 = yyResult.index;
13381: yyOpValue1 = null;
13382:
13383: yyResult = pAttributeSpecifierList(yyOption1);
13384: yyError = yyResult.select(yyError);
13385: if (yyResult.hasValue()) {
13386: final Node v$el$1 = yyResult.semanticValue();
13387:
13388: yyOption1 = yyResult.index;
13389: yyOpValue1 = v$el$1;
13390: }
13391: { // Start scope for v$g$2.
13392: final Node v$g$2 = yyOpValue1;
13393:
13394: yyValue = GNode.create("NamedLabel", v$g$1, v$g$2);
13395: yyValue.setLocation(location(yyStart));
13396:
13397: return new SemanticValue(yyValue, yyOption1,
13398: yyError);
13399: } // End scope for v$g$2.
13400: } else {
13401: yyError = yyError.select("\":\" expected", yyBase);
13402: }
13403: }
13404:
13405: // Alternative <Range>.
13406:
13407: if (GCC) {
13408:
13409: yyResult = pKeyword(yyStart);
13410: yyError = yyResult.select(yyError);
13411: if (yyResult.hasValue("case")) {
13412:
13413: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
13414: yyError = yyResult.select(yyError);
13415: if (yyResult.hasValue()) {
13416: final Node v$g$1 = yyResult.semanticValue();
13417:
13418: yyBase = yyResult.index;
13419: yyResult = pSymbol(yyBase);
13420: yyError = yyResult.select(yyError);
13421: if (yyResult.hasValue("...")) {
13422:
13423: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
13424: yyError = yyResult.select(yyError);
13425: if (yyResult.hasValue()) {
13426: final Node v$g$2 = yyResult.semanticValue();
13427:
13428: yyBase = yyResult.index;
13429: yyResult = pSymbol(yyBase);
13430: yyError = yyResult.select(yyError);
13431: if (yyResult.hasValue(":")) {
13432:
13433: yyValue = GNode.create("CaseLabel",
13434: v$g$1, v$g$2);
13435: yyValue.setLocation(location(yyStart));
13436:
13437: return yyResult.createValue(yyValue,
13438: yyError);
13439: } else {
13440: yyError = yyError.select(
13441: "\":\" expected", yyBase);
13442: }
13443: }
13444: } else {
13445: yyError = yyError.select("\"...\" expected",
13446: yyBase);
13447: }
13448: }
13449: }
13450: }
13451:
13452: // Alternative <Simple>.
13453:
13454: yyResult = pKeyword(yyStart);
13455: yyError = yyResult.select(yyError);
13456: if (yyResult.hasValue("case")) {
13457:
13458: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
13459: yyError = yyResult.select(yyError);
13460: if (yyResult.hasValue()) {
13461: final Node v$g$3 = yyResult.semanticValue();
13462:
13463: yyBase = yyResult.index;
13464: yyResult = pSymbol(yyBase);
13465: yyError = yyResult.select(yyError);
13466: if (yyResult.hasValue(":")) {
13467:
13468: yyValue = GNode.create("CaseLabel", v$g$3);
13469: yyValue.setLocation(location(yyStart));
13470:
13471: return yyResult.createValue(yyValue, yyError);
13472: } else {
13473: yyError = yyError.select("\":\" expected", yyBase);
13474: }
13475: }
13476: }
13477:
13478: // Alternative 4.
13479:
13480: yyResult = pKeyword(yyStart);
13481: yyError = yyResult.select(yyError);
13482: if (yyResult.hasValue("default")) {
13483:
13484: yyBase = yyResult.index;
13485: yyResult = pSymbol(yyBase);
13486: yyError = yyResult.select(yyError);
13487: if (yyResult.hasValue(":")) {
13488:
13489: yyValue = GNode.create("DefaultLabel", false);
13490: yyValue.setLocation(location(yyStart));
13491:
13492: return yyResult.createValue(yyValue, yyError);
13493: } else {
13494: yyError = yyError.select("\":\" expected", yyBase);
13495: }
13496: }
13497:
13498: // Done.
13499: yyError = yyError.select("label expected", yyStart);
13500: return yyError;
13501: }
13502:
13503: // =========================================================================
13504:
13505: /**
13506: * Parse nonterminal xtc.lang.jeannie.JeannieC.CompoundStatement.
13507: *
13508: * @param yyStart The index.
13509: * @return The result.
13510: * @throws IOException Signals an I/O error.
13511: */
13512: private Result pCompoundStatement(final int yyStart)
13513: throws IOException {
13514: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
13515: if (null == yyColumn.chunk4)
13516: yyColumn.chunk4 = new Chunk4();
13517: if (null == yyColumn.chunk4.fCompoundStatement)
13518: yyColumn.chunk4.fCompoundStatement = pCompoundStatement$1(yyStart);
13519: return yyColumn.chunk4.fCompoundStatement;
13520: }
13521:
13522: /** Actually parse xtc.lang.jeannie.JeannieC.CompoundStatement. */
13523: private Result pCompoundStatement$1(final int yyStart)
13524: throws IOException {
13525: Result yyResult;
13526: Node yyValue;
13527: ParseError yyError = ParseError.DUMMY;
13528:
13529: // Alternative <CBlock>.
13530:
13531: yyResult = pCInCBlock(yyStart);
13532: yyError = yyResult.select(yyError);
13533: if (yyResult.hasValue()) {
13534: yyValue = yyResult.semanticValue();
13535:
13536: return yyResult.createValue(yyValue, yyError);
13537: }
13538:
13539: // Alternative <JavaBlock>.
13540:
13541: yyResult = pJavaInCBlock(yyStart);
13542: yyError = yyResult.select(yyError);
13543: if (yyResult.hasValue()) {
13544: yyValue = yyResult.semanticValue();
13545:
13546: return yyResult.createValue(yyValue, yyError);
13547: }
13548:
13549: // Done.
13550: return yyError;
13551: }
13552:
13553: // =========================================================================
13554:
13555: /**
13556: * Parse nonterminal xtc.lang.jeannie.JeannieC.LocalLabelDeclaration.
13557: *
13558: * @param yyStart The index.
13559: * @return The result.
13560: * @throws IOException Signals an I/O error.
13561: */
13562: private Result pLocalLabelDeclaration(final int yyStart)
13563: throws IOException {
13564:
13565: Result yyResult;
13566: int yyBase;
13567: int yyRepetition1;
13568: Pair<String> yyRepValue1;
13569: Node yyValue;
13570: ParseError yyError = ParseError.DUMMY;
13571:
13572: // Alternative 1.
13573:
13574: yyResult = pKeyword(yyStart);
13575: yyError = yyResult.select(yyError);
13576: if (yyResult.hasValue("__label__")) {
13577:
13578: yyResult = pCIdentifier$Identifier(yyResult.index);
13579: yyError = yyResult.select(yyError);
13580: if (yyResult.hasValue()) {
13581: final String v$g$1 = yyResult.semanticValue();
13582:
13583: yyRepetition1 = yyResult.index;
13584: yyRepValue1 = Pair.empty();
13585: while (true) {
13586:
13587: yyBase = yyRepetition1;
13588: yyResult = pSymbol(yyBase);
13589: yyError = yyResult.select(yyError);
13590: if (yyResult.hasValue(",")) {
13591:
13592: yyResult = pCIdentifier$Identifier(yyResult.index);
13593: yyError = yyResult.select(yyError);
13594: if (yyResult.hasValue()) {
13595: final String v$el$1 = yyResult
13596: .semanticValue();
13597:
13598: yyRepetition1 = yyResult.index;
13599: yyRepValue1 = new Pair<String>(v$el$1,
13600: yyRepValue1);
13601: continue;
13602: }
13603: } else {
13604: yyError = yyError.select("\",\" expected",
13605: yyBase);
13606: }
13607: break;
13608: }
13609: { // Start scope for v$g$2.
13610: final Pair<String> v$g$2 = yyRepValue1.reverse();
13611:
13612: yyBase = yyRepetition1;
13613: yyResult = pSymbol(yyBase);
13614: yyError = yyResult.select(yyError);
13615: if (yyResult.hasValue(";")) {
13616:
13617: yyValue = GNode.createFromPair(
13618: "LocalLabelDeclaration", v$g$1, v$g$2);
13619: yyValue.setLocation(location(yyStart));
13620:
13621: return yyResult.createValue(yyValue, yyError);
13622: } else {
13623: yyError = yyError.select("\";\" expected",
13624: yyBase);
13625: }
13626: } // End scope for v$g$2.
13627: }
13628: }
13629:
13630: // Done.
13631: yyError = yyError.select("local label declaration expected",
13632: yyStart);
13633: return yyError;
13634: }
13635:
13636: // =========================================================================
13637:
13638: /**
13639: * Parse nonterminal xtc.lang.jeannie.JeannieC.DeclarationOrStatement.
13640: *
13641: * @param yyStart The index.
13642: * @return The result.
13643: * @throws IOException Signals an I/O error.
13644: */
13645: private Result pJeannieC$DeclarationOrStatement(final int yyStart)
13646: throws IOException {
13647:
13648: Result yyResult;
13649: Node yyValue;
13650: ParseError yyError = ParseError.DUMMY;
13651:
13652: // Start a state modification.
13653: yyState.start();
13654:
13655: // Alternative <Declaration>.
13656:
13657: yyState.mark();
13658:
13659: yyResult = pJeannieC$Declaration(yyStart);
13660: yyError = yyResult.select(yyError);
13661: if (yyResult.hasValue()) {
13662: final Node d = yyResult.semanticValue();
13663:
13664: yyValue = yyState.annotate(d);
13665:
13666: // Commit the state modification.
13667: yyState.commit();
13668:
13669: setLocation(yyValue, yyStart);
13670: return yyResult.createValue(yyValue, yyError);
13671: }
13672:
13673: // Alternative <Statement>.
13674:
13675: yyResult = pJeannieC$Statement(yyStart);
13676: yyError = yyResult.select(yyError);
13677: if (yyResult.hasValue()) {
13678: final Node s = yyResult.semanticValue();
13679:
13680: yyValue = yyState.annotate(s);
13681:
13682: // Commit the state modification.
13683: yyState.commit();
13684:
13685: setLocation(yyValue, yyStart);
13686: return yyResult.createValue(yyValue, yyError);
13687: }
13688:
13689: // Abort the state modification.
13690: yyState.abort();
13691:
13692: // Done.
13693: return yyError;
13694: }
13695:
13696: // =========================================================================
13697:
13698: /**
13699: * Parse nonterminal xtc.lang.jeannie.JeannieC.InitialClause.
13700: *
13701: * @param yyStart The index.
13702: * @return The result.
13703: * @throws IOException Signals an I/O error.
13704: */
13705: private Result pInitialClause(final int yyStart) throws IOException {
13706: Result yyResult;
13707: int yyBase;
13708: int yyOption1;
13709: Node yyOpValue1;
13710: Node yyValue;
13711: ParseError yyError = ParseError.DUMMY;
13712:
13713: // Start a state modification.
13714: yyState.start();
13715:
13716: // Alternative <Declaration>.
13717:
13718: yyResult = pJeannieC$Declaration(yyStart);
13719: yyError = yyResult.select(yyError);
13720: if (yyResult.hasValue()) {
13721: yyValue = yyResult.semanticValue();
13722:
13723: // Commit the state modification.
13724: yyState.commit();
13725:
13726: return yyResult.createValue(yyValue, yyError);
13727: }
13728:
13729: // Alternative <Expression>.
13730:
13731: yyOption1 = yyStart;
13732: yyOpValue1 = null;
13733:
13734: yyResult = pCommaExpression(yyOption1);
13735: yyError = yyResult.select(yyError);
13736: if (yyResult.hasValue()) {
13737: final Node v$el$3 = yyResult.semanticValue();
13738:
13739: yyOption1 = yyResult.index;
13740: yyOpValue1 = v$el$3;
13741: }
13742: { // Start scope for yyValue.
13743: yyValue = yyOpValue1;
13744:
13745: yyBase = yyOption1;
13746: yyResult = pSymbol(yyBase);
13747: yyError = yyResult.select(yyError);
13748: if (yyResult.hasValue(";")) {
13749:
13750: // Commit the state modification.
13751: yyState.commit();
13752:
13753: return yyResult.createValue(yyValue, yyError);
13754: } else {
13755: yyError = yyError.select("\";\" expected", yyBase);
13756: }
13757: } // End scope for yyValue.
13758:
13759: // Abort the state modification.
13760: yyState.abort();
13761:
13762: // Done.
13763: return yyError;
13764: }
13765:
13766: // =========================================================================
13767:
13768: /**
13769: * Parse nonterminal xtc.lang.jeannie.JeannieC.CommaExpression.
13770: *
13771: * @param yyStart The index.
13772: * @return The result.
13773: * @throws IOException Signals an I/O error.
13774: */
13775: private Result pCommaExpression(final int yyStart)
13776: throws IOException {
13777: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
13778: if (null == yyColumn.chunk4)
13779: yyColumn.chunk4 = new Chunk4();
13780: if (null == yyColumn.chunk4.fCommaExpression)
13781: yyColumn.chunk4.fCommaExpression = pCommaExpression$1(yyStart);
13782: return yyColumn.chunk4.fCommaExpression;
13783: }
13784:
13785: /** Actually parse xtc.lang.jeannie.JeannieC.CommaExpression. */
13786: private Result pCommaExpression$1(final int yyStart)
13787: throws IOException {
13788: Result yyResult;
13789: int yyRepetition1;
13790: Pair<Action<Node>> yyRepValue1;
13791: Node yyValue;
13792: ParseError yyError = ParseError.DUMMY;
13793:
13794: // Alternative <Base>.
13795:
13796: yyResult = pAssignmentExpression(yyStart);
13797: yyError = yyResult.select(yyError);
13798: if (yyResult.hasValue()) {
13799: final Node v$3 = yyResult.semanticValue();
13800:
13801: yyRepetition1 = yyResult.index;
13802: yyRepValue1 = Pair.empty();
13803: while (true) {
13804:
13805: yyResult = pCommaExpression$$Tail1(yyRepetition1);
13806: yyError = yyResult.select(yyError);
13807: if (yyResult.hasValue()) {
13808: final Action<Node> v$4 = yyResult.semanticValue();
13809:
13810: yyRepetition1 = yyResult.index;
13811: yyRepValue1 = new Pair<Action<Node>>(v$4,
13812: yyRepValue1);
13813: continue;
13814: }
13815: break;
13816: }
13817: { // Start scope for v$5.
13818: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
13819:
13820: yyValue = apply(v$5, v$3, yyStart);
13821:
13822: return new SemanticValue(yyValue, yyRepetition1,
13823: yyError);
13824: } // End scope for v$5.
13825: }
13826:
13827: // Done.
13828: return yyError;
13829: }
13830:
13831: // =========================================================================
13832:
13833: /**
13834: * Parse synthetic nonterminal
13835: * xtc.lang.jeannie.Jeannie.CommaExpression$$Tail1.
13836: *
13837: * @param yyStart The index.
13838: * @return The result.
13839: * @throws IOException Signals an I/O error.
13840: */
13841: private Result pCommaExpression$$Tail1(final int yyStart)
13842: throws IOException {
13843:
13844: Result yyResult;
13845: Action<Node> yyValue;
13846: ParseError yyError = ParseError.DUMMY;
13847:
13848: // Alternative <Comma>.
13849:
13850: yyResult = pSymbol(yyStart);
13851: yyError = yyResult.select(yyError);
13852: if (yyResult.hasValue(",")) {
13853:
13854: yyResult = pAssignmentExpression(yyResult.index);
13855: yyError = yyResult.select(yyError);
13856: if (yyResult.hasValue()) {
13857: final Node v$g$2 = yyResult.semanticValue();
13858:
13859: yyValue = new Action<Node>() {
13860: public Node run(Node v$1) {
13861: return GNode.create("CommaExpression", v$1,
13862: v$g$2);
13863: }
13864: };
13865:
13866: return yyResult.createValue(yyValue, yyError);
13867: }
13868: }
13869:
13870: // Done.
13871: yyError = yyError.select("comma expression expected", yyStart);
13872: return yyError;
13873: }
13874:
13875: // =========================================================================
13876:
13877: /**
13878: * Parse nonterminal xtc.lang.jeannie.JeannieC.AssignmentExpression.
13879: *
13880: * @param yyStart The index.
13881: * @return The result.
13882: * @throws IOException Signals an I/O error.
13883: */
13884: private Result pAssignmentExpression(final int yyStart)
13885: throws IOException {
13886: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
13887: if (null == yyColumn.chunk5)
13888: yyColumn.chunk5 = new Chunk5();
13889: if (null == yyColumn.chunk5.fAssignmentExpression)
13890: yyColumn.chunk5.fAssignmentExpression = pAssignmentExpression$1(yyStart);
13891: return yyColumn.chunk5.fAssignmentExpression;
13892: }
13893:
13894: /** Actually parse xtc.lang.jeannie.JeannieC.AssignmentExpression. */
13895: private Result pAssignmentExpression$1(final int yyStart)
13896: throws IOException {
13897:
13898: Result yyResult;
13899: Node yyValue;
13900: ParseError yyError = ParseError.DUMMY;
13901:
13902: // Alternative <Assignment>.
13903:
13904: yyResult = pJeannieC$UnaryExpression(yyStart);
13905: yyError = yyResult.select(yyError);
13906: if (yyResult.hasValue()) {
13907: final Node v$g$1 = yyResult.semanticValue();
13908:
13909: yyResult = pJeannieC$AssignmentOperator(yyResult.index);
13910: yyError = yyResult.select(yyError);
13911: if (yyResult.hasValue()) {
13912: final String v$g$2 = yyResult.semanticValue();
13913:
13914: yyResult = pAssignmentExpression(yyResult.index);
13915: yyError = yyResult.select(yyError);
13916: if (yyResult.hasValue()) {
13917: final Node v$g$3 = yyResult.semanticValue();
13918:
13919: yyValue = GNode.create("AssignmentExpression",
13920: v$g$1, v$g$2, v$g$3);
13921: yyValue.setLocation(location(yyStart));
13922:
13923: return yyResult.createValue(yyValue, yyError);
13924: }
13925: }
13926: }
13927:
13928: // Alternative <Base>.
13929:
13930: yyResult = pJeannieC$ConditionalExpression(yyStart);
13931: yyError = yyResult.select(yyError);
13932: if (yyResult.hasValue()) {
13933: yyValue = yyResult.semanticValue();
13934:
13935: return yyResult.createValue(yyValue, yyError);
13936: }
13937:
13938: // Done.
13939: return yyError;
13940: }
13941:
13942: // =========================================================================
13943:
13944: /**
13945: * Parse nonterminal xtc.lang.jeannie.JeannieC.AssignmentOperator.
13946: *
13947: * @param yyStart The index.
13948: * @return The result.
13949: * @throws IOException Signals an I/O error.
13950: */
13951: private Result pJeannieC$AssignmentOperator(final int yyStart)
13952: throws IOException {
13953:
13954: Result yyResult;
13955: String yyValue;
13956: ParseError yyError = ParseError.DUMMY;
13957:
13958: // Alternative <Equal>.
13959:
13960: yyResult = pSymbol(yyStart);
13961: yyError = yyResult.select(yyError);
13962: if (yyResult.hasValue("=")) {
13963: yyValue = "=";
13964:
13965: return yyResult.createValue(yyValue, yyError);
13966: }
13967:
13968: // Alternative <PlusEqual>.
13969:
13970: yyResult = pSymbol(yyStart);
13971: yyError = yyResult.select(yyError);
13972: if (yyResult.hasValue("+=")) {
13973: yyValue = "+=";
13974:
13975: return yyResult.createValue(yyValue, yyError);
13976: }
13977:
13978: // Alternative <MinusEqual>.
13979:
13980: yyResult = pSymbol(yyStart);
13981: yyError = yyResult.select(yyError);
13982: if (yyResult.hasValue("-=")) {
13983: yyValue = "-=";
13984:
13985: return yyResult.createValue(yyValue, yyError);
13986: }
13987:
13988: // Alternative <TimesEqual>.
13989:
13990: yyResult = pSymbol(yyStart);
13991: yyError = yyResult.select(yyError);
13992: if (yyResult.hasValue("*=")) {
13993: yyValue = "*=";
13994:
13995: return yyResult.createValue(yyValue, yyError);
13996: }
13997:
13998: // Alternative <OverEqual>.
13999:
14000: yyResult = pSymbol(yyStart);
14001: yyError = yyResult.select(yyError);
14002: if (yyResult.hasValue("/=")) {
14003: yyValue = "/=";
14004:
14005: return yyResult.createValue(yyValue, yyError);
14006: }
14007:
14008: // Alternative <ModuloEqual>.
14009:
14010: yyResult = pSymbol(yyStart);
14011: yyError = yyResult.select(yyError);
14012: if (yyResult.hasValue("%=")) {
14013: yyValue = "%=";
14014:
14015: return yyResult.createValue(yyValue, yyError);
14016: }
14017:
14018: // Alternative <LeftEqual>.
14019:
14020: yyResult = pSymbol(yyStart);
14021: yyError = yyResult.select(yyError);
14022: if (yyResult.hasValue("<<=")) {
14023: yyValue = "<<=";
14024:
14025: return yyResult.createValue(yyValue, yyError);
14026: }
14027:
14028: // Alternative <RightEqual>.
14029:
14030: yyResult = pSymbol(yyStart);
14031: yyError = yyResult.select(yyError);
14032: if (yyResult.hasValue(">>=")) {
14033: yyValue = ">>=";
14034:
14035: return yyResult.createValue(yyValue, yyError);
14036: }
14037:
14038: // Alternative <AndEqual>.
14039:
14040: yyResult = pSymbol(yyStart);
14041: yyError = yyResult.select(yyError);
14042: if (yyResult.hasValue("&=")) {
14043: yyValue = "&=";
14044:
14045: return yyResult.createValue(yyValue, yyError);
14046: }
14047:
14048: // Alternative <XorEqual>.
14049:
14050: yyResult = pSymbol(yyStart);
14051: yyError = yyResult.select(yyError);
14052: if (yyResult.hasValue("^=")) {
14053: yyValue = "^=";
14054:
14055: return yyResult.createValue(yyValue, yyError);
14056: }
14057:
14058: // Alternative <OrEqual>.
14059:
14060: yyResult = pSymbol(yyStart);
14061: yyError = yyResult.select(yyError);
14062: if (yyResult.hasValue("|=")) {
14063: yyValue = "|=";
14064:
14065: return yyResult.createValue(yyValue, yyError);
14066: }
14067:
14068: // Done.
14069: yyError = yyError.select("assignment operator expected",
14070: yyStart);
14071: return yyError;
14072: }
14073:
14074: // =========================================================================
14075:
14076: /**
14077: * Parse nonterminal xtc.lang.jeannie.JeannieC.ConditionalExpression.
14078: *
14079: * @param yyStart The index.
14080: * @return The result.
14081: * @throws IOException Signals an I/O error.
14082: */
14083: private Result pJeannieC$ConditionalExpression(final int yyStart)
14084: throws IOException {
14085:
14086: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
14087: if (null == yyColumn.chunk5)
14088: yyColumn.chunk5 = new Chunk5();
14089: if (null == yyColumn.chunk5.fJeannieC$ConditionalExpression)
14090: yyColumn.chunk5.fJeannieC$ConditionalExpression = pJeannieC$ConditionalExpression$1(yyStart);
14091: return yyColumn.chunk5.fJeannieC$ConditionalExpression;
14092: }
14093:
14094: /** Actually parse xtc.lang.jeannie.JeannieC.ConditionalExpression. */
14095: private Result pJeannieC$ConditionalExpression$1(final int yyStart)
14096: throws IOException {
14097:
14098: Result yyResult;
14099: int yyBase;
14100: Node yyValue;
14101: ParseError yyError = ParseError.DUMMY;
14102:
14103: // Alternative <Conditional>.
14104:
14105: yyResult = pJeannieC$LogicalOrExpression(yyStart);
14106: yyError = yyResult.select(yyError);
14107: if (yyResult.hasValue()) {
14108: final Node v$g$1 = yyResult.semanticValue();
14109:
14110: yyBase = yyResult.index;
14111: yyResult = pSymbol(yyBase);
14112: yyError = yyResult.select(yyError);
14113: if (yyResult.hasValue("?")) {
14114:
14115: yyResult = pCommaExpression(yyResult.index);
14116: yyError = yyResult.select(yyError);
14117: if (yyResult.hasValue()) {
14118: final Node v$g$2 = yyResult.semanticValue();
14119:
14120: yyBase = yyResult.index;
14121: yyResult = pSymbol(yyBase);
14122: yyError = yyResult.select(yyError);
14123: if (yyResult.hasValue(":")) {
14124:
14125: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
14126: yyError = yyResult.select(yyError);
14127: if (yyResult.hasValue()) {
14128: final Node v$g$3 = yyResult.semanticValue();
14129:
14130: yyValue = GNode.create(
14131: "ConditionalExpression", v$g$1,
14132: v$g$2, v$g$3);
14133: yyValue.setLocation(location(yyStart));
14134:
14135: return yyResult.createValue(yyValue,
14136: yyError);
14137: }
14138: } else {
14139: yyError = yyError.select("\":\" expected",
14140: yyBase);
14141: }
14142: }
14143: } else {
14144: yyError = yyError.select("\"?\" expected", yyBase);
14145: }
14146: }
14147:
14148: // Alternative <IncompleteConditional>.
14149:
14150: if (GCC) {
14151:
14152: yyResult = pJeannieC$LogicalOrExpression(yyStart);
14153: yyError = yyResult.select(yyError);
14154: if (yyResult.hasValue()) {
14155: final Node v$g$4 = yyResult.semanticValue();
14156:
14157: yyBase = yyResult.index;
14158: yyResult = pSymbol(yyBase);
14159: yyError = yyResult.select(yyError);
14160: if (yyResult.hasValue("?")) {
14161:
14162: yyBase = yyResult.index;
14163: yyResult = pSymbol(yyBase);
14164: yyError = yyResult.select(yyError);
14165: if (yyResult.hasValue(":")) {
14166:
14167: yyResult = pJeannieC$ConditionalExpression(yyResult.index);
14168: yyError = yyResult.select(yyError);
14169: if (yyResult.hasValue()) {
14170: final Node v$g$6 = yyResult.semanticValue();
14171:
14172: yyValue = GNode.create(
14173: "ConditionalExpression", v$g$4,
14174: null, v$g$6);
14175: yyValue.setLocation(location(yyStart));
14176:
14177: return yyResult.createValue(yyValue,
14178: yyError);
14179: }
14180: } else {
14181: yyError = yyError.select("\":\" expected",
14182: yyBase);
14183: }
14184: } else {
14185: yyError = yyError.select("\"?\" expected", yyBase);
14186: }
14187: }
14188: }
14189:
14190: // Alternative <Base>.
14191:
14192: yyResult = pJeannieC$LogicalOrExpression(yyStart);
14193: yyError = yyResult.select(yyError);
14194: if (yyResult.hasValue()) {
14195: yyValue = yyResult.semanticValue();
14196:
14197: return yyResult.createValue(yyValue, yyError);
14198: }
14199:
14200: // Done.
14201: yyError = yyError.select("conditional expression expected",
14202: yyStart);
14203: return yyError;
14204: }
14205:
14206: // =========================================================================
14207:
14208: /**
14209: * Parse nonterminal xtc.lang.jeannie.JeannieC.LogicalOrExpression.
14210: *
14211: * @param yyStart The index.
14212: * @return The result.
14213: * @throws IOException Signals an I/O error.
14214: */
14215: private Result pJeannieC$LogicalOrExpression(final int yyStart)
14216: throws IOException {
14217:
14218: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
14219: if (null == yyColumn.chunk5)
14220: yyColumn.chunk5 = new Chunk5();
14221: if (null == yyColumn.chunk5.fJeannieC$LogicalOrExpression)
14222: yyColumn.chunk5.fJeannieC$LogicalOrExpression = pJeannieC$LogicalOrExpression$1(yyStart);
14223: return yyColumn.chunk5.fJeannieC$LogicalOrExpression;
14224: }
14225:
14226: /** Actually parse xtc.lang.jeannie.JeannieC.LogicalOrExpression. */
14227: private Result pJeannieC$LogicalOrExpression$1(final int yyStart)
14228: throws IOException {
14229:
14230: Result yyResult;
14231: int yyRepetition1;
14232: Pair<Action<Node>> yyRepValue1;
14233: Node yyValue;
14234: ParseError yyError = ParseError.DUMMY;
14235:
14236: // Alternative <Base>.
14237:
14238: yyResult = pJeannieC$LogicalAndExpression(yyStart);
14239: yyError = yyResult.select(yyError);
14240: if (yyResult.hasValue()) {
14241: final Node v$3 = yyResult.semanticValue();
14242:
14243: yyRepetition1 = yyResult.index;
14244: yyRepValue1 = Pair.empty();
14245: while (true) {
14246:
14247: yyResult = pJeannieC$LogicalOrExpression$$Tail1(yyRepetition1);
14248: yyError = yyResult.select(yyError);
14249: if (yyResult.hasValue()) {
14250: final Action<Node> v$4 = yyResult.semanticValue();
14251:
14252: yyRepetition1 = yyResult.index;
14253: yyRepValue1 = new Pair<Action<Node>>(v$4,
14254: yyRepValue1);
14255: continue;
14256: }
14257: break;
14258: }
14259: { // Start scope for v$5.
14260: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
14261:
14262: yyValue = apply(v$5, v$3, yyStart);
14263:
14264: return new SemanticValue(yyValue, yyRepetition1,
14265: yyError);
14266: } // End scope for v$5.
14267: }
14268:
14269: // Done.
14270: return yyError;
14271: }
14272:
14273: // =========================================================================
14274:
14275: /**
14276: * Parse synthetic nonterminal JeannieC.LogicalOrExpression$$Tail1.
14277: *
14278: * @param yyStart The index.
14279: * @return The result.
14280: * @throws IOException Signals an I/O error.
14281: */
14282: private Result pJeannieC$LogicalOrExpression$$Tail1(
14283: final int yyStart) throws IOException {
14284:
14285: Result yyResult;
14286: Action<Node> yyValue;
14287: ParseError yyError = ParseError.DUMMY;
14288:
14289: // Alternative <Or>.
14290:
14291: yyResult = pSymbol(yyStart);
14292: yyError = yyResult.select(yyError);
14293: if (yyResult.hasValue("||")) {
14294:
14295: yyResult = pJeannieC$LogicalAndExpression(yyResult.index);
14296: yyError = yyResult.select(yyError);
14297: if (yyResult.hasValue()) {
14298: final Node v$g$2 = yyResult.semanticValue();
14299:
14300: yyValue = new Action<Node>() {
14301: public Node run(Node v$1) {
14302: return GNode.create("LogicalOrExpression", v$1,
14303: v$g$2);
14304: }
14305: };
14306:
14307: return yyResult.createValue(yyValue, yyError);
14308: }
14309: }
14310:
14311: // Done.
14312: yyError = yyError.select("logical or expression expected",
14313: yyStart);
14314: return yyError;
14315: }
14316:
14317: // =========================================================================
14318:
14319: /**
14320: * Parse nonterminal xtc.lang.jeannie.JeannieC.LogicalAndExpression.
14321: *
14322: * @param yyStart The index.
14323: * @return The result.
14324: * @throws IOException Signals an I/O error.
14325: */
14326: private Result pJeannieC$LogicalAndExpression(final int yyStart)
14327: throws IOException {
14328:
14329: Result yyResult;
14330: int yyRepetition1;
14331: Pair<Action<Node>> yyRepValue1;
14332: Node yyValue;
14333: ParseError yyError = ParseError.DUMMY;
14334:
14335: // Alternative <Base>.
14336:
14337: yyResult = pJeannieC$BitwiseOrExpression(yyStart);
14338: yyError = yyResult.select(yyError);
14339: if (yyResult.hasValue()) {
14340: final Node v$3 = yyResult.semanticValue();
14341:
14342: yyRepetition1 = yyResult.index;
14343: yyRepValue1 = Pair.empty();
14344: while (true) {
14345:
14346: yyResult = pJeannieC$LogicalAndExpression$$Tail1(yyRepetition1);
14347: yyError = yyResult.select(yyError);
14348: if (yyResult.hasValue()) {
14349: final Action<Node> v$4 = yyResult.semanticValue();
14350:
14351: yyRepetition1 = yyResult.index;
14352: yyRepValue1 = new Pair<Action<Node>>(v$4,
14353: yyRepValue1);
14354: continue;
14355: }
14356: break;
14357: }
14358: { // Start scope for v$5.
14359: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
14360:
14361: yyValue = apply(v$5, v$3, yyStart);
14362:
14363: return new SemanticValue(yyValue, yyRepetition1,
14364: yyError);
14365: } // End scope for v$5.
14366: }
14367:
14368: // Done.
14369: return yyError;
14370: }
14371:
14372: // =========================================================================
14373:
14374: /**
14375: * Parse synthetic nonterminal JeannieC.LogicalAndExpression$$Tail1.
14376: *
14377: * @param yyStart The index.
14378: * @return The result.
14379: * @throws IOException Signals an I/O error.
14380: */
14381: private Result pJeannieC$LogicalAndExpression$$Tail1(
14382: final int yyStart) throws IOException {
14383:
14384: Result yyResult;
14385: Action<Node> yyValue;
14386: ParseError yyError = ParseError.DUMMY;
14387:
14388: // Alternative <And>.
14389:
14390: yyResult = pSymbol(yyStart);
14391: yyError = yyResult.select(yyError);
14392: if (yyResult.hasValue("&&")) {
14393:
14394: yyResult = pJeannieC$BitwiseOrExpression(yyResult.index);
14395: yyError = yyResult.select(yyError);
14396: if (yyResult.hasValue()) {
14397: final Node v$g$2 = yyResult.semanticValue();
14398:
14399: yyValue = new Action<Node>() {
14400: public Node run(Node v$1) {
14401: return GNode.create("LogicalAndExpression",
14402: v$1, v$g$2);
14403: }
14404: };
14405:
14406: return yyResult.createValue(yyValue, yyError);
14407: }
14408: }
14409:
14410: // Done.
14411: yyError = yyError.select("logical and expression expected",
14412: yyStart);
14413: return yyError;
14414: }
14415:
14416: // =========================================================================
14417:
14418: /**
14419: * Parse nonterminal xtc.lang.jeannie.JeannieC.BitwiseOrExpression.
14420: *
14421: * @param yyStart The index.
14422: * @return The result.
14423: * @throws IOException Signals an I/O error.
14424: */
14425: private Result pJeannieC$BitwiseOrExpression(final int yyStart)
14426: throws IOException {
14427:
14428: Result yyResult;
14429: int yyRepetition1;
14430: Pair<Action<Node>> yyRepValue1;
14431: Node yyValue;
14432: ParseError yyError = ParseError.DUMMY;
14433:
14434: // Alternative <Base>.
14435:
14436: yyResult = pJeannieC$BitwiseXorExpression(yyStart);
14437: yyError = yyResult.select(yyError);
14438: if (yyResult.hasValue()) {
14439: final Node v$3 = yyResult.semanticValue();
14440:
14441: yyRepetition1 = yyResult.index;
14442: yyRepValue1 = Pair.empty();
14443: while (true) {
14444:
14445: yyResult = pJeannieC$BitwiseOrExpression$$Tail1(yyRepetition1);
14446: yyError = yyResult.select(yyError);
14447: if (yyResult.hasValue()) {
14448: final Action<Node> v$4 = yyResult.semanticValue();
14449:
14450: yyRepetition1 = yyResult.index;
14451: yyRepValue1 = new Pair<Action<Node>>(v$4,
14452: yyRepValue1);
14453: continue;
14454: }
14455: break;
14456: }
14457: { // Start scope for v$5.
14458: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
14459:
14460: yyValue = apply(v$5, v$3, yyStart);
14461:
14462: return new SemanticValue(yyValue, yyRepetition1,
14463: yyError);
14464: } // End scope for v$5.
14465: }
14466:
14467: // Done.
14468: return yyError;
14469: }
14470:
14471: // =========================================================================
14472:
14473: /**
14474: * Parse synthetic nonterminal JeannieC.BitwiseOrExpression$$Tail1.
14475: *
14476: * @param yyStart The index.
14477: * @return The result.
14478: * @throws IOException Signals an I/O error.
14479: */
14480: private Result pJeannieC$BitwiseOrExpression$$Tail1(
14481: final int yyStart) throws IOException {
14482:
14483: Result yyResult;
14484: Action<Node> yyValue;
14485: ParseError yyError = ParseError.DUMMY;
14486:
14487: // Alternative <Or>.
14488:
14489: yyResult = pSymbol(yyStart);
14490: yyError = yyResult.select(yyError);
14491: if (yyResult.hasValue("|")) {
14492:
14493: yyResult = pJeannieC$BitwiseXorExpression(yyResult.index);
14494: yyError = yyResult.select(yyError);
14495: if (yyResult.hasValue()) {
14496: final Node v$g$2 = yyResult.semanticValue();
14497:
14498: yyValue = new Action<Node>() {
14499: public Node run(Node v$1) {
14500: return GNode.create("BitwiseOrExpression", v$1,
14501: v$g$2);
14502: }
14503: };
14504:
14505: return yyResult.createValue(yyValue, yyError);
14506: }
14507: }
14508:
14509: // Done.
14510: yyError = yyError.select("bitwise or expression expected",
14511: yyStart);
14512: return yyError;
14513: }
14514:
14515: // =========================================================================
14516:
14517: /**
14518: * Parse nonterminal xtc.lang.jeannie.JeannieC.BitwiseXorExpression.
14519: *
14520: * @param yyStart The index.
14521: * @return The result.
14522: * @throws IOException Signals an I/O error.
14523: */
14524: private Result pJeannieC$BitwiseXorExpression(final int yyStart)
14525: throws IOException {
14526:
14527: Result yyResult;
14528: int yyRepetition1;
14529: Pair<Action<Node>> yyRepValue1;
14530: Node yyValue;
14531: ParseError yyError = ParseError.DUMMY;
14532:
14533: // Alternative <Base>.
14534:
14535: yyResult = pJeannieC$BitwiseAndExpression(yyStart);
14536: yyError = yyResult.select(yyError);
14537: if (yyResult.hasValue()) {
14538: final Node v$3 = yyResult.semanticValue();
14539:
14540: yyRepetition1 = yyResult.index;
14541: yyRepValue1 = Pair.empty();
14542: while (true) {
14543:
14544: yyResult = pJeannieC$BitwiseXorExpression$$Tail1(yyRepetition1);
14545: yyError = yyResult.select(yyError);
14546: if (yyResult.hasValue()) {
14547: final Action<Node> v$4 = yyResult.semanticValue();
14548:
14549: yyRepetition1 = yyResult.index;
14550: yyRepValue1 = new Pair<Action<Node>>(v$4,
14551: yyRepValue1);
14552: continue;
14553: }
14554: break;
14555: }
14556: { // Start scope for v$5.
14557: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
14558:
14559: yyValue = apply(v$5, v$3, yyStart);
14560:
14561: return new SemanticValue(yyValue, yyRepetition1,
14562: yyError);
14563: } // End scope for v$5.
14564: }
14565:
14566: // Done.
14567: return yyError;
14568: }
14569:
14570: // =========================================================================
14571:
14572: /**
14573: * Parse synthetic nonterminal JeannieC.BitwiseXorExpression$$Tail1.
14574: *
14575: * @param yyStart The index.
14576: * @return The result.
14577: * @throws IOException Signals an I/O error.
14578: */
14579: private Result pJeannieC$BitwiseXorExpression$$Tail1(
14580: final int yyStart) throws IOException {
14581:
14582: Result yyResult;
14583: Action<Node> yyValue;
14584: ParseError yyError = ParseError.DUMMY;
14585:
14586: // Alternative <Xor>.
14587:
14588: yyResult = pSymbol(yyStart);
14589: yyError = yyResult.select(yyError);
14590: if (yyResult.hasValue("^")) {
14591:
14592: yyResult = pJeannieC$BitwiseAndExpression(yyResult.index);
14593: yyError = yyResult.select(yyError);
14594: if (yyResult.hasValue()) {
14595: final Node v$g$2 = yyResult.semanticValue();
14596:
14597: yyValue = new Action<Node>() {
14598: public Node run(Node v$1) {
14599: return GNode.create("BitwiseXorExpression",
14600: v$1, v$g$2);
14601: }
14602: };
14603:
14604: return yyResult.createValue(yyValue, yyError);
14605: }
14606: }
14607:
14608: // Done.
14609: yyError = yyError.select("bitwise xor expression expected",
14610: yyStart);
14611: return yyError;
14612: }
14613:
14614: // =========================================================================
14615:
14616: /**
14617: * Parse nonterminal xtc.lang.jeannie.JeannieC.BitwiseAndExpression.
14618: *
14619: * @param yyStart The index.
14620: * @return The result.
14621: * @throws IOException Signals an I/O error.
14622: */
14623: private Result pJeannieC$BitwiseAndExpression(final int yyStart)
14624: throws IOException {
14625:
14626: Result yyResult;
14627: int yyRepetition1;
14628: Pair<Action<Node>> yyRepValue1;
14629: Node yyValue;
14630: ParseError yyError = ParseError.DUMMY;
14631:
14632: // Alternative <Base>.
14633:
14634: yyResult = pJeannieC$EqualityExpression(yyStart);
14635: yyError = yyResult.select(yyError);
14636: if (yyResult.hasValue()) {
14637: final Node v$3 = yyResult.semanticValue();
14638:
14639: yyRepetition1 = yyResult.index;
14640: yyRepValue1 = Pair.empty();
14641: while (true) {
14642:
14643: yyResult = pJeannieC$BitwiseAndExpression$$Tail1(yyRepetition1);
14644: yyError = yyResult.select(yyError);
14645: if (yyResult.hasValue()) {
14646: final Action<Node> v$4 = yyResult.semanticValue();
14647:
14648: yyRepetition1 = yyResult.index;
14649: yyRepValue1 = new Pair<Action<Node>>(v$4,
14650: yyRepValue1);
14651: continue;
14652: }
14653: break;
14654: }
14655: { // Start scope for v$5.
14656: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
14657:
14658: yyValue = apply(v$5, v$3, yyStart);
14659:
14660: return new SemanticValue(yyValue, yyRepetition1,
14661: yyError);
14662: } // End scope for v$5.
14663: }
14664:
14665: // Done.
14666: return yyError;
14667: }
14668:
14669: // =========================================================================
14670:
14671: /**
14672: * Parse synthetic nonterminal JeannieC.BitwiseAndExpression$$Tail1.
14673: *
14674: * @param yyStart The index.
14675: * @return The result.
14676: * @throws IOException Signals an I/O error.
14677: */
14678: private Result pJeannieC$BitwiseAndExpression$$Tail1(
14679: final int yyStart) throws IOException {
14680:
14681: Result yyResult;
14682: Action<Node> yyValue;
14683: ParseError yyError = ParseError.DUMMY;
14684:
14685: // Alternative <And>.
14686:
14687: yyResult = pSymbol(yyStart);
14688: yyError = yyResult.select(yyError);
14689: if (yyResult.hasValue("&")) {
14690:
14691: yyResult = pJeannieC$EqualityExpression(yyResult.index);
14692: yyError = yyResult.select(yyError);
14693: if (yyResult.hasValue()) {
14694: final Node v$g$2 = yyResult.semanticValue();
14695:
14696: yyValue = new Action<Node>() {
14697: public Node run(Node v$1) {
14698: return GNode.create("BitwiseAndExpression",
14699: v$1, v$g$2);
14700: }
14701: };
14702:
14703: return yyResult.createValue(yyValue, yyError);
14704: }
14705: }
14706:
14707: // Done.
14708: yyError = yyError.select("bitwise and expression expected",
14709: yyStart);
14710: return yyError;
14711: }
14712:
14713: // =========================================================================
14714:
14715: /**
14716: * Parse nonterminal xtc.lang.jeannie.JeannieC.EqualityExpression.
14717: *
14718: * @param yyStart The index.
14719: * @return The result.
14720: * @throws IOException Signals an I/O error.
14721: */
14722: private Result pJeannieC$EqualityExpression(final int yyStart)
14723: throws IOException {
14724:
14725: Result yyResult;
14726: int yyRepetition1;
14727: Pair<Action<Node>> yyRepValue1;
14728: Node yyValue;
14729: ParseError yyError = ParseError.DUMMY;
14730:
14731: // Alternative <Base>.
14732:
14733: yyResult = pJeannieC$RelationalExpression(yyStart);
14734: yyError = yyResult.select(yyError);
14735: if (yyResult.hasValue()) {
14736: final Node v$4 = yyResult.semanticValue();
14737:
14738: yyRepetition1 = yyResult.index;
14739: yyRepValue1 = Pair.empty();
14740: while (true) {
14741:
14742: yyResult = pJeannieC$EqualityExpression$$Tail1(yyRepetition1);
14743: yyError = yyResult.select(yyError);
14744: if (yyResult.hasValue()) {
14745: final Action<Node> v$5 = yyResult.semanticValue();
14746:
14747: yyRepetition1 = yyResult.index;
14748: yyRepValue1 = new Pair<Action<Node>>(v$5,
14749: yyRepValue1);
14750: continue;
14751: }
14752: break;
14753: }
14754: { // Start scope for v$6.
14755: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
14756:
14757: yyValue = apply(v$6, v$4, yyStart);
14758:
14759: return new SemanticValue(yyValue, yyRepetition1,
14760: yyError);
14761: } // End scope for v$6.
14762: }
14763:
14764: // Done.
14765: return yyError;
14766: }
14767:
14768: // =========================================================================
14769:
14770: /**
14771: * Parse synthetic nonterminal JeannieC.EqualityExpression$$Tail1.
14772: *
14773: * @param yyStart The index.
14774: * @return The result.
14775: * @throws IOException Signals an I/O error.
14776: */
14777: private Result pJeannieC$EqualityExpression$$Tail1(final int yyStart)
14778: throws IOException {
14779:
14780: Result yyResult;
14781: Action<Node> yyValue;
14782: ParseError yyError = ParseError.DUMMY;
14783:
14784: // Alternative <Recursion>.
14785:
14786: yyResult = p$$Shared7(yyStart);
14787: yyError = yyResult.select(yyError);
14788: if (yyResult.hasValue()) {
14789: final String v$g$2 = yyResult.semanticValue();
14790:
14791: yyResult = pJeannieC$RelationalExpression(yyResult.index);
14792: yyError = yyResult.select(yyError);
14793: if (yyResult.hasValue()) {
14794: final Node v$g$3 = yyResult.semanticValue();
14795:
14796: yyValue = new Action<Node>() {
14797: public Node run(Node v$1) {
14798: return GNode.create("EqualityExpression", v$1,
14799: v$g$2, v$g$3);
14800: }
14801: };
14802:
14803: return yyResult.createValue(yyValue, yyError);
14804: }
14805: }
14806:
14807: // Done.
14808: return yyError;
14809: }
14810:
14811: // =========================================================================
14812:
14813: /**
14814: * Parse synthetic nonterminal xtc.lang.jeannie.Jeannie.$$Shared7.
14815: * This nonterminal represents the duplicate productions
14816: * xtc.lang.jeannie.JeannieC.EqualityOperator
14817: * and xtc.lang.jeannie.JeannieJava.EqualityOperator.
14818: *
14819: * @param yyStart The index.
14820: * @return The result.
14821: * @throws IOException Signals an I/O error.
14822: */
14823: private Result p$$Shared7(final int yyStart) throws IOException {
14824: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
14825: if (null == yyColumn.chunk5)
14826: yyColumn.chunk5 = new Chunk5();
14827: if (null == yyColumn.chunk5.f$$Shared7)
14828: yyColumn.chunk5.f$$Shared7 = p$$Shared7$1(yyStart);
14829: return yyColumn.chunk5.f$$Shared7;
14830: }
14831:
14832: /** Actually parse xtc.lang.jeannie.Jeannie.$$Shared7. */
14833: private Result p$$Shared7$1(final int yyStart) throws IOException {
14834: Result yyResult;
14835: String yyValue;
14836: ParseError yyError = ParseError.DUMMY;
14837:
14838: // Alternative <Equal>.
14839:
14840: yyResult = pSymbol(yyStart);
14841: yyError = yyResult.select(yyError);
14842: if (yyResult.hasValue("==")) {
14843: yyValue = "==";
14844:
14845: return yyResult.createValue(yyValue, yyError);
14846: }
14847:
14848: // Alternative <NotEqual>.
14849:
14850: yyResult = pSymbol(yyStart);
14851: yyError = yyResult.select(yyError);
14852: if (yyResult.hasValue("!=")) {
14853: yyValue = "!=";
14854:
14855: return yyResult.createValue(yyValue, yyError);
14856: }
14857:
14858: // Done.
14859: yyError = yyError.select(" expected", yyStart);
14860: return yyError;
14861: }
14862:
14863: // =========================================================================
14864:
14865: /**
14866: * Parse nonterminal xtc.lang.jeannie.JeannieC.RelationalExpression.
14867: *
14868: * @param yyStart The index.
14869: * @return The result.
14870: * @throws IOException Signals an I/O error.
14871: */
14872: private Result pJeannieC$RelationalExpression(final int yyStart)
14873: throws IOException {
14874:
14875: Result yyResult;
14876: int yyRepetition1;
14877: Pair<Action<Node>> yyRepValue1;
14878: Node yyValue;
14879: ParseError yyError = ParseError.DUMMY;
14880:
14881: // Alternative <Base>.
14882:
14883: yyResult = pJeannieC$ShiftExpression(yyStart);
14884: yyError = yyResult.select(yyError);
14885: if (yyResult.hasValue()) {
14886: final Node v$4 = yyResult.semanticValue();
14887:
14888: yyRepetition1 = yyResult.index;
14889: yyRepValue1 = Pair.empty();
14890: while (true) {
14891:
14892: yyResult = pJeannieC$RelationalExpression$$Tail1(yyRepetition1);
14893: yyError = yyResult.select(yyError);
14894: if (yyResult.hasValue()) {
14895: final Action<Node> v$5 = yyResult.semanticValue();
14896:
14897: yyRepetition1 = yyResult.index;
14898: yyRepValue1 = new Pair<Action<Node>>(v$5,
14899: yyRepValue1);
14900: continue;
14901: }
14902: break;
14903: }
14904: { // Start scope for v$6.
14905: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
14906:
14907: yyValue = apply(v$6, v$4, yyStart);
14908:
14909: return new SemanticValue(yyValue, yyRepetition1,
14910: yyError);
14911: } // End scope for v$6.
14912: }
14913:
14914: // Done.
14915: return yyError;
14916: }
14917:
14918: // =========================================================================
14919:
14920: /**
14921: * Parse synthetic nonterminal JeannieC.RelationalExpression$$Tail1.
14922: *
14923: * @param yyStart The index.
14924: * @return The result.
14925: * @throws IOException Signals an I/O error.
14926: */
14927: private Result pJeannieC$RelationalExpression$$Tail1(
14928: final int yyStart) throws IOException {
14929:
14930: Result yyResult;
14931: Action<Node> yyValue;
14932: ParseError yyError = ParseError.DUMMY;
14933:
14934: // Alternative <Recursion>.
14935:
14936: yyResult = pJeannieC$RelationalOperator(yyStart);
14937: yyError = yyResult.select(yyError);
14938: if (yyResult.hasValue()) {
14939: final String v$g$2 = yyResult.semanticValue();
14940:
14941: yyResult = pJeannieC$ShiftExpression(yyResult.index);
14942: yyError = yyResult.select(yyError);
14943: if (yyResult.hasValue()) {
14944: final Node v$g$3 = yyResult.semanticValue();
14945:
14946: yyValue = new Action<Node>() {
14947: public Node run(Node v$1) {
14948: return GNode.create("RelationalExpression",
14949: v$1, v$g$2, v$g$3);
14950: }
14951: };
14952:
14953: return yyResult.createValue(yyValue, yyError);
14954: }
14955: }
14956:
14957: // Done.
14958: return yyError;
14959: }
14960:
14961: // =========================================================================
14962:
14963: /**
14964: * Parse nonterminal xtc.lang.jeannie.JeannieC.RelationalOperator.
14965: *
14966: * @param yyStart The index.
14967: * @return The result.
14968: * @throws IOException Signals an I/O error.
14969: */
14970: private Result pJeannieC$RelationalOperator(final int yyStart)
14971: throws IOException {
14972:
14973: Result yyResult;
14974: String yyValue;
14975: ParseError yyError = ParseError.DUMMY;
14976:
14977: // Alternative <LessEqual>.
14978:
14979: yyResult = pSymbol(yyStart);
14980: yyError = yyResult.select(yyError);
14981: if (yyResult.hasValue("<=")) {
14982: yyValue = "<=";
14983:
14984: return yyResult.createValue(yyValue, yyError);
14985: }
14986:
14987: // Alternative <Less>.
14988:
14989: yyResult = pSymbol(yyStart);
14990: yyError = yyResult.select(yyError);
14991: if (yyResult.hasValue("<")) {
14992: yyValue = "<";
14993:
14994: return yyResult.createValue(yyValue, yyError);
14995: }
14996:
14997: // Alternative <GreaterEqual>.
14998:
14999: yyResult = pSymbol(yyStart);
15000: yyError = yyResult.select(yyError);
15001: if (yyResult.hasValue(">=")) {
15002: yyValue = ">=";
15003:
15004: return yyResult.createValue(yyValue, yyError);
15005: }
15006:
15007: // Alternative <Greater>.
15008:
15009: yyResult = pSymbol(yyStart);
15010: yyError = yyResult.select(yyError);
15011: if (yyResult.hasValue(">")) {
15012: yyValue = ">";
15013:
15014: return yyResult.createValue(yyValue, yyError);
15015: }
15016:
15017: // Done.
15018: yyError = yyError.select("relational operator expected",
15019: yyStart);
15020: return yyError;
15021: }
15022:
15023: // =========================================================================
15024:
15025: /**
15026: * Parse nonterminal xtc.lang.jeannie.JeannieC.ShiftExpression.
15027: *
15028: * @param yyStart The index.
15029: * @return The result.
15030: * @throws IOException Signals an I/O error.
15031: */
15032: private Result pJeannieC$ShiftExpression(final int yyStart)
15033: throws IOException {
15034:
15035: Result yyResult;
15036: int yyRepetition1;
15037: Pair<Action<Node>> yyRepValue1;
15038: Node yyValue;
15039: ParseError yyError = ParseError.DUMMY;
15040:
15041: // Alternative <Base>.
15042:
15043: yyResult = pJeannieC$AdditiveExpression(yyStart);
15044: yyError = yyResult.select(yyError);
15045: if (yyResult.hasValue()) {
15046: final Node v$4 = yyResult.semanticValue();
15047:
15048: yyRepetition1 = yyResult.index;
15049: yyRepValue1 = Pair.empty();
15050: while (true) {
15051:
15052: yyResult = pJeannieC$ShiftExpression$$Tail1(yyRepetition1);
15053: yyError = yyResult.select(yyError);
15054: if (yyResult.hasValue()) {
15055: final Action<Node> v$5 = yyResult.semanticValue();
15056:
15057: yyRepetition1 = yyResult.index;
15058: yyRepValue1 = new Pair<Action<Node>>(v$5,
15059: yyRepValue1);
15060: continue;
15061: }
15062: break;
15063: }
15064: { // Start scope for v$6.
15065: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
15066:
15067: yyValue = apply(v$6, v$4, yyStart);
15068:
15069: return new SemanticValue(yyValue, yyRepetition1,
15070: yyError);
15071: } // End scope for v$6.
15072: }
15073:
15074: // Done.
15075: return yyError;
15076: }
15077:
15078: // =========================================================================
15079:
15080: /**
15081: * Parse synthetic nonterminal JeannieC.ShiftExpression$$Tail1.
15082: *
15083: * @param yyStart The index.
15084: * @return The result.
15085: * @throws IOException Signals an I/O error.
15086: */
15087: private Result pJeannieC$ShiftExpression$$Tail1(final int yyStart)
15088: throws IOException {
15089:
15090: Result yyResult;
15091: Action<Node> yyValue;
15092: ParseError yyError = ParseError.DUMMY;
15093:
15094: // Alternative <Recursion>.
15095:
15096: yyResult = pJeannieC$ShiftOperator(yyStart);
15097: yyError = yyResult.select(yyError);
15098: if (yyResult.hasValue()) {
15099: final String v$g$2 = yyResult.semanticValue();
15100:
15101: yyResult = pJeannieC$AdditiveExpression(yyResult.index);
15102: yyError = yyResult.select(yyError);
15103: if (yyResult.hasValue()) {
15104: final Node v$g$3 = yyResult.semanticValue();
15105:
15106: yyValue = new Action<Node>() {
15107: public Node run(Node v$1) {
15108: return GNode.create("ShiftExpression", v$1,
15109: v$g$2, v$g$3);
15110: }
15111: };
15112:
15113: return yyResult.createValue(yyValue, yyError);
15114: }
15115: }
15116:
15117: // Done.
15118: return yyError;
15119: }
15120:
15121: // =========================================================================
15122:
15123: /**
15124: * Parse nonterminal xtc.lang.jeannie.JeannieC.ShiftOperator.
15125: *
15126: * @param yyStart The index.
15127: * @return The result.
15128: * @throws IOException Signals an I/O error.
15129: */
15130: private Result pJeannieC$ShiftOperator(final int yyStart)
15131: throws IOException {
15132:
15133: Result yyResult;
15134: String yyValue;
15135: ParseError yyError = ParseError.DUMMY;
15136:
15137: // Alternative <Left>.
15138:
15139: yyResult = pSymbol(yyStart);
15140: yyError = yyResult.select(yyError);
15141: if (yyResult.hasValue("<<")) {
15142: yyValue = "<<";
15143:
15144: return yyResult.createValue(yyValue, yyError);
15145: }
15146:
15147: // Alternative <Right>.
15148:
15149: yyResult = pSymbol(yyStart);
15150: yyError = yyResult.select(yyError);
15151: if (yyResult.hasValue(">>")) {
15152: yyValue = ">>";
15153:
15154: return yyResult.createValue(yyValue, yyError);
15155: }
15156:
15157: // Done.
15158: yyError = yyError.select("shift operator expected", yyStart);
15159: return yyError;
15160: }
15161:
15162: // =========================================================================
15163:
15164: /**
15165: * Parse nonterminal xtc.lang.jeannie.JeannieC.AdditiveExpression.
15166: *
15167: * @param yyStart The index.
15168: * @return The result.
15169: * @throws IOException Signals an I/O error.
15170: */
15171: private Result pJeannieC$AdditiveExpression(final int yyStart)
15172: throws IOException {
15173:
15174: Result yyResult;
15175: int yyRepetition1;
15176: Pair<Action<Node>> yyRepValue1;
15177: Node yyValue;
15178: ParseError yyError = ParseError.DUMMY;
15179:
15180: // Alternative <Base>.
15181:
15182: yyResult = pJeannieC$MultiplicativeExpression(yyStart);
15183: yyError = yyResult.select(yyError);
15184: if (yyResult.hasValue()) {
15185: final Node v$4 = yyResult.semanticValue();
15186:
15187: yyRepetition1 = yyResult.index;
15188: yyRepValue1 = Pair.empty();
15189: while (true) {
15190:
15191: yyResult = pJeannieC$AdditiveExpression$$Tail1(yyRepetition1);
15192: yyError = yyResult.select(yyError);
15193: if (yyResult.hasValue()) {
15194: final Action<Node> v$5 = yyResult.semanticValue();
15195:
15196: yyRepetition1 = yyResult.index;
15197: yyRepValue1 = new Pair<Action<Node>>(v$5,
15198: yyRepValue1);
15199: continue;
15200: }
15201: break;
15202: }
15203: { // Start scope for v$6.
15204: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
15205:
15206: yyValue = apply(v$6, v$4, yyStart);
15207:
15208: return new SemanticValue(yyValue, yyRepetition1,
15209: yyError);
15210: } // End scope for v$6.
15211: }
15212:
15213: // Done.
15214: return yyError;
15215: }
15216:
15217: // =========================================================================
15218:
15219: /**
15220: * Parse synthetic nonterminal JeannieC.AdditiveExpression$$Tail1.
15221: *
15222: * @param yyStart The index.
15223: * @return The result.
15224: * @throws IOException Signals an I/O error.
15225: */
15226: private Result pJeannieC$AdditiveExpression$$Tail1(final int yyStart)
15227: throws IOException {
15228:
15229: Result yyResult;
15230: Action<Node> yyValue;
15231: ParseError yyError = ParseError.DUMMY;
15232:
15233: // Alternative <Recursion>.
15234:
15235: yyResult = p$$Shared8(yyStart);
15236: yyError = yyResult.select(yyError);
15237: if (yyResult.hasValue()) {
15238: final String v$g$2 = yyResult.semanticValue();
15239:
15240: yyResult = pJeannieC$MultiplicativeExpression(yyResult.index);
15241: yyError = yyResult.select(yyError);
15242: if (yyResult.hasValue()) {
15243: final Node v$g$3 = yyResult.semanticValue();
15244:
15245: yyValue = new Action<Node>() {
15246: public Node run(Node v$1) {
15247: return GNode.create("AdditiveExpression", v$1,
15248: v$g$2, v$g$3);
15249: }
15250: };
15251:
15252: return yyResult.createValue(yyValue, yyError);
15253: }
15254: }
15255:
15256: // Done.
15257: return yyError;
15258: }
15259:
15260: // =========================================================================
15261:
15262: /**
15263: * Parse synthetic nonterminal xtc.lang.jeannie.Jeannie.$$Shared8.
15264: * This nonterminal represents the duplicate productions
15265: * xtc.lang.jeannie.JeannieC.AdditiveOperator
15266: * and xtc.lang.jeannie.JeannieJava.AdditiveOperator.
15267: *
15268: * @param yyStart The index.
15269: * @return The result.
15270: * @throws IOException Signals an I/O error.
15271: */
15272: private Result p$$Shared8(final int yyStart) throws IOException {
15273: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
15274: if (null == yyColumn.chunk5)
15275: yyColumn.chunk5 = new Chunk5();
15276: if (null == yyColumn.chunk5.f$$Shared8)
15277: yyColumn.chunk5.f$$Shared8 = p$$Shared8$1(yyStart);
15278: return yyColumn.chunk5.f$$Shared8;
15279: }
15280:
15281: /** Actually parse xtc.lang.jeannie.Jeannie.$$Shared8. */
15282: private Result p$$Shared8$1(final int yyStart) throws IOException {
15283: Result yyResult;
15284: String yyValue;
15285: ParseError yyError = ParseError.DUMMY;
15286:
15287: // Alternative <Plus>.
15288:
15289: yyResult = pSymbol(yyStart);
15290: yyError = yyResult.select(yyError);
15291: if (yyResult.hasValue("+")) {
15292: yyValue = "+";
15293:
15294: return yyResult.createValue(yyValue, yyError);
15295: }
15296:
15297: // Alternative <Minus>.
15298:
15299: yyResult = pSymbol(yyStart);
15300: yyError = yyResult.select(yyError);
15301: if (yyResult.hasValue("-")) {
15302: yyValue = "-";
15303:
15304: return yyResult.createValue(yyValue, yyError);
15305: }
15306:
15307: // Done.
15308: yyError = yyError.select(" expected", yyStart);
15309: return yyError;
15310: }
15311:
15312: // =========================================================================
15313:
15314: /**
15315: * Parse nonterminal xtc.lang.jeannie.JeannieC.MultiplicativeExpression.
15316: *
15317: * @param yyStart The index.
15318: * @return The result.
15319: * @throws IOException Signals an I/O error.
15320: */
15321: private Result pJeannieC$MultiplicativeExpression(final int yyStart)
15322: throws IOException {
15323:
15324: Result yyResult;
15325: int yyRepetition1;
15326: Pair<Action<Node>> yyRepValue1;
15327: Node yyValue;
15328: ParseError yyError = ParseError.DUMMY;
15329:
15330: // Alternative <Base>.
15331:
15332: yyResult = pJeannieC$CastExpression(yyStart);
15333: yyError = yyResult.select(yyError);
15334: if (yyResult.hasValue()) {
15335: final Node v$4 = yyResult.semanticValue();
15336:
15337: yyRepetition1 = yyResult.index;
15338: yyRepValue1 = Pair.empty();
15339: while (true) {
15340:
15341: yyResult = pJeannieC$MultiplicativeExpression$$Tail1(yyRepetition1);
15342: yyError = yyResult.select(yyError);
15343: if (yyResult.hasValue()) {
15344: final Action<Node> v$5 = yyResult.semanticValue();
15345:
15346: yyRepetition1 = yyResult.index;
15347: yyRepValue1 = new Pair<Action<Node>>(v$5,
15348: yyRepValue1);
15349: continue;
15350: }
15351: break;
15352: }
15353: { // Start scope for v$6.
15354: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
15355:
15356: yyValue = apply(v$6, v$4, yyStart);
15357:
15358: return new SemanticValue(yyValue, yyRepetition1,
15359: yyError);
15360: } // End scope for v$6.
15361: }
15362:
15363: // Done.
15364: return yyError;
15365: }
15366:
15367: // =========================================================================
15368:
15369: /**
15370: * Parse synthetic nonterminal JeannieC.MultiplicativeExpression$$Tail1.
15371: *
15372: * @param yyStart The index.
15373: * @return The result.
15374: * @throws IOException Signals an I/O error.
15375: */
15376: private Result pJeannieC$MultiplicativeExpression$$Tail1(
15377: final int yyStart) throws IOException {
15378:
15379: Result yyResult;
15380: Action<Node> yyValue;
15381: ParseError yyError = ParseError.DUMMY;
15382:
15383: // Alternative <Recursion>.
15384:
15385: yyResult = p$$Shared9(yyStart);
15386: yyError = yyResult.select(yyError);
15387: if (yyResult.hasValue()) {
15388: final String v$g$2 = yyResult.semanticValue();
15389:
15390: yyResult = pJeannieC$CastExpression(yyResult.index);
15391: yyError = yyResult.select(yyError);
15392: if (yyResult.hasValue()) {
15393: final Node v$g$3 = yyResult.semanticValue();
15394:
15395: yyValue = new Action<Node>() {
15396: public Node run(Node v$1) {
15397: return GNode.create("MultiplicativeExpression",
15398: v$1, v$g$2, v$g$3);
15399: }
15400: };
15401:
15402: return yyResult.createValue(yyValue, yyError);
15403: }
15404: }
15405:
15406: // Done.
15407: return yyError;
15408: }
15409:
15410: // =========================================================================
15411:
15412: /**
15413: * Parse synthetic nonterminal xtc.lang.jeannie.Jeannie.$$Shared9.
15414: * This nonterminal represents the duplicate productions
15415: * xtc.lang.jeannie.JeannieC.MultiplicativeOperator
15416: * and xtc.lang.jeannie.JeannieJava.MultiplicativeOperator.
15417: *
15418: * @param yyStart The index.
15419: * @return The result.
15420: * @throws IOException Signals an I/O error.
15421: */
15422: private Result p$$Shared9(final int yyStart) throws IOException {
15423: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
15424: if (null == yyColumn.chunk5)
15425: yyColumn.chunk5 = new Chunk5();
15426: if (null == yyColumn.chunk5.f$$Shared9)
15427: yyColumn.chunk5.f$$Shared9 = p$$Shared9$1(yyStart);
15428: return yyColumn.chunk5.f$$Shared9;
15429: }
15430:
15431: /** Actually parse xtc.lang.jeannie.Jeannie.$$Shared9. */
15432: private Result p$$Shared9$1(final int yyStart) throws IOException {
15433: Result yyResult;
15434: String yyValue;
15435: ParseError yyError = ParseError.DUMMY;
15436:
15437: // Alternative <Times>.
15438:
15439: yyResult = pSymbol(yyStart);
15440: yyError = yyResult.select(yyError);
15441: if (yyResult.hasValue("*")) {
15442: yyValue = "*";
15443:
15444: return yyResult.createValue(yyValue, yyError);
15445: }
15446:
15447: // Alternative <Over>.
15448:
15449: yyResult = pSymbol(yyStart);
15450: yyError = yyResult.select(yyError);
15451: if (yyResult.hasValue("/")) {
15452: yyValue = "/";
15453:
15454: return yyResult.createValue(yyValue, yyError);
15455: }
15456:
15457: // Alternative <Modulo>.
15458:
15459: yyResult = pSymbol(yyStart);
15460: yyError = yyResult.select(yyError);
15461: if (yyResult.hasValue("%")) {
15462: yyValue = "%";
15463:
15464: return yyResult.createValue(yyValue, yyError);
15465: }
15466:
15467: // Done.
15468: yyError = yyError.select(" expected", yyStart);
15469: return yyError;
15470: }
15471:
15472: // =========================================================================
15473:
15474: /**
15475: * Parse nonterminal xtc.lang.jeannie.JeannieC.CastExpression.
15476: *
15477: * @param yyStart The index.
15478: * @return The result.
15479: * @throws IOException Signals an I/O error.
15480: */
15481: private Result pJeannieC$CastExpression(final int yyStart)
15482: throws IOException {
15483:
15484: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
15485: if (null == yyColumn.chunk5)
15486: yyColumn.chunk5 = new Chunk5();
15487: if (null == yyColumn.chunk5.fJeannieC$CastExpression)
15488: yyColumn.chunk5.fJeannieC$CastExpression = pJeannieC$CastExpression$1(yyStart);
15489: return yyColumn.chunk5.fJeannieC$CastExpression;
15490: }
15491:
15492: /** Actually parse xtc.lang.jeannie.JeannieC.CastExpression. */
15493: private Result pJeannieC$CastExpression$1(final int yyStart)
15494: throws IOException {
15495:
15496: Result yyResult;
15497: int yyBase;
15498: Node yyValue;
15499: ParseError yyError = ParseError.DUMMY;
15500:
15501: // Alternative <Cast>.
15502:
15503: yyResult = pSymbol(yyStart);
15504: yyError = yyResult.select(yyError);
15505: if (yyResult.hasValue("(")) {
15506:
15507: yyResult = pJeannieC$TypeName(yyResult.index);
15508: yyError = yyResult.select(yyError);
15509: if (yyResult.hasValue()) {
15510: final Node v$g$1 = yyResult.semanticValue();
15511:
15512: yyBase = yyResult.index;
15513: yyResult = pSymbol(yyBase);
15514: yyError = yyResult.select(yyError);
15515: if (yyResult.hasValue(")")) {
15516:
15517: yyResult = pJeannieC$CastExpression(yyResult.index);
15518: yyError = yyResult.select(yyError);
15519: if (yyResult.hasValue()) {
15520: final Node v$g$2 = yyResult.semanticValue();
15521:
15522: yyValue = GNode.create("CastExpression", v$g$1,
15523: v$g$2);
15524: yyValue.setLocation(location(yyStart));
15525:
15526: return yyResult.createValue(yyValue, yyError);
15527: }
15528: } else {
15529: yyError = yyError.select("\")\" expected", yyBase);
15530: }
15531: }
15532: }
15533:
15534: // Alternative <Base>.
15535:
15536: yyResult = pJeannieC$UnaryExpression(yyStart);
15537: yyError = yyResult.select(yyError);
15538: if (yyResult.hasValue()) {
15539: yyValue = yyResult.semanticValue();
15540:
15541: return yyResult.createValue(yyValue, yyError);
15542: }
15543:
15544: // Done.
15545: yyError = yyError.select("cast expression expected", yyStart);
15546: return yyError;
15547: }
15548:
15549: // =========================================================================
15550:
15551: /**
15552: * Parse nonterminal xtc.lang.jeannie.JeannieC.UnaryExpression.
15553: *
15554: * @param yyStart The index.
15555: * @return The result.
15556: * @throws IOException Signals an I/O error.
15557: */
15558: private Result pJeannieC$UnaryExpression(final int yyStart)
15559: throws IOException {
15560:
15561: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
15562: if (null == yyColumn.chunk5)
15563: yyColumn.chunk5 = new Chunk5();
15564: if (null == yyColumn.chunk5.fJeannieC$UnaryExpression)
15565: yyColumn.chunk5.fJeannieC$UnaryExpression = pJeannieC$UnaryExpression$1(yyStart);
15566: return yyColumn.chunk5.fJeannieC$UnaryExpression;
15567: }
15568:
15569: /** Actually parse xtc.lang.jeannie.JeannieC.UnaryExpression. */
15570: private Result pJeannieC$UnaryExpression$1(final int yyStart)
15571: throws IOException {
15572:
15573: Result yyResult;
15574: Result yyPredResult;
15575: boolean yyPredMatched;
15576: int yyBase;
15577: Node yyValue;
15578: ParseError yyError = ParseError.DUMMY;
15579:
15580: // Alternative 1.
15581:
15582: yyResult = pKeyword(yyStart);
15583: yyError = yyResult.select(yyError);
15584: if (yyResult.hasValue("sizeof")) {
15585:
15586: final int yyChoice1 = yyResult.index;
15587:
15588: // Nested alternative 1.
15589:
15590: yyBase = yyChoice1;
15591: yyResult = pSymbol(yyBase);
15592: yyError = yyResult.select(yyError);
15593: if (yyResult.hasValue("(")) {
15594:
15595: yyResult = pJeannieC$TypeName(yyResult.index);
15596: yyError = yyResult.select(yyError);
15597: if (yyResult.hasValue()) {
15598: final Node v$g$1 = yyResult.semanticValue();
15599:
15600: yyBase = yyResult.index;
15601: yyResult = pSymbol(yyBase);
15602: yyError = yyResult.select(yyError);
15603: if (yyResult.hasValue(")")) {
15604:
15605: yyPredMatched = false;
15606:
15607: yyPredResult = pSymbol(yyResult.index);
15608: if (yyPredResult.hasValue("{")) {
15609:
15610: yyPredMatched = true;
15611: }
15612:
15613: if (!yyPredMatched) {
15614:
15615: yyValue = GNode.create("SizeofExpression",
15616: v$g$1);
15617: yyValue.setLocation(location(yyStart));
15618:
15619: return yyResult.createValue(yyValue,
15620: yyError);
15621: } else {
15622: yyError = yyError.select(
15623: "unary expression expected",
15624: yyStart);
15625: }
15626: } else {
15627: yyError = yyError.select("\")\" expected",
15628: yyBase);
15629: }
15630: }
15631: } else {
15632: yyError = yyError.select("\"(\" expected", yyBase);
15633: }
15634:
15635: // Nested alternative 2.
15636:
15637: yyResult = pJeannieC$UnaryExpression(yyChoice1);
15638: yyError = yyResult.select(yyError);
15639: if (yyResult.hasValue()) {
15640: final Node v$g$2 = yyResult.semanticValue();
15641:
15642: yyValue = GNode.create("SizeofExpression", v$g$2);
15643: yyValue.setLocation(location(yyStart));
15644:
15645: return yyResult.createValue(yyValue, yyError);
15646: }
15647: }
15648:
15649: // Alternative 2.
15650:
15651: yyResult = pAlignofKeyword(yyStart);
15652: yyError = yyResult.select(yyError);
15653: if (yyResult.hasValue()) {
15654:
15655: final int yyChoice1 = yyResult.index;
15656:
15657: // Nested alternative 1.
15658:
15659: yyBase = yyChoice1;
15660: yyResult = pSymbol(yyBase);
15661: yyError = yyResult.select(yyError);
15662: if (yyResult.hasValue("(")) {
15663:
15664: yyResult = pJeannieC$TypeName(yyResult.index);
15665: yyError = yyResult.select(yyError);
15666: if (yyResult.hasValue()) {
15667: final Node v$g$1 = yyResult.semanticValue();
15668:
15669: yyBase = yyResult.index;
15670: yyResult = pSymbol(yyBase);
15671: yyError = yyResult.select(yyError);
15672: if (yyResult.hasValue(")")) {
15673:
15674: yyPredMatched = false;
15675:
15676: yyPredResult = pSymbol(yyResult.index);
15677: if (yyPredResult.hasValue("{")) {
15678:
15679: yyPredMatched = true;
15680: }
15681:
15682: if (!yyPredMatched) {
15683:
15684: yyValue = GNode.create("AlignofExpression",
15685: v$g$1);
15686: yyValue.setLocation(location(yyStart));
15687:
15688: return yyResult.createValue(yyValue,
15689: yyError);
15690: } else {
15691: yyError = yyError.select(
15692: "unary expression expected",
15693: yyStart);
15694: }
15695: } else {
15696: yyError = yyError.select("\")\" expected",
15697: yyBase);
15698: }
15699: }
15700: } else {
15701: yyError = yyError.select("\"(\" expected", yyBase);
15702: }
15703:
15704: // Nested alternative 2.
15705:
15706: yyResult = pJeannieC$UnaryExpression(yyChoice1);
15707: yyError = yyResult.select(yyError);
15708: if (yyResult.hasValue()) {
15709: final Node v$g$2 = yyResult.semanticValue();
15710:
15711: yyValue = GNode.create("AlignofExpression", v$g$2);
15712: yyValue.setLocation(location(yyStart));
15713:
15714: return yyResult.createValue(yyValue, yyError);
15715: }
15716: }
15717:
15718: // Alternative 3.
15719:
15720: yyResult = pKeyword(yyStart);
15721: yyError = yyResult.select(yyError);
15722: if (yyResult.hasValue("__builtin_offsetof")) {
15723:
15724: yyBase = yyResult.index;
15725: yyResult = pSymbol(yyBase);
15726: yyError = yyResult.select(yyError);
15727: if (yyResult.hasValue("(")) {
15728:
15729: yyResult = pJeannieC$TypeName(yyResult.index);
15730: yyError = yyResult.select(yyError);
15731: if (yyResult.hasValue()) {
15732: final Node v$g$1 = yyResult.semanticValue();
15733:
15734: yyBase = yyResult.index;
15735: yyResult = pSymbol(yyBase);
15736: yyError = yyResult.select(yyError);
15737: if (yyResult.hasValue(",")) {
15738:
15739: yyResult = pJeannieC$PostfixExpression(yyResult.index);
15740: yyError = yyResult.select(yyError);
15741: if (yyResult.hasValue()) {
15742: final Node v$g$2 = yyResult.semanticValue();
15743:
15744: yyBase = yyResult.index;
15745: yyResult = pSymbol(yyBase);
15746: yyError = yyResult.select(yyError);
15747: if (yyResult.hasValue(")")) {
15748:
15749: yyValue = GNode.create(
15750: "OffsetofExpression", v$g$1,
15751: v$g$2);
15752: yyValue.setLocation(location(yyStart));
15753:
15754: return yyResult.createValue(yyValue,
15755: yyError);
15756: } else {
15757: yyError = yyError.select(
15758: "\")\" expected", yyBase);
15759: }
15760: }
15761: } else {
15762: yyError = yyError.select("\",\" expected",
15763: yyBase);
15764: }
15765: }
15766: } else {
15767: yyError = yyError.select("\"(\" expected", yyBase);
15768: }
15769: }
15770:
15771: // Alternative 4.
15772:
15773: yyResult = pKeyword(yyStart);
15774: yyError = yyResult.select(yyError);
15775: if (yyResult.hasValue("__builtin_types_compatible_p")) {
15776:
15777: yyBase = yyResult.index;
15778: yyResult = pSymbol(yyBase);
15779: yyError = yyResult.select(yyError);
15780: if (yyResult.hasValue("(")) {
15781:
15782: yyResult = pJeannieC$TypeName(yyResult.index);
15783: yyError = yyResult.select(yyError);
15784: if (yyResult.hasValue()) {
15785: final Node v$g$1 = yyResult.semanticValue();
15786:
15787: yyBase = yyResult.index;
15788: yyResult = pSymbol(yyBase);
15789: yyError = yyResult.select(yyError);
15790: if (yyResult.hasValue(",")) {
15791:
15792: yyResult = pJeannieC$TypeName(yyResult.index);
15793: yyError = yyResult.select(yyError);
15794: if (yyResult.hasValue()) {
15795: final Node v$g$2 = yyResult.semanticValue();
15796:
15797: yyBase = yyResult.index;
15798: yyResult = pSymbol(yyBase);
15799: yyError = yyResult.select(yyError);
15800: if (yyResult.hasValue(")")) {
15801:
15802: yyValue = GNode.create(
15803: "TypeCompatibilityExpression",
15804: v$g$1, v$g$2);
15805: yyValue.setLocation(location(yyStart));
15806:
15807: return yyResult.createValue(yyValue,
15808: yyError);
15809: } else {
15810: yyError = yyError.select(
15811: "\")\" expected", yyBase);
15812: }
15813: }
15814: } else {
15815: yyError = yyError.select("\",\" expected",
15816: yyBase);
15817: }
15818: }
15819: } else {
15820: yyError = yyError.select("\"(\" expected", yyBase);
15821: }
15822: }
15823:
15824: // Alternative 5.
15825:
15826: yyResult = pSymbol(yyStart);
15827: yyError = yyResult.select(yyError);
15828: if (yyResult.hasValue("-")) {
15829:
15830: yyResult = pJeannieC$CastExpression(yyResult.index);
15831: yyError = yyResult.select(yyError);
15832: if (yyResult.hasValue()) {
15833: final Node v$g$1 = yyResult.semanticValue();
15834:
15835: yyValue = GNode.create("UnaryMinusExpression", v$g$1);
15836: yyValue.setLocation(location(yyStart));
15837:
15838: return yyResult.createValue(yyValue, yyError);
15839: }
15840: }
15841:
15842: // Alternative 6.
15843:
15844: yyResult = pSymbol(yyStart);
15845: yyError = yyResult.select(yyError);
15846: if (yyResult.hasValue("+")) {
15847:
15848: yyResult = pJeannieC$CastExpression(yyResult.index);
15849: yyError = yyResult.select(yyError);
15850: if (yyResult.hasValue()) {
15851: final Node v$g$1 = yyResult.semanticValue();
15852:
15853: yyValue = GNode.create("UnaryPlusExpression", v$g$1);
15854: yyValue.setLocation(location(yyStart));
15855:
15856: return yyResult.createValue(yyValue, yyError);
15857: }
15858: }
15859:
15860: // Alternative <JavaInCExpression>.
15861:
15862: yyResult = pJavaInCExpression(yyStart);
15863: yyError = yyResult.select(yyError);
15864: if (yyResult.hasValue()) {
15865: yyValue = yyResult.semanticValue();
15866:
15867: return yyResult.createValue(yyValue, yyError);
15868: }
15869:
15870: // Alternative 8.
15871:
15872: yyResult = pSymbol(yyStart);
15873: yyError = yyResult.select(yyError);
15874: if (yyResult.hasValue("!")) {
15875:
15876: yyResult = pJeannieC$CastExpression(yyResult.index);
15877: yyError = yyResult.select(yyError);
15878: if (yyResult.hasValue()) {
15879: final Node v$g$1 = yyResult.semanticValue();
15880:
15881: yyValue = GNode.create("LogicalNegationExpression",
15882: v$g$1);
15883: yyValue.setLocation(location(yyStart));
15884:
15885: return yyResult.createValue(yyValue, yyError);
15886: }
15887: }
15888:
15889: // Alternative 9.
15890:
15891: yyResult = pSymbol(yyStart);
15892: yyError = yyResult.select(yyError);
15893: if (yyResult.hasValue("~")) {
15894:
15895: yyResult = pJeannieC$CastExpression(yyResult.index);
15896: yyError = yyResult.select(yyError);
15897: if (yyResult.hasValue()) {
15898: final Node v$g$1 = yyResult.semanticValue();
15899:
15900: yyValue = GNode.create("BitwiseNegationExpression",
15901: v$g$1);
15902: yyValue.setLocation(location(yyStart));
15903:
15904: return yyResult.createValue(yyValue, yyError);
15905: }
15906: }
15907:
15908: // Alternative 10.
15909:
15910: yyResult = pSymbol(yyStart);
15911: yyError = yyResult.select(yyError);
15912: if (yyResult.hasValue("&")) {
15913:
15914: yyResult = pJeannieC$CastExpression(yyResult.index);
15915: yyError = yyResult.select(yyError);
15916: if (yyResult.hasValue()) {
15917: final Node v$g$1 = yyResult.semanticValue();
15918:
15919: yyValue = GNode.create("AddressExpression", v$g$1);
15920: yyValue.setLocation(location(yyStart));
15921:
15922: return yyResult.createValue(yyValue, yyError);
15923: }
15924: }
15925:
15926: // Alternative 11.
15927:
15928: if (GCC) {
15929:
15930: yyResult = pSymbol(yyStart);
15931: yyError = yyResult.select(yyError);
15932: if (yyResult.hasValue("&&")) {
15933:
15934: yyResult = pCIdentifier$Identifier(yyResult.index);
15935: yyError = yyResult.select(yyError);
15936: if (yyResult.hasValue()) {
15937: final String v$g$1 = yyResult.semanticValue();
15938:
15939: yyValue = GNode.create("LabelAddressExpression",
15940: v$g$1);
15941: yyValue.setLocation(location(yyStart));
15942:
15943: return yyResult.createValue(yyValue, yyError);
15944: }
15945: }
15946: }
15947:
15948: // Alternative 12.
15949:
15950: yyResult = pSymbol(yyStart);
15951: yyError = yyResult.select(yyError);
15952: if (yyResult.hasValue("*")) {
15953:
15954: yyResult = pJeannieC$CastExpression(yyResult.index);
15955: yyError = yyResult.select(yyError);
15956: if (yyResult.hasValue()) {
15957: final Node v$g$1 = yyResult.semanticValue();
15958:
15959: yyValue = GNode.create("IndirectionExpression", v$g$1);
15960: yyValue.setLocation(location(yyStart));
15961:
15962: return yyResult.createValue(yyValue, yyError);
15963: }
15964: }
15965:
15966: // Alternative 13.
15967:
15968: yyResult = pSymbol(yyStart);
15969: yyError = yyResult.select(yyError);
15970: if (yyResult.hasValue("++")) {
15971:
15972: yyResult = pJeannieC$UnaryExpression(yyResult.index);
15973: yyError = yyResult.select(yyError);
15974: if (yyResult.hasValue()) {
15975: final Node v$g$1 = yyResult.semanticValue();
15976:
15977: yyValue = GNode.create("PreincrementExpression", v$g$1);
15978: yyValue.setLocation(location(yyStart));
15979:
15980: return yyResult.createValue(yyValue, yyError);
15981: }
15982: }
15983:
15984: // Alternative 14.
15985:
15986: yyResult = pSymbol(yyStart);
15987: yyError = yyResult.select(yyError);
15988: if (yyResult.hasValue("--")) {
15989:
15990: yyResult = pJeannieC$UnaryExpression(yyResult.index);
15991: yyError = yyResult.select(yyError);
15992: if (yyResult.hasValue()) {
15993: final Node v$g$1 = yyResult.semanticValue();
15994:
15995: yyValue = GNode.create("PredecrementExpression", v$g$1);
15996: yyValue.setLocation(location(yyStart));
15997:
15998: return yyResult.createValue(yyValue, yyError);
15999: }
16000: }
16001:
16002: // Alternative 15.
16003:
16004: if (GCC) {
16005:
16006: yyResult = pKeyword(yyStart);
16007: yyError = yyResult.select(yyError);
16008: if (yyResult.hasValue("__extension__")) {
16009:
16010: yyResult = pJeannieC$CastExpression(yyResult.index);
16011: yyError = yyResult.select(yyError);
16012: if (yyResult.hasValue()) {
16013: final Node v$g$1 = yyResult.semanticValue();
16014:
16015: yyValue = GNode
16016: .create("ExtensionExpression", v$g$1);
16017: yyValue.setLocation(location(yyStart));
16018:
16019: return yyResult.createValue(yyValue, yyError);
16020: }
16021: }
16022: }
16023:
16024: // Alternative <Base>.
16025:
16026: yyResult = pJeannieC$PostfixExpression(yyStart);
16027: yyError = yyResult.select(yyError);
16028: if (yyResult.hasValue()) {
16029: yyValue = yyResult.semanticValue();
16030:
16031: return yyResult.createValue(yyValue, yyError);
16032: }
16033:
16034: // Done.
16035: yyError = yyError.select("unary expression expected", yyStart);
16036: return yyError;
16037: }
16038:
16039: // =========================================================================
16040:
16041: /**
16042: * Parse nonterminal xtc.lang.jeannie.JeannieC.AlignofKeyword.
16043: *
16044: * @param yyStart The index.
16045: * @return The result.
16046: * @throws IOException Signals an I/O error.
16047: */
16048: private Result pAlignofKeyword(final int yyStart)
16049: throws IOException {
16050: Result yyResult;
16051: Void yyValue;
16052: ParseError yyError = ParseError.DUMMY;
16053:
16054: // Alternative 1.
16055:
16056: yyResult = pKeyword(yyStart);
16057: yyError = yyResult.select(yyError);
16058: if (yyResult.hasValue("__alignof__")) {
16059:
16060: yyValue = null;
16061:
16062: return yyResult.createValue(yyValue, yyError);
16063: }
16064:
16065: // Alternative 2.
16066:
16067: yyResult = pKeyword(yyStart);
16068: yyError = yyResult.select(yyError);
16069: if (yyResult.hasValue("__alignof")) {
16070:
16071: yyValue = null;
16072:
16073: return yyResult.createValue(yyValue, yyError);
16074: }
16075:
16076: // Done.
16077: yyError = yyError.select("alignof keyword expected", yyStart);
16078: return yyError;
16079: }
16080:
16081: // =========================================================================
16082:
16083: /**
16084: * Parse nonterminal xtc.lang.jeannie.JeannieC.PostfixExpression.
16085: *
16086: * @param yyStart The index.
16087: * @return The result.
16088: * @throws IOException Signals an I/O error.
16089: */
16090: private Result pJeannieC$PostfixExpression(final int yyStart)
16091: throws IOException {
16092:
16093: Result yyResult;
16094: int yyRepetition1;
16095: Pair<Action<Node>> yyRepValue1;
16096: Node yyValue;
16097: ParseError yyError = ParseError.DUMMY;
16098:
16099: // Alternative <Compound>.
16100:
16101: yyResult = pCompoundLiteral(yyStart);
16102: yyError = yyResult.select(yyError);
16103: if (yyResult.hasValue()) {
16104: final Node v$g$6 = yyResult.semanticValue();
16105:
16106: yyRepetition1 = yyResult.index;
16107: yyRepValue1 = Pair.empty();
16108: while (true) {
16109:
16110: yyResult = pJeannieC$PostfixExpression$$Tail1(yyRepetition1);
16111: yyError = yyResult.select(yyError);
16112: if (yyResult.hasValue()) {
16113: final Action<Node> v$7 = yyResult.semanticValue();
16114:
16115: yyRepetition1 = yyResult.index;
16116: yyRepValue1 = new Pair<Action<Node>>(v$7,
16117: yyRepValue1);
16118: continue;
16119: }
16120: break;
16121: }
16122: { // Start scope for v$8.
16123: final Pair<Action<Node>> v$8 = yyRepValue1.reverse();
16124:
16125: yyValue = apply(v$8, v$g$6, yyStart);
16126:
16127: return new SemanticValue(yyValue, yyRepetition1,
16128: yyError);
16129: } // End scope for v$8.
16130: }
16131:
16132: // Alternative <Primary>.
16133:
16134: yyResult = pJeannieC$PrimaryExpression(yyStart);
16135: yyError = yyResult.select(yyError);
16136: if (yyResult.hasValue()) {
16137: final Node v$g$9 = yyResult.semanticValue();
16138:
16139: yyRepetition1 = yyResult.index;
16140: yyRepValue1 = Pair.empty();
16141: while (true) {
16142:
16143: yyResult = pJeannieC$PostfixExpression$$Tail1(yyRepetition1);
16144: yyError = yyResult.select(yyError);
16145: if (yyResult.hasValue()) {
16146: final Action<Node> v$10 = yyResult.semanticValue();
16147:
16148: yyRepetition1 = yyResult.index;
16149: yyRepValue1 = new Pair<Action<Node>>(v$10,
16150: yyRepValue1);
16151: continue;
16152: }
16153: break;
16154: }
16155: { // Start scope for v$11.
16156: final Pair<Action<Node>> v$11 = yyRepValue1.reverse();
16157:
16158: yyValue = apply(v$11, v$g$9, yyStart);
16159:
16160: return new SemanticValue(yyValue, yyRepetition1,
16161: yyError);
16162: } // End scope for v$11.
16163: }
16164:
16165: // Done.
16166: return yyError;
16167: }
16168:
16169: // =========================================================================
16170:
16171: /**
16172: * Parse synthetic nonterminal JeannieC.PostfixExpression$$Tail1.
16173: *
16174: * @param yyStart The index.
16175: * @return The result.
16176: * @throws IOException Signals an I/O error.
16177: */
16178: private Result pJeannieC$PostfixExpression$$Tail1(final int yyStart)
16179: throws IOException {
16180:
16181: Result yyResult;
16182: int yyBase;
16183: int yyOption1;
16184: Node yyOpValue1;
16185: Action<Node> yyValue;
16186: ParseError yyError = ParseError.DUMMY;
16187:
16188: // Alternative 1.
16189:
16190: yyResult = pSymbol(yyStart);
16191: yyError = yyResult.select(yyError);
16192: if (yyResult.hasValue("[")) {
16193:
16194: yyResult = pCommaExpression(yyResult.index);
16195: yyError = yyResult.select(yyError);
16196: if (yyResult.hasValue()) {
16197: final Node v$g$2 = yyResult.semanticValue();
16198:
16199: yyBase = yyResult.index;
16200: yyResult = pSymbol(yyBase);
16201: yyError = yyResult.select(yyError);
16202: if (yyResult.hasValue("]")) {
16203:
16204: yyValue = new Action<Node>() {
16205: public Node run(Node v$1) {
16206: return GNode.create("SubscriptExpression",
16207: v$1, v$g$2);
16208: }
16209: };
16210:
16211: return yyResult.createValue(yyValue, yyError);
16212: } else {
16213: yyError = yyError.select("\"]\" expected", yyBase);
16214: }
16215: }
16216: }
16217:
16218: // Alternative 2.
16219:
16220: yyResult = pSymbol(yyStart);
16221: yyError = yyResult.select(yyError);
16222: if (yyResult.hasValue(".")) {
16223:
16224: yyResult = pCIdentifier$Identifier(yyResult.index);
16225: yyError = yyResult.select(yyError);
16226: if (yyResult.hasValue()) {
16227: final String v$g$3 = yyResult.semanticValue();
16228:
16229: yyValue = new Action<Node>() {
16230: public Node run(Node v$1) {
16231: return GNode.create("DirectComponentSelection",
16232: v$1, v$g$3);
16233: }
16234: };
16235:
16236: return yyResult.createValue(yyValue, yyError);
16237: }
16238: }
16239:
16240: // Alternative 3.
16241:
16242: yyResult = pSymbol(yyStart);
16243: yyError = yyResult.select(yyError);
16244: if (yyResult.hasValue("->")) {
16245:
16246: yyResult = pCIdentifier$Identifier(yyResult.index);
16247: yyError = yyResult.select(yyError);
16248: if (yyResult.hasValue()) {
16249: final String v$g$4 = yyResult.semanticValue();
16250:
16251: yyValue = new Action<Node>() {
16252: public Node run(Node v$1) {
16253: return GNode.create(
16254: "IndirectComponentSelection", v$1,
16255: v$g$4);
16256: }
16257: };
16258:
16259: return yyResult.createValue(yyValue, yyError);
16260: }
16261: }
16262:
16263: // Alternative 4.
16264:
16265: yyResult = pSymbol(yyStart);
16266: yyError = yyResult.select(yyError);
16267: if (yyResult.hasValue("(")) {
16268:
16269: yyOption1 = yyResult.index;
16270: yyOpValue1 = null;
16271:
16272: yyResult = pJeannieC$ExpressionList(yyOption1);
16273: yyError = yyResult.select(yyError);
16274: if (yyResult.hasValue()) {
16275: final Node v$el$1 = yyResult.semanticValue();
16276:
16277: yyOption1 = yyResult.index;
16278: yyOpValue1 = v$el$1;
16279: }
16280: { // Start scope for v$g$5.
16281: final Node v$g$5 = yyOpValue1;
16282:
16283: yyBase = yyOption1;
16284: yyResult = pSymbol(yyBase);
16285: yyError = yyResult.select(yyError);
16286: if (yyResult.hasValue(")")) {
16287:
16288: yyValue = new Action<Node>() {
16289: public Node run(Node v$1) {
16290: return GNode.create("FunctionCall", v$1,
16291: v$g$5);
16292: }
16293: };
16294:
16295: return yyResult.createValue(yyValue, yyError);
16296: } else {
16297: yyError = yyError.select("\")\" expected", yyBase);
16298: }
16299: } // End scope for v$g$5.
16300: }
16301:
16302: // Alternative 5.
16303:
16304: yyResult = pSymbol(yyStart);
16305: yyError = yyResult.select(yyError);
16306: if (yyResult.hasValue("++")) {
16307:
16308: yyValue = new Action<Node>() {
16309: public Node run(Node v$1) {
16310: return GNode.create("PostincrementExpression", v$1);
16311: }
16312: };
16313:
16314: return yyResult.createValue(yyValue, yyError);
16315: }
16316:
16317: // Alternative 6.
16318:
16319: yyResult = pSymbol(yyStart);
16320: yyError = yyResult.select(yyError);
16321: if (yyResult.hasValue("--")) {
16322:
16323: yyValue = new Action<Node>() {
16324: public Node run(Node v$1) {
16325: return GNode.create("PostdecrementExpression", v$1);
16326: }
16327: };
16328:
16329: return yyResult.createValue(yyValue, yyError);
16330: }
16331:
16332: // Done.
16333: yyError = yyError
16334: .select("postfix expression expected", yyStart);
16335: return yyError;
16336: }
16337:
16338: // =========================================================================
16339:
16340: /**
16341: * Parse nonterminal xtc.lang.jeannie.JeannieC.ExpressionList.
16342: *
16343: * @param yyStart The index.
16344: * @return The result.
16345: * @throws IOException Signals an I/O error.
16346: */
16347: private Result pJeannieC$ExpressionList(final int yyStart)
16348: throws IOException {
16349:
16350: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
16351: if (null == yyColumn.chunk5)
16352: yyColumn.chunk5 = new Chunk5();
16353: if (null == yyColumn.chunk5.fJeannieC$ExpressionList)
16354: yyColumn.chunk5.fJeannieC$ExpressionList = pJeannieC$ExpressionList$1(yyStart);
16355: return yyColumn.chunk5.fJeannieC$ExpressionList;
16356: }
16357:
16358: /** Actually parse xtc.lang.jeannie.JeannieC.ExpressionList. */
16359: private Result pJeannieC$ExpressionList$1(final int yyStart)
16360: throws IOException {
16361:
16362: Result yyResult;
16363: Node yyValue;
16364: ParseError yyError = ParseError.DUMMY;
16365:
16366: // Alternative <Expressions>.
16367:
16368: yyResult = pAssignmentExpression(yyStart);
16369: yyError = yyResult.select(yyError);
16370: if (yyResult.hasValue()) {
16371: final Node v$g$1 = yyResult.semanticValue();
16372:
16373: yyResult = pJeannieC$ExpressionList$$Star1(yyResult.index);
16374: yyError = yyResult.select(yyError);
16375: if (yyResult.hasValue()) {
16376: final Pair<Node> v$g$2 = yyResult.semanticValue();
16377:
16378: yyValue = GNode.createFromPair("ExpressionList", v$g$1,
16379: v$g$2);
16380: yyValue.setLocation(location(yyStart));
16381:
16382: return yyResult.createValue(yyValue, yyError);
16383: }
16384: }
16385:
16386: // Done.
16387: return yyError;
16388: }
16389:
16390: // =========================================================================
16391:
16392: /**
16393: * Parse synthetic nonterminal JeannieC.ExpressionList$$Star1.
16394: *
16395: * @param yyStart The index.
16396: * @return The result.
16397: * @throws IOException Signals an I/O error.
16398: */
16399: private Result pJeannieC$ExpressionList$$Star1(final int yyStart)
16400: throws IOException {
16401:
16402: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
16403: if (null == yyColumn.chunk5)
16404: yyColumn.chunk5 = new Chunk5();
16405: if (null == yyColumn.chunk5.fJeannieC$ExpressionList$$Star1)
16406: yyColumn.chunk5.fJeannieC$ExpressionList$$Star1 = pJeannieC$ExpressionList$$Star1$1(yyStart);
16407: return yyColumn.chunk5.fJeannieC$ExpressionList$$Star1;
16408: }
16409:
16410: /** Actually parse JeannieC.ExpressionList$$Star1. */
16411: private Result pJeannieC$ExpressionList$$Star1$1(final int yyStart)
16412: throws IOException {
16413:
16414: Result yyResult;
16415: Pair<Node> yyValue;
16416: ParseError yyError = ParseError.DUMMY;
16417:
16418: // Alternative 1.
16419:
16420: yyResult = pSymbol(yyStart);
16421: yyError = yyResult.select(yyError);
16422: if (yyResult.hasValue(",")) {
16423:
16424: yyResult = pAssignmentExpression(yyResult.index);
16425: yyError = yyResult.select(yyError);
16426: if (yyResult.hasValue()) {
16427: final Node v$el$1 = yyResult.semanticValue();
16428:
16429: yyResult = pJeannieC$ExpressionList$$Star1(yyResult.index);
16430: yyError = yyResult.select(yyError);
16431: if (yyResult.hasValue()) {
16432: final Pair<Node> v$2 = yyResult.semanticValue();
16433:
16434: yyValue = new Pair<Node>(v$el$1, v$2);
16435:
16436: return yyResult.createValue(yyValue, yyError);
16437: }
16438: }
16439: }
16440:
16441: // Alternative 2.
16442:
16443: yyValue = Pair.empty();
16444:
16445: return new SemanticValue(yyValue, yyStart, yyError);
16446: }
16447:
16448: // =========================================================================
16449:
16450: /**
16451: * Parse nonterminal xtc.lang.jeannie.JeannieC.CompoundLiteral.
16452: *
16453: * @param yyStart The index.
16454: * @return The result.
16455: * @throws IOException Signals an I/O error.
16456: */
16457: private Result pCompoundLiteral(final int yyStart)
16458: throws IOException {
16459: Result yyResult;
16460: int yyBase;
16461: int yyOption1;
16462: Node yyValue;
16463: ParseError yyError = ParseError.DUMMY;
16464:
16465: // Alternative 1.
16466:
16467: yyResult = pSymbol(yyStart);
16468: yyError = yyResult.select(yyError);
16469: if (yyResult.hasValue("(")) {
16470:
16471: yyResult = pJeannieC$TypeName(yyResult.index);
16472: yyError = yyResult.select(yyError);
16473: if (yyResult.hasValue()) {
16474: final Node v$g$1 = yyResult.semanticValue();
16475:
16476: yyBase = yyResult.index;
16477: yyResult = pSymbol(yyBase);
16478: yyError = yyResult.select(yyError);
16479: if (yyResult.hasValue(")")) {
16480:
16481: yyBase = yyResult.index;
16482: yyResult = pSymbol(yyBase);
16483: yyError = yyResult.select(yyError);
16484: if (yyResult.hasValue("{")) {
16485:
16486: yyResult = pInitializerList(yyResult.index);
16487: yyError = yyResult.select(yyError);
16488: if (yyResult.hasValue()) {
16489: final Node v$g$2 = yyResult.semanticValue();
16490:
16491: yyOption1 = yyResult.index;
16492:
16493: yyBase = yyOption1;
16494: yyResult = pSymbol(yyBase);
16495: yyError = yyResult.select(yyError);
16496: if (yyResult.hasValue(",")) {
16497:
16498: yyOption1 = yyResult.index;
16499: } else {
16500: yyError = yyError.select(
16501: "\",\" expected", yyBase);
16502: }
16503:
16504: yyBase = yyOption1;
16505: yyResult = pSymbol(yyBase);
16506: yyError = yyResult.select(yyError);
16507: if (yyResult.hasValue("}")) {
16508:
16509: yyValue = GNode
16510: .create("CompoundLiteral",
16511: v$g$1, v$g$2);
16512: yyValue.setLocation(location(yyStart));
16513:
16514: return yyResult.createValue(yyValue,
16515: yyError);
16516: } else {
16517: yyError = yyError.select(
16518: "\"}\" expected", yyBase);
16519: }
16520: }
16521: } else {
16522: yyError = yyError.select("\"{\" expected",
16523: yyBase);
16524: }
16525: } else {
16526: yyError = yyError.select("\")\" expected", yyBase);
16527: }
16528: }
16529: }
16530:
16531: // Done.
16532: yyError = yyError.select("compound literal expected", yyStart);
16533: return yyError;
16534: }
16535:
16536: // =========================================================================
16537:
16538: /**
16539: * Parse nonterminal xtc.lang.jeannie.JeannieC.PrimaryExpression.
16540: *
16541: * @param yyStart The index.
16542: * @return The result.
16543: * @throws IOException Signals an I/O error.
16544: */
16545: private Result pJeannieC$PrimaryExpression(final int yyStart)
16546: throws IOException {
16547:
16548: Result yyResult;
16549: int yyBase;
16550: Node yyValue;
16551: ParseError yyError = ParseError.DUMMY;
16552:
16553: // Alternative <Constant>.
16554:
16555: yyResult = pConstant(yyStart);
16556: yyError = yyResult.select(yyError);
16557: if (yyResult.hasValue()) {
16558: yyValue = yyResult.semanticValue();
16559:
16560: return yyResult.createValue(yyValue, yyError);
16561: }
16562:
16563: // Alternative 2.
16564:
16565: yyResult = pCIdentifier$Identifier(yyStart);
16566: yyError = yyResult.select(yyError);
16567: if (yyResult.hasValue()) {
16568: final String v$g$1 = yyResult.semanticValue();
16569:
16570: yyValue = GNode.create("PrimaryIdentifier", v$g$1);
16571: yyValue.setLocation(location(yyStart));
16572:
16573: return yyResult.createValue(yyValue, yyError);
16574: }
16575:
16576: // Alternative 3.
16577:
16578: if (GCC) {
16579:
16580: yyResult = pSymbol(yyStart);
16581: yyError = yyResult.select(yyError);
16582: if (yyResult.hasValue("(")) {
16583:
16584: yyResult = pCompoundStatement(yyResult.index);
16585: yyError = yyResult.select(yyError);
16586: if (yyResult.hasValue()) {
16587: final Node v$g$1 = yyResult.semanticValue();
16588:
16589: yyBase = yyResult.index;
16590: yyResult = pSymbol(yyBase);
16591: yyError = yyResult.select(yyError);
16592: if (yyResult.hasValue(")")) {
16593:
16594: yyValue = GNode.create("StatementAsExpression",
16595: v$g$1);
16596: yyValue.setLocation(location(yyStart));
16597:
16598: return yyResult.createValue(yyValue, yyError);
16599: } else {
16600: yyError = yyError.select("\")\" expected",
16601: yyBase);
16602: }
16603: }
16604: }
16605: }
16606:
16607: // Alternative 4.
16608:
16609: yyResult = pKeyword(yyStart);
16610: yyError = yyResult.select(yyError);
16611: if (yyResult.hasValue("__builtin_va_arg")) {
16612:
16613: yyBase = yyResult.index;
16614: yyResult = pSymbol(yyBase);
16615: yyError = yyResult.select(yyError);
16616: if (yyResult.hasValue("(")) {
16617:
16618: yyResult = pAssignmentExpression(yyResult.index);
16619: yyError = yyResult.select(yyError);
16620: if (yyResult.hasValue()) {
16621: final Node v$g$1 = yyResult.semanticValue();
16622:
16623: yyBase = yyResult.index;
16624: yyResult = pSymbol(yyBase);
16625: yyError = yyResult.select(yyError);
16626: if (yyResult.hasValue(",")) {
16627:
16628: yyResult = pJeannieC$TypeName(yyResult.index);
16629: yyError = yyResult.select(yyError);
16630: if (yyResult.hasValue()) {
16631: final Node v$g$2 = yyResult.semanticValue();
16632:
16633: yyBase = yyResult.index;
16634: yyResult = pSymbol(yyBase);
16635: yyError = yyResult.select(yyError);
16636: if (yyResult.hasValue(")")) {
16637:
16638: yyValue = GNode.create(
16639: "VariableArgumentAccess",
16640: v$g$1, v$g$2);
16641: yyValue.setLocation(location(yyStart));
16642:
16643: return yyResult.createValue(yyValue,
16644: yyError);
16645: } else {
16646: yyError = yyError.select(
16647: "\")\" expected", yyBase);
16648: }
16649: }
16650: } else {
16651: yyError = yyError.select("\",\" expected",
16652: yyBase);
16653: }
16654: }
16655: } else {
16656: yyError = yyError.select("\"(\" expected", yyBase);
16657: }
16658: }
16659:
16660: // Alternative <ParenthesizedExpression>.
16661:
16662: yyResult = pSymbol(yyStart);
16663: yyError = yyResult.select(yyError);
16664: if (yyResult.hasValue("(")) {
16665:
16666: yyResult = pCommaExpression(yyResult.index);
16667: yyError = yyResult.select(yyError);
16668: if (yyResult.hasValue()) {
16669: yyValue = yyResult.semanticValue();
16670:
16671: yyBase = yyResult.index;
16672: yyResult = pSymbol(yyBase);
16673: yyError = yyResult.select(yyError);
16674: if (yyResult.hasValue(")")) {
16675:
16676: return yyResult.createValue(yyValue, yyError);
16677: } else {
16678: yyError = yyError.select("\")\" expected", yyBase);
16679: }
16680: }
16681: }
16682:
16683: // Done.
16684: yyError = yyError
16685: .select("primary expression expected", yyStart);
16686: return yyError;
16687: }
16688:
16689: // =========================================================================
16690:
16691: /**
16692: * Parse nonterminal xtc.lang.jeannie.JeannieC.PrimaryIdentifier.
16693: *
16694: * @param yyStart The index.
16695: * @return The result.
16696: * @throws IOException Signals an I/O error.
16697: */
16698: private Result pJeannieC$PrimaryIdentifier(final int yyStart)
16699: throws IOException {
16700:
16701: Result yyResult;
16702: Node yyValue;
16703: ParseError yyError = ParseError.DUMMY;
16704:
16705: // Alternative 1.
16706:
16707: yyResult = pCIdentifier$Identifier(yyStart);
16708: yyError = yyResult.select(yyError);
16709: if (yyResult.hasValue()) {
16710: final String v$g$1 = yyResult.semanticValue();
16711:
16712: yyValue = GNode.create("PrimaryIdentifier", v$g$1);
16713: yyValue.setLocation(location(yyStart));
16714:
16715: return yyResult.createValue(yyValue, yyError);
16716: }
16717:
16718: // Done.
16719: return yyError;
16720: }
16721:
16722: // =========================================================================
16723:
16724: /**
16725: * Parse nonterminal xtc.lang.jeannie.JeannieC.AssemblyDefinition.
16726: *
16727: * @param yyStart The index.
16728: * @return The result.
16729: * @throws IOException Signals an I/O error.
16730: */
16731: private Result pAssemblyDefinition(final int yyStart)
16732: throws IOException {
16733: Result yyResult;
16734: int yyBase;
16735: Node yyValue;
16736: ParseError yyError = ParseError.DUMMY;
16737:
16738: // Alternative 1.
16739:
16740: yyResult = pSimpleAssemblyExpression(yyStart);
16741: yyError = yyResult.select(yyError);
16742: if (yyResult.hasValue()) {
16743: final Node v$g$1 = yyResult.semanticValue();
16744:
16745: yyBase = yyResult.index;
16746: yyResult = pSymbol(yyBase);
16747: yyError = yyResult.select(yyError);
16748: if (yyResult.hasValue(";")) {
16749:
16750: yyValue = GNode.create("AssemblyDefinition", v$g$1);
16751: yyValue.setLocation(location(yyStart));
16752:
16753: return yyResult.createValue(yyValue, yyError);
16754: } else {
16755: yyError = yyError.select("\";\" expected", yyBase);
16756: }
16757: }
16758:
16759: // Done.
16760: return yyError;
16761: }
16762:
16763: // =========================================================================
16764:
16765: /**
16766: * Parse nonterminal xtc.lang.jeannie.JeannieC.SimpleAssemblyExpression.
16767: *
16768: * @param yyStart The index.
16769: * @return The result.
16770: * @throws IOException Signals an I/O error.
16771: */
16772: private Result pSimpleAssemblyExpression(final int yyStart)
16773: throws IOException {
16774:
16775: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
16776: if (null == yyColumn.chunk6)
16777: yyColumn.chunk6 = new Chunk6();
16778: if (null == yyColumn.chunk6.fSimpleAssemblyExpression)
16779: yyColumn.chunk6.fSimpleAssemblyExpression = pSimpleAssemblyExpression$1(yyStart);
16780: return yyColumn.chunk6.fSimpleAssemblyExpression;
16781: }
16782:
16783: /** Actually parse xtc.lang.jeannie.JeannieC.SimpleAssemblyExpression. */
16784: private Result pSimpleAssemblyExpression$1(final int yyStart)
16785: throws IOException {
16786:
16787: Result yyResult;
16788: int yyBase;
16789: Node yyValue;
16790: ParseError yyError = ParseError.DUMMY;
16791:
16792: // Alternative 1.
16793:
16794: yyResult = pAsmKeyword(yyStart);
16795: yyError = yyResult.select(yyError);
16796: if (yyResult.hasValue()) {
16797:
16798: yyBase = yyResult.index;
16799: yyResult = pSymbol(yyBase);
16800: yyError = yyResult.select(yyError);
16801: if (yyResult.hasValue("(")) {
16802:
16803: yyResult = pCConstant$StringConstant(yyResult.index);
16804: yyError = yyResult.select(yyError);
16805: if (yyResult.hasValue()) {
16806: final Node v$g$1 = yyResult.semanticValue();
16807:
16808: yyBase = yyResult.index;
16809: yyResult = pSymbol(yyBase);
16810: yyError = yyResult.select(yyError);
16811: if (yyResult.hasValue(")")) {
16812:
16813: yyValue = GNode.create(
16814: "SimpleAssemblyExpression", v$g$1);
16815: yyValue.setLocation(location(yyStart));
16816:
16817: return yyResult.createValue(yyValue, yyError);
16818: } else {
16819: yyError = yyError.select("\")\" expected",
16820: yyBase);
16821: }
16822: }
16823: } else {
16824: yyError = yyError.select("\"(\" expected", yyBase);
16825: }
16826: }
16827:
16828: // Done.
16829: return yyError;
16830: }
16831:
16832: // =========================================================================
16833:
16834: /**
16835: * Parse nonterminal xtc.lang.jeannie.JeannieC.AssemblyArgument.
16836: *
16837: * @param yyStart The index.
16838: * @return The result.
16839: * @throws IOException Signals an I/O error.
16840: */
16841: private Result pAssemblyArgument(final int yyStart)
16842: throws IOException {
16843: Result yyResult;
16844: int yyBase;
16845: int yyOption1;
16846: Node yyOpValue1;
16847: Node yyValue;
16848: ParseError yyError = ParseError.DUMMY;
16849:
16850: // Alternative 1.
16851:
16852: yyResult = pCConstant$StringConstant(yyStart);
16853: yyError = yyResult.select(yyError);
16854: if (yyResult.hasValue()) {
16855: final Node v$g$1 = yyResult.semanticValue();
16856:
16857: final int yyChoice1 = yyResult.index;
16858:
16859: // Nested alternative 1.
16860:
16861: yyBase = yyChoice1;
16862: yyResult = pSymbol(yyBase);
16863: yyError = yyResult.select(yyError);
16864: if (yyResult.hasValue(":")) {
16865:
16866: yyOption1 = yyResult.index;
16867: yyOpValue1 = null;
16868:
16869: yyResult = pAssemblyOperands(yyOption1);
16870: yyError = yyResult.select(yyError);
16871: if (yyResult.hasValue()) {
16872: final Node v$el$1 = yyResult.semanticValue();
16873:
16874: yyOption1 = yyResult.index;
16875: yyOpValue1 = v$el$1;
16876: }
16877: { // Start scope for v$g$2.
16878: final Node v$g$2 = yyOpValue1;
16879:
16880: final int yyChoice2 = yyOption1;
16881:
16882: // Nested alternative 1.
16883:
16884: yyBase = yyChoice2;
16885: yyResult = pSymbol(yyBase);
16886: yyError = yyResult.select(yyError);
16887: if (yyResult.hasValue(":")) {
16888:
16889: yyOption1 = yyResult.index;
16890: yyOpValue1 = null;
16891:
16892: yyResult = pAssemblyOperands(yyOption1);
16893: yyError = yyResult.select(yyError);
16894: if (yyResult.hasValue()) {
16895: final Node v$el$2 = yyResult
16896: .semanticValue();
16897:
16898: yyOption1 = yyResult.index;
16899: yyOpValue1 = v$el$2;
16900: }
16901: { // Start scope for v$g$3.
16902: final Node v$g$3 = yyOpValue1;
16903:
16904: final int yyChoice3 = yyOption1;
16905:
16906: // Nested alternative 1.
16907:
16908: yyBase = yyChoice3;
16909: yyResult = pSymbol(yyBase);
16910: yyError = yyResult.select(yyError);
16911: if (yyResult.hasValue(":")) {
16912:
16913: yyResult = pAssemblyClobbers(yyResult.index);
16914: yyError = yyResult.select(yyError);
16915: if (yyResult.hasValue()) {
16916: final Node v$g$4 = yyResult
16917: .semanticValue();
16918:
16919: yyValue = GNode.create(
16920: "AssemblyArgument", v$g$1,
16921: v$g$2, v$g$3, v$g$4);
16922: yyValue
16923: .setLocation(location(yyStart));
16924:
16925: return yyResult.createValue(
16926: yyValue, yyError);
16927: }
16928: } else {
16929: yyError = yyError.select(
16930: "\":\" expected", yyBase);
16931: }
16932:
16933: // Nested alternative 2.
16934:
16935: yyValue = GNode.create("AssemblyArgument",
16936: v$g$1, v$g$2, v$g$3);
16937: yyValue.setLocation(location(yyStart));
16938:
16939: return new SemanticValue(yyValue,
16940: yyChoice3, yyError);
16941: } // End scope for v$g$3.
16942: } else {
16943: yyError = yyError.select("\":\" expected",
16944: yyBase);
16945: }
16946:
16947: // Nested alternative 2.
16948:
16949: yyValue = GNode.create("AssemblyArgument", v$g$1,
16950: v$g$2);
16951: yyValue.setLocation(location(yyStart));
16952:
16953: return new SemanticValue(yyValue, yyChoice2,
16954: yyError);
16955: } // End scope for v$g$2.
16956: } else {
16957: yyError = yyError.select("\":\" expected", yyBase);
16958: }
16959:
16960: // Nested alternative 2.
16961:
16962: yyValue = GNode.create("AssemblyArgument", v$g$1);
16963: yyValue.setLocation(location(yyStart));
16964:
16965: return new SemanticValue(yyValue, yyChoice1, yyError);
16966: }
16967:
16968: // Done.
16969: return yyError;
16970: }
16971:
16972: // =========================================================================
16973:
16974: /**
16975: * Parse nonterminal xtc.lang.jeannie.JeannieC.AssemblyOperands.
16976: *
16977: * @param yyStart The index.
16978: * @return The result.
16979: * @throws IOException Signals an I/O error.
16980: */
16981: private Result pAssemblyOperands(final int yyStart)
16982: throws IOException {
16983: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
16984: if (null == yyColumn.chunk6)
16985: yyColumn.chunk6 = new Chunk6();
16986: if (null == yyColumn.chunk6.fAssemblyOperands)
16987: yyColumn.chunk6.fAssemblyOperands = pAssemblyOperands$1(yyStart);
16988: return yyColumn.chunk6.fAssemblyOperands;
16989: }
16990:
16991: /** Actually parse xtc.lang.jeannie.JeannieC.AssemblyOperands. */
16992: private Result pAssemblyOperands$1(final int yyStart)
16993: throws IOException {
16994: Result yyResult;
16995: Node yyValue;
16996: ParseError yyError = ParseError.DUMMY;
16997:
16998: // Alternative 1.
16999:
17000: yyResult = pAssemblyOperand(yyStart);
17001: yyError = yyResult.select(yyError);
17002: if (yyResult.hasValue()) {
17003: final Node v$g$1 = yyResult.semanticValue();
17004:
17005: yyResult = pAssemblyOperands$$Star1(yyResult.index);
17006: yyError = yyResult.select(yyError);
17007: if (yyResult.hasValue()) {
17008: final Pair<Node> v$g$2 = yyResult.semanticValue();
17009:
17010: yyValue = GNode.createFromPair("AssemblyOperands",
17011: v$g$1, v$g$2);
17012: yyValue.setLocation(location(yyStart));
17013:
17014: return yyResult.createValue(yyValue, yyError);
17015: }
17016: }
17017:
17018: // Done.
17019: return yyError;
17020: }
17021:
17022: // =========================================================================
17023:
17024: /**
17025: * Parse synthetic nonterminal
17026: * xtc.lang.jeannie.Jeannie.AssemblyOperands$$Star1.
17027: *
17028: * @param yyStart The index.
17029: * @return The result.
17030: * @throws IOException Signals an I/O error.
17031: */
17032: private Result pAssemblyOperands$$Star1(final int yyStart)
17033: throws IOException {
17034:
17035: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
17036: if (null == yyColumn.chunk6)
17037: yyColumn.chunk6 = new Chunk6();
17038: if (null == yyColumn.chunk6.fAssemblyOperands$$Star1)
17039: yyColumn.chunk6.fAssemblyOperands$$Star1 = pAssemblyOperands$$Star1$1(yyStart);
17040: return yyColumn.chunk6.fAssemblyOperands$$Star1;
17041: }
17042:
17043: /** Actually parse xtc.lang.jeannie.Jeannie.AssemblyOperands$$Star1. */
17044: private Result pAssemblyOperands$$Star1$1(final int yyStart)
17045: throws IOException {
17046:
17047: Result yyResult;
17048: Pair<Node> yyValue;
17049: ParseError yyError = ParseError.DUMMY;
17050:
17051: // Alternative 1.
17052:
17053: yyResult = pSymbol(yyStart);
17054: yyError = yyResult.select(yyError);
17055: if (yyResult.hasValue(",")) {
17056:
17057: yyResult = pAssemblyOperand(yyResult.index);
17058: yyError = yyResult.select(yyError);
17059: if (yyResult.hasValue()) {
17060: final Node v$el$1 = yyResult.semanticValue();
17061:
17062: yyResult = pAssemblyOperands$$Star1(yyResult.index);
17063: yyError = yyResult.select(yyError);
17064: if (yyResult.hasValue()) {
17065: final Pair<Node> v$2 = yyResult.semanticValue();
17066:
17067: yyValue = new Pair<Node>(v$el$1, v$2);
17068:
17069: return yyResult.createValue(yyValue, yyError);
17070: }
17071: }
17072: }
17073:
17074: // Alternative 2.
17075:
17076: yyValue = Pair.empty();
17077:
17078: return new SemanticValue(yyValue, yyStart, yyError);
17079: }
17080:
17081: // =========================================================================
17082:
17083: /**
17084: * Parse nonterminal xtc.lang.jeannie.JeannieC.AssemblyOperand.
17085: *
17086: * @param yyStart The index.
17087: * @return The result.
17088: * @throws IOException Signals an I/O error.
17089: */
17090: private Result pAssemblyOperand(final int yyStart)
17091: throws IOException {
17092: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
17093: if (null == yyColumn.chunk6)
17094: yyColumn.chunk6 = new Chunk6();
17095: if (null == yyColumn.chunk6.fAssemblyOperand)
17096: yyColumn.chunk6.fAssemblyOperand = pAssemblyOperand$1(yyStart);
17097: return yyColumn.chunk6.fAssemblyOperand;
17098: }
17099:
17100: /** Actually parse xtc.lang.jeannie.JeannieC.AssemblyOperand. */
17101: private Result pAssemblyOperand$1(final int yyStart)
17102: throws IOException {
17103: Result yyResult;
17104: int yyBase;
17105: int yyOption1;
17106: String yyOpValue1;
17107: Node yyValue;
17108: ParseError yyError = ParseError.DUMMY;
17109:
17110: // Alternative 1.
17111:
17112: yyOption1 = yyStart;
17113: yyOpValue1 = null;
17114:
17115: yyBase = yyOption1;
17116: yyResult = pSymbol(yyBase);
17117: yyError = yyResult.select(yyError);
17118: if (yyResult.hasValue("[")) {
17119:
17120: yyResult = pCIdentifier$Word(yyResult.index);
17121: yyError = yyResult.select(yyError);
17122: if (yyResult.hasValue()) {
17123: final String v$el$1 = yyResult.semanticValue();
17124:
17125: yyBase = yyResult.index;
17126: yyResult = pSymbol(yyBase);
17127: yyError = yyResult.select(yyError);
17128: if (yyResult.hasValue("]")) {
17129:
17130: yyOption1 = yyResult.index;
17131: yyOpValue1 = v$el$1;
17132: } else {
17133: yyError = yyError.select("\"]\" expected", yyBase);
17134: }
17135: }
17136: } else {
17137: yyError = yyError.select("\"[\" expected", yyBase);
17138: }
17139: { // Start scope for v$g$1.
17140: final String v$g$1 = yyOpValue1;
17141:
17142: yyResult = pCConstant$StringConstant(yyOption1);
17143: yyError = yyResult.select(yyError);
17144: if (yyResult.hasValue()) {
17145: final Node v$g$2 = yyResult.semanticValue();
17146:
17147: yyBase = yyResult.index;
17148: yyResult = pSymbol(yyBase);
17149: yyError = yyResult.select(yyError);
17150: if (yyResult.hasValue("(")) {
17151:
17152: yyResult = pCommaExpression(yyResult.index);
17153: yyError = yyResult.select(yyError);
17154: if (yyResult.hasValue()) {
17155: final Node v$g$3 = yyResult.semanticValue();
17156:
17157: yyBase = yyResult.index;
17158: yyResult = pSymbol(yyBase);
17159: yyError = yyResult.select(yyError);
17160: if (yyResult.hasValue(")")) {
17161:
17162: yyValue = GNode.create("AssemblyOperand",
17163: v$g$1, v$g$2, v$g$3);
17164: yyValue.setLocation(location(yyStart));
17165:
17166: return yyResult.createValue(yyValue,
17167: yyError);
17168: } else {
17169: yyError = yyError.select("\")\" expected",
17170: yyBase);
17171: }
17172: }
17173: } else {
17174: yyError = yyError.select("\"(\" expected", yyBase);
17175: }
17176: }
17177: } // End scope for v$g$1.
17178:
17179: // Done.
17180: return yyError;
17181: }
17182:
17183: // =========================================================================
17184:
17185: /**
17186: * Parse nonterminal xtc.lang.jeannie.JeannieC.AssemblyClobbers.
17187: *
17188: * @param yyStart The index.
17189: * @return The result.
17190: * @throws IOException Signals an I/O error.
17191: */
17192: private Result pAssemblyClobbers(final int yyStart)
17193: throws IOException {
17194: Result yyResult;
17195: int yyBase;
17196: int yyRepetition1;
17197: Pair<Node> yyRepValue1;
17198: Node yyValue;
17199: ParseError yyError = ParseError.DUMMY;
17200:
17201: // Alternative 1.
17202:
17203: yyResult = pCConstant$StringConstant(yyStart);
17204: yyError = yyResult.select(yyError);
17205: if (yyResult.hasValue()) {
17206: final Node v$g$1 = yyResult.semanticValue();
17207:
17208: yyRepetition1 = yyResult.index;
17209: yyRepValue1 = Pair.empty();
17210: while (true) {
17211:
17212: yyBase = yyRepetition1;
17213: yyResult = pSymbol(yyBase);
17214: yyError = yyResult.select(yyError);
17215: if (yyResult.hasValue(",")) {
17216:
17217: yyResult = pCConstant$StringConstant(yyResult.index);
17218: yyError = yyResult.select(yyError);
17219: if (yyResult.hasValue()) {
17220: final Node v$el$1 = yyResult.semanticValue();
17221:
17222: yyRepetition1 = yyResult.index;
17223: yyRepValue1 = new Pair<Node>(v$el$1,
17224: yyRepValue1);
17225: continue;
17226: }
17227: } else {
17228: yyError = yyError.select("\",\" expected", yyBase);
17229: }
17230: break;
17231: }
17232: { // Start scope for v$g$2.
17233: final Pair<Node> v$g$2 = yyRepValue1.reverse();
17234:
17235: yyValue = GNode.createFromPair("AssemblyClobbers",
17236: v$g$1, v$g$2);
17237: yyValue.setLocation(location(yyStart));
17238:
17239: return new SemanticValue(yyValue, yyRepetition1,
17240: yyError);
17241: } // End scope for v$g$2.
17242: }
17243:
17244: // Done.
17245: return yyError;
17246: }
17247:
17248: // =========================================================================
17249:
17250: /**
17251: * Parse nonterminal xtc.lang.jeannie.JeannieC.AsmKeyword.
17252: *
17253: * @param yyStart The index.
17254: * @return The result.
17255: * @throws IOException Signals an I/O error.
17256: */
17257: private Result pAsmKeyword(final int yyStart) throws IOException {
17258: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
17259: if (null == yyColumn.chunk6)
17260: yyColumn.chunk6 = new Chunk6();
17261: if (null == yyColumn.chunk6.fAsmKeyword)
17262: yyColumn.chunk6.fAsmKeyword = pAsmKeyword$1(yyStart);
17263: return yyColumn.chunk6.fAsmKeyword;
17264: }
17265:
17266: /** Actually parse xtc.lang.jeannie.JeannieC.AsmKeyword. */
17267: private Result pAsmKeyword$1(final int yyStart) throws IOException {
17268: Result yyResult;
17269: Void yyValue;
17270: ParseError yyError = ParseError.DUMMY;
17271:
17272: // Alternative 1.
17273:
17274: yyResult = pKeyword(yyStart);
17275: yyError = yyResult.select(yyError);
17276: if (yyResult.hasValue("asm")) {
17277:
17278: yyValue = null;
17279:
17280: return yyResult.createValue(yyValue, yyError);
17281: }
17282:
17283: // Alternative 2.
17284:
17285: yyResult = pKeyword(yyStart);
17286: yyError = yyResult.select(yyError);
17287: if (yyResult.hasValue("__asm")) {
17288:
17289: yyValue = null;
17290:
17291: return yyResult.createValue(yyValue, yyError);
17292: }
17293:
17294: // Alternative 3.
17295:
17296: yyResult = pKeyword(yyStart);
17297: yyError = yyResult.select(yyError);
17298: if (yyResult.hasValue("__asm__")) {
17299:
17300: yyValue = null;
17301:
17302: return yyResult.createValue(yyValue, yyError);
17303: }
17304:
17305: // Done.
17306: yyError = yyError.select("asm keyword expected", yyStart);
17307: return yyError;
17308: }
17309:
17310: // =========================================================================
17311:
17312: /**
17313: * Parse nonterminal xtc.lang.jeannie.JeannieC.WithStatement.
17314: *
17315: * @param yyStart The index.
17316: * @return The result.
17317: * @throws IOException Signals an I/O error.
17318: */
17319: private Result pWithStatement(final int yyStart) throws IOException {
17320: Result yyResult;
17321: int yyBase;
17322: Node yyValue;
17323: ParseError yyError = ParseError.DUMMY;
17324:
17325: // Alternative 1.
17326:
17327: yyResult = pKeyword(yyStart);
17328: yyError = yyResult.select(yyError);
17329: if (yyResult.hasValue("_with")) {
17330:
17331: yyResult = pPushScope(yyResult.index);
17332: yyError = yyResult.select(yyError);
17333: if (yyResult.hasValue()) {
17334:
17335: yyBase = yyResult.index;
17336: yyResult = pSymbol(yyBase);
17337: yyError = yyResult.select(yyError);
17338: if (yyResult.hasValue("(")) {
17339:
17340: yyResult = pWithInitializer(yyResult.index);
17341: yyError = yyResult.select(yyError);
17342: if (yyResult.hasValue()) {
17343: final Node v$g$1 = yyResult.semanticValue();
17344:
17345: yyBase = yyResult.index;
17346: yyResult = pSymbol(yyBase);
17347: yyError = yyResult.select(yyError);
17348: if (yyResult.hasValue(")")) {
17349:
17350: yyResult = pCInCBlock(yyResult.index);
17351: yyError = yyResult.select(yyError);
17352: if (yyResult.hasValue()) {
17353: final Node v$g$2 = yyResult
17354: .semanticValue();
17355:
17356: yyResult = pPopScope(yyResult.index);
17357: yyError = yyResult.select(yyError);
17358: if (yyResult.hasValue()) {
17359:
17360: yyValue = GNode.create(
17361: "WithStatement", v$g$1,
17362: v$g$2);
17363: yyValue
17364: .setLocation(location(yyStart));
17365:
17366: return yyResult.createValue(
17367: yyValue, yyError);
17368: }
17369: }
17370: } else {
17371: yyError = yyError.select("\")\" expected",
17372: yyBase);
17373: }
17374: }
17375: } else {
17376: yyError = yyError.select("\"(\" expected", yyBase);
17377: }
17378: }
17379: }
17380:
17381: // Done.
17382: yyError = yyError.select("with statement expected", yyStart);
17383: return yyError;
17384: }
17385:
17386: // =========================================================================
17387:
17388: /**
17389: * Parse nonterminal xtc.lang.jeannie.JeannieC.WithInitializer.
17390: *
17391: * @param yyStart The index.
17392: * @return The result.
17393: * @throws IOException Signals an I/O error.
17394: */
17395: private Result pWithInitializer(final int yyStart)
17396: throws IOException {
17397: Result yyResult;
17398: Node yyValue;
17399: ParseError yyError = ParseError.DUMMY;
17400:
17401: // Alternative <Declaration>.
17402:
17403: yyResult = pDeclarationNoSemicolon(yyStart);
17404: yyError = yyResult.select(yyError);
17405: if (yyResult.hasValue()) {
17406: yyValue = yyResult.semanticValue();
17407:
17408: return yyResult.createValue(yyValue, yyError);
17409: }
17410:
17411: // Alternative <Assignment>.
17412:
17413: yyResult = pAssignmentExpression(yyStart);
17414: yyError = yyResult.select(yyError);
17415: if (yyResult.hasValue()) {
17416: yyValue = yyResult.semanticValue();
17417:
17418: return yyResult.createValue(yyValue, yyError);
17419: }
17420:
17421: // Done.
17422: return yyError;
17423: }
17424:
17425: // =========================================================================
17426:
17427: /**
17428: * Parse nonterminal xtc.lang.jeannie.JeannieC.DeclarationNoSemicolon.
17429: *
17430: * @param yyStart The index.
17431: * @return The result.
17432: * @throws IOException Signals an I/O error.
17433: */
17434: private Result pDeclarationNoSemicolon(final int yyStart)
17435: throws IOException {
17436:
17437: Result yyResult;
17438: int yyOption1;
17439: Node yyOpValue1;
17440: Node yyValue;
17441: ParseError yyError = ParseError.DUMMY;
17442:
17443: // Alternative 1.
17444:
17445: yyResult = pDeclarationSpecifiers(yyStart);
17446: yyError = yyResult.select(yyError);
17447: if (yyResult.hasValue()) {
17448: final Node v$g$2 = yyResult.semanticValue();
17449:
17450: yyOption1 = yyResult.index;
17451: yyOpValue1 = null;
17452:
17453: yyResult = pInitializedDeclaratorList(yyOption1);
17454: yyError = yyResult.select(yyError);
17455: if (yyResult.hasValue()) {
17456: final Node v$el$1 = yyResult.semanticValue();
17457:
17458: yyOption1 = yyResult.index;
17459: yyOpValue1 = v$el$1;
17460: }
17461: { // Start scope for l.
17462: final Node l = yyOpValue1;
17463:
17464: if (yyState.isValid(l)) {
17465:
17466: yyValue = GNode.create("Declaration", null, v$g$2,
17467: l);
17468: yyValue.setLocation(location(yyStart));
17469:
17470: return new SemanticValue(yyValue, yyOption1,
17471: yyError);
17472: }
17473: } // End scope for l.
17474: }
17475:
17476: // Done.
17477: yyError = yyError.select("declaration no semicolon expected",
17478: yyStart);
17479: return yyError;
17480: }
17481:
17482: // =========================================================================
17483:
17484: /**
17485: * Parse nonterminal xtc.lang.jeannie.JeannieC.CancelStatement.
17486: *
17487: * @param yyStart The index.
17488: * @return The result.
17489: * @throws IOException Signals an I/O error.
17490: */
17491: private Result pCancelStatement(final int yyStart)
17492: throws IOException {
17493: Result yyResult;
17494: int yyBase;
17495: Node yyValue;
17496: ParseError yyError = ParseError.DUMMY;
17497:
17498: // Alternative 1.
17499:
17500: yyResult = pKeyword(yyStart);
17501: yyError = yyResult.select(yyError);
17502: if (yyResult.hasValue("_cancel")) {
17503:
17504: yyResult = pJeannieC$PrimaryIdentifier(yyResult.index);
17505: yyError = yyResult.select(yyError);
17506: if (yyResult.hasValue()) {
17507: final Node v$g$1 = yyResult.semanticValue();
17508:
17509: yyBase = yyResult.index;
17510: yyResult = pSymbol(yyBase);
17511: yyError = yyResult.select(yyError);
17512: if (yyResult.hasValue(";")) {
17513:
17514: yyValue = GNode.create("CancelStatement", v$g$1);
17515: yyValue.setLocation(location(yyStart));
17516:
17517: return yyResult.createValue(yyValue, yyError);
17518: } else {
17519: yyError = yyError.select("\";\" expected", yyBase);
17520: }
17521: }
17522: }
17523:
17524: // Done.
17525: yyError = yyError.select("cancel statement expected", yyStart);
17526: return yyError;
17527: }
17528:
17529: // =========================================================================
17530:
17531: /**
17532: * Parse nonterminal xtc.lang.jeannie.JeannieC.CommitStatement.
17533: *
17534: * @param yyStart The index.
17535: * @return The result.
17536: * @throws IOException Signals an I/O error.
17537: */
17538: private Result pCommitStatement(final int yyStart)
17539: throws IOException {
17540: Result yyResult;
17541: int yyBase;
17542: Node yyValue;
17543: ParseError yyError = ParseError.DUMMY;
17544:
17545: // Alternative 1.
17546:
17547: yyResult = pKeyword(yyStart);
17548: yyError = yyResult.select(yyError);
17549: if (yyResult.hasValue("_commit")) {
17550:
17551: yyResult = pJeannieC$PrimaryIdentifier(yyResult.index);
17552: yyError = yyResult.select(yyError);
17553: if (yyResult.hasValue()) {
17554: final Node v$g$1 = yyResult.semanticValue();
17555:
17556: yyBase = yyResult.index;
17557: yyResult = pSymbol(yyBase);
17558: yyError = yyResult.select(yyError);
17559: if (yyResult.hasValue(";")) {
17560:
17561: yyValue = GNode.create("CommitStatement", v$g$1);
17562: yyValue.setLocation(location(yyStart));
17563:
17564: return yyResult.createValue(yyValue, yyError);
17565: } else {
17566: yyError = yyError.select("\";\" expected", yyBase);
17567: }
17568: }
17569: }
17570:
17571: // Done.
17572: yyError = yyError.select("commit statement expected", yyStart);
17573: return yyError;
17574: }
17575:
17576: // =========================================================================
17577:
17578: /**
17579: * Parse nonterminal xtc.lang.jeannie.JeannieC.JavaInC.
17580: *
17581: * @param yyStart The index.
17582: * @return The result.
17583: * @throws IOException Signals an I/O error.
17584: */
17585: private Result pJavaInC(final int yyStart) throws IOException {
17586: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
17587: if (null == yyColumn.chunk6)
17588: yyColumn.chunk6 = new Chunk6();
17589: if (null == yyColumn.chunk6.fJavaInC)
17590: yyColumn.chunk6.fJavaInC = pJavaInC$1(yyStart);
17591: return yyColumn.chunk6.fJavaInC;
17592: }
17593:
17594: /** Actually parse xtc.lang.jeannie.JeannieC.JavaInC. */
17595: private Result pJavaInC$1(final int yyStart) throws IOException {
17596: int yyC;
17597: int yyIndex;
17598: Result yyResult;
17599: int yyBase;
17600: Void yyValue;
17601: ParseError yyError = ParseError.DUMMY;
17602:
17603: // Alternative 1.
17604:
17605: yyResult = pSymbol(yyStart);
17606: yyError = yyResult.select(yyError);
17607: if (yyResult.hasValue("`")) {
17608:
17609: final int yyChoice1 = yyResult.index;
17610:
17611: // Nested alternative 1.
17612:
17613: yyBase = yyChoice1;
17614: yyResult = pSymbol(yyBase);
17615: yyError = yyResult.select(yyError);
17616: if (yyResult.hasValue(".")) {
17617:
17618: yyBase = yyResult.index;
17619: yyC = character(yyBase);
17620: if ('J' == yyC) {
17621: yyIndex = yyResult.index + 1;
17622:
17623: yyC = character(yyIndex);
17624: if ('a' == yyC) {
17625: yyIndex = yyIndex + 1;
17626:
17627: yyC = character(yyIndex);
17628: if ('v' == yyC) {
17629: yyIndex = yyIndex + 1;
17630:
17631: yyC = character(yyIndex);
17632: if ('a' == yyC) {
17633: yyIndex = yyIndex + 1;
17634:
17635: yyResult = pSpacing(yyIndex);
17636: yyError = yyResult.select(yyError);
17637: if (yyResult.hasValue()) {
17638:
17639: yyValue = null;
17640:
17641: return yyResult.createValue(
17642: yyValue, yyError);
17643: }
17644: } else {
17645: yyError = yyError.select(
17646: "\"Java\" expected", yyBase);
17647: }
17648: } else {
17649: yyError = yyError.select(
17650: "\"Java\" expected", yyBase);
17651: }
17652: } else {
17653: yyError = yyError.select("\"Java\" expected",
17654: yyBase);
17655: }
17656: } else {
17657: yyError = yyError.select("\"Java\" expected",
17658: yyBase);
17659: }
17660: } else {
17661: yyError = yyError.select("\".\" expected", yyBase);
17662: }
17663:
17664: // Nested alternative 2.
17665:
17666: yyValue = null;
17667:
17668: return new SemanticValue(yyValue, yyChoice1, yyError);
17669: }
17670:
17671: // Done.
17672: yyError = yyError.select("java in c expected", yyStart);
17673: return yyError;
17674: }
17675:
17676: // =========================================================================
17677:
17678: /**
17679: * Parse nonterminal xtc.lang.jeannie.JeannieC.CInCBlock.
17680: *
17681: * @param yyStart The index.
17682: * @return The result.
17683: * @throws IOException Signals an I/O error.
17684: */
17685: private Result pCInCBlock(final int yyStart) throws IOException {
17686: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
17687: if (null == yyColumn.chunk6)
17688: yyColumn.chunk6 = new Chunk6();
17689: if (null == yyColumn.chunk6.fCInCBlock)
17690: yyColumn.chunk6.fCInCBlock = pCInCBlock$1(yyStart);
17691: return yyColumn.chunk6.fCInCBlock;
17692: }
17693:
17694: /** Actually parse xtc.lang.jeannie.JeannieC.CInCBlock. */
17695: private Result pCInCBlock$1(final int yyStart) throws IOException {
17696: int yyC;
17697: int yyIndex;
17698: Result yyResult;
17699: int yyBase;
17700: Node yyValue;
17701: ParseError yyError = ParseError.DUMMY;
17702:
17703: // Alternative 1.
17704:
17705: yyResult = pSymbol(yyStart);
17706: yyError = yyResult.select(yyError);
17707: if (yyResult.hasValue("{")) {
17708:
17709: yyResult = pPushScope(yyResult.index);
17710: yyError = yyResult.select(yyError);
17711: if (yyResult.hasValue()) {
17712:
17713: yyResult = pCInCBlock$$Star1(yyResult.index);
17714: yyError = yyResult.select(yyError);
17715: if (yyResult.hasValue()) {
17716: final Pair<Node> v$g$1 = yyResult.semanticValue();
17717:
17718: yyResult = pCInCBlock$$Star2(yyResult.index);
17719: yyError = yyResult.select(yyError);
17720: if (yyResult.hasValue()) {
17721: final Pair<Node> v$g$2 = yyResult
17722: .semanticValue();
17723:
17724: yyResult = pAnnotations(yyResult.index);
17725: yyError = yyResult.select(yyError);
17726: if (yyResult.hasValue()) {
17727: final Node v$g$3 = yyResult.semanticValue();
17728:
17729: yyBase = yyResult.index;
17730: yyC = character(yyBase);
17731: if ('}' == yyC) {
17732: yyIndex = yyResult.index + 1;
17733:
17734: yyResult = pSpacing(yyIndex);
17735: yyError = yyResult.select(yyError);
17736: if (yyResult.hasValue()) {
17737:
17738: yyResult = pPopScope(yyResult.index);
17739: yyError = yyResult.select(yyError);
17740: if (yyResult.hasValue()) {
17741:
17742: yyValue = GNode.create(
17743: "CInCBlock",
17744: v$g$1.size()
17745: + v$g$2.size()
17746: + 1).addAll(
17747: v$g$1).addAll(v$g$2)
17748: .add(v$g$3);
17749: yyValue
17750: .setLocation(location(yyStart));
17751:
17752: return yyResult.createValue(
17753: yyValue, yyError);
17754: }
17755: }
17756: } else {
17757: yyError = yyError.select(
17758: "\"}\" expected", yyBase);
17759: }
17760: }
17761: }
17762: }
17763: }
17764: }
17765:
17766: // Done.
17767: yyError = yyError.select("c in c block expected", yyStart);
17768: return yyError;
17769: }
17770:
17771: // =========================================================================
17772:
17773: /**
17774: * Parse synthetic nonterminal xtc.lang.jeannie.Jeannie.CInCBlock$$Star1.
17775: *
17776: * @param yyStart The index.
17777: * @return The result.
17778: * @throws IOException Signals an I/O error.
17779: */
17780: private Result pCInCBlock$$Star1(final int yyStart)
17781: throws IOException {
17782: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
17783: if (null == yyColumn.chunk6)
17784: yyColumn.chunk6 = new Chunk6();
17785: if (null == yyColumn.chunk6.fCInCBlock$$Star1)
17786: yyColumn.chunk6.fCInCBlock$$Star1 = pCInCBlock$$Star1$1(yyStart);
17787: return yyColumn.chunk6.fCInCBlock$$Star1;
17788: }
17789:
17790: /** Actually parse xtc.lang.jeannie.Jeannie.CInCBlock$$Star1. */
17791: private Result pCInCBlock$$Star1$1(final int yyStart)
17792: throws IOException {
17793: Result yyResult;
17794: Pair<Node> yyValue;
17795: ParseError yyError = ParseError.DUMMY;
17796:
17797: // Alternative 1.
17798:
17799: yyResult = pLocalLabelDeclaration(yyStart);
17800: yyError = yyResult.select(yyError);
17801: if (yyResult.hasValue()) {
17802: final Node v$el$1 = yyResult.semanticValue();
17803:
17804: yyResult = pCInCBlock$$Star1(yyResult.index);
17805: yyError = yyResult.select(yyError);
17806: if (yyResult.hasValue()) {
17807: final Pair<Node> v$2 = yyResult.semanticValue();
17808:
17809: yyValue = new Pair<Node>(v$el$1, v$2);
17810:
17811: return yyResult.createValue(yyValue, yyError);
17812: }
17813: }
17814:
17815: // Alternative 2.
17816:
17817: yyValue = Pair.empty();
17818:
17819: return new SemanticValue(yyValue, yyStart, yyError);
17820: }
17821:
17822: // =========================================================================
17823:
17824: /**
17825: * Parse synthetic nonterminal xtc.lang.jeannie.Jeannie.CInCBlock$$Star2.
17826: *
17827: * @param yyStart The index.
17828: * @return The result.
17829: * @throws IOException Signals an I/O error.
17830: */
17831: private Result pCInCBlock$$Star2(final int yyStart)
17832: throws IOException {
17833: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
17834: if (null == yyColumn.chunk6)
17835: yyColumn.chunk6 = new Chunk6();
17836: if (null == yyColumn.chunk6.fCInCBlock$$Star2)
17837: yyColumn.chunk6.fCInCBlock$$Star2 = pCInCBlock$$Star2$1(yyStart);
17838: return yyColumn.chunk6.fCInCBlock$$Star2;
17839: }
17840:
17841: /** Actually parse xtc.lang.jeannie.Jeannie.CInCBlock$$Star2. */
17842: private Result pCInCBlock$$Star2$1(final int yyStart)
17843: throws IOException {
17844: Result yyResult;
17845: Pair<Node> yyValue;
17846: ParseError yyError = ParseError.DUMMY;
17847:
17848: // Alternative 1.
17849:
17850: yyResult = pJeannieC$DeclarationOrStatement(yyStart);
17851: yyError = yyResult.select(yyError);
17852: if (yyResult.hasValue()) {
17853: final Node v$el$3 = yyResult.semanticValue();
17854:
17855: yyResult = pCInCBlock$$Star2(yyResult.index);
17856: yyError = yyResult.select(yyError);
17857: if (yyResult.hasValue()) {
17858: final Pair<Node> v$4 = yyResult.semanticValue();
17859:
17860: yyValue = new Pair<Node>(v$el$3, v$4);
17861:
17862: return yyResult.createValue(yyValue, yyError);
17863: }
17864: }
17865:
17866: // Alternative 2.
17867:
17868: yyValue = Pair.empty();
17869:
17870: return new SemanticValue(yyValue, yyStart, yyError);
17871: }
17872:
17873: // =========================================================================
17874:
17875: /**
17876: * Parse nonterminal xtc.lang.jeannie.JeannieC.JavaInCBlock.
17877: *
17878: * @param yyStart The index.
17879: * @return The result.
17880: * @throws IOException Signals an I/O error.
17881: */
17882: private Result pJavaInCBlock(final int yyStart) throws IOException {
17883: Result yyResult;
17884: Node yyValue;
17885: ParseError yyError = ParseError.DUMMY;
17886:
17887: // Alternative 1.
17888:
17889: yyResult = pJavaInC(yyStart);
17890: yyError = yyResult.select(yyError);
17891: if (yyResult.hasValue()) {
17892:
17893: yyResult = pJavaInJavaBlock(yyResult.index);
17894: yyError = yyResult.select(yyError);
17895: if (yyResult.hasValue()) {
17896: final Node v$g$1 = yyResult.semanticValue();
17897:
17898: yyValue = GNode.create("JavaInCBlock", v$g$1);
17899: yyValue.setLocation(location(yyStart));
17900:
17901: return yyResult.createValue(yyValue, yyError);
17902: }
17903: }
17904:
17905: // Done.
17906: return yyError;
17907: }
17908:
17909: // =========================================================================
17910:
17911: /**
17912: * Parse nonterminal xtc.lang.jeannie.JeannieC.JavaInCExpression.
17913: *
17914: * @param yyStart The index.
17915: * @return The result.
17916: * @throws IOException Signals an I/O error.
17917: */
17918: private Result pJavaInCExpression(final int yyStart)
17919: throws IOException {
17920: Result yyResult;
17921: Node yyValue;
17922: ParseError yyError = ParseError.DUMMY;
17923:
17924: // Alternative 1.
17925:
17926: yyResult = pJavaInC(yyStart);
17927: yyError = yyResult.select(yyError);
17928: if (yyResult.hasValue()) {
17929:
17930: yyResult = pJeannieJava$UnaryExpression(yyResult.index);
17931: yyError = yyResult.select(yyError);
17932: if (yyResult.hasValue()) {
17933: final Node v$g$1 = yyResult.semanticValue();
17934:
17935: yyValue = GNode.create("JavaInCExpression", v$g$1);
17936: yyValue.setLocation(location(yyStart));
17937:
17938: return yyResult.createValue(yyValue, yyError);
17939: }
17940: }
17941:
17942: // Done.
17943: return yyError;
17944: }
17945:
17946: // =========================================================================
17947:
17948: /**
17949: * Parse nonterminal xtc.lang.jeannie.JeannieC.JavaImports.
17950: *
17951: * @param yyStart The index.
17952: * @return The result.
17953: * @throws IOException Signals an I/O error.
17954: */
17955: private Result pJavaImports(final int yyStart) throws IOException {
17956: Result yyResult;
17957: int yyBase;
17958: int yyRepetition1;
17959: Pair<Node> yyRepValue1;
17960: Node yyValue;
17961: ParseError yyError = ParseError.DUMMY;
17962:
17963: // Alternative 1.
17964:
17965: yyResult = pJavaInC(yyStart);
17966: yyError = yyResult.select(yyError);
17967: if (yyResult.hasValue()) {
17968:
17969: yyBase = yyResult.index;
17970: yyResult = pSymbol(yyBase);
17971: yyError = yyResult.select(yyError);
17972: if (yyResult.hasValue("{")) {
17973:
17974: yyRepetition1 = yyResult.index;
17975: yyRepValue1 = Pair.empty();
17976: while (true) {
17977:
17978: yyResult = pImportDeclaration(yyRepetition1);
17979: yyError = yyResult.select(yyError);
17980: if (yyResult.hasValue()) {
17981: final Node v$el$1 = yyResult.semanticValue();
17982:
17983: yyRepetition1 = yyResult.index;
17984: yyRepValue1 = new Pair<Node>(v$el$1,
17985: yyRepValue1);
17986: continue;
17987: }
17988: break;
17989: }
17990: { // Start scope for v$g$1.
17991: final Pair<Node> v$g$1 = yyRepValue1.reverse();
17992:
17993: yyBase = yyRepetition1;
17994: yyResult = pSymbol(yyBase);
17995: yyError = yyResult.select(yyError);
17996: if (yyResult.hasValue("}")) {
17997:
17998: yyValue = GNode.createFromPair("JavaImports",
17999: v$g$1);
18000: yyValue.setLocation(location(yyStart));
18001:
18002: return yyResult.createValue(yyValue, yyError);
18003: } else {
18004: yyError = yyError.select("\"}\" expected",
18005: yyBase);
18006: }
18007: } // End scope for v$g$1.
18008: } else {
18009: yyError = yyError.select("\"{\" expected", yyBase);
18010: }
18011: }
18012:
18013: // Done.
18014: return yyError;
18015: }
18016:
18017: // =========================================================================
18018:
18019: /**
18020: * Parse nonterminal xtc.lang.jeannie.JeannieC.JavaInCStatement.
18021: *
18022: * @param yyStart The index.
18023: * @return The result.
18024: * @throws IOException Signals an I/O error.
18025: */
18026: private Result pJavaInCStatement(final int yyStart)
18027: throws IOException {
18028: Result yyResult;
18029: Node yyValue;
18030: ParseError yyError = ParseError.DUMMY;
18031:
18032: // Alternative 1.
18033:
18034: yyResult = pJavaInC(yyStart);
18035: yyError = yyResult.select(yyError);
18036: if (yyResult.hasValue()) {
18037:
18038: final int yyChoice1 = yyResult.index;
18039:
18040: // Nested alternative 1.
18041:
18042: yyResult = pTryCatchFinallyStatement(yyChoice1);
18043: yyError = yyResult.select(yyError);
18044: if (yyResult.hasValue()) {
18045: final Node v$g$1 = yyResult.semanticValue();
18046:
18047: yyValue = GNode.create("JavaInCStatement", v$g$1);
18048: yyValue.setLocation(location(yyStart));
18049:
18050: return yyResult.createValue(yyValue, yyError);
18051: }
18052:
18053: // Nested alternative 2.
18054:
18055: yyResult = pSynchronizedStatement(yyChoice1);
18056: yyError = yyResult.select(yyError);
18057: if (yyResult.hasValue()) {
18058: final Node v$g$2 = yyResult.semanticValue();
18059:
18060: yyValue = GNode.create("JavaInCStatement", v$g$2);
18061: yyValue.setLocation(location(yyStart));
18062:
18063: return yyResult.createValue(yyValue, yyError);
18064: }
18065:
18066: // Nested alternative 3.
18067:
18068: yyResult = pThrowStatement(yyChoice1);
18069: yyError = yyResult.select(yyError);
18070: if (yyResult.hasValue()) {
18071: final Node v$g$3 = yyResult.semanticValue();
18072:
18073: yyValue = GNode.create("JavaInCStatement", v$g$3);
18074: yyValue.setLocation(location(yyStart));
18075:
18076: return yyResult.createValue(yyValue, yyError);
18077: }
18078: }
18079:
18080: // Done.
18081: return yyError;
18082: }
18083:
18084: // =========================================================================
18085:
18086: /**
18087: * Parse nonterminal xtc.lang.jeannie.JeannieC.JavaThrows.
18088: *
18089: * @param yyStart The index.
18090: * @return The result.
18091: * @throws IOException Signals an I/O error.
18092: */
18093: private Result pJavaThrows(final int yyStart) throws IOException {
18094: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
18095: if (null == yyColumn.chunk6)
18096: yyColumn.chunk6 = new Chunk6();
18097: if (null == yyColumn.chunk6.fJavaThrows)
18098: yyColumn.chunk6.fJavaThrows = pJavaThrows$1(yyStart);
18099: return yyColumn.chunk6.fJavaThrows;
18100: }
18101:
18102: /** Actually parse xtc.lang.jeannie.JeannieC.JavaThrows. */
18103: private Result pJavaThrows$1(final int yyStart) throws IOException {
18104: Result yyResult;
18105: int yyOption1;
18106: Node yyOpValue1;
18107: Node yyValue;
18108: ParseError yyError = ParseError.DUMMY;
18109:
18110: // Alternative 1.
18111:
18112: yyOption1 = yyStart;
18113: yyOpValue1 = null;
18114:
18115: yyResult = pJavaInC(yyOption1);
18116: yyError = yyResult.select(yyError);
18117: if (yyResult.hasValue()) {
18118:
18119: yyResult = pThrowsClause(yyResult.index);
18120: yyError = yyResult.select(yyError);
18121: if (yyResult.hasValue()) {
18122: final Node v$el$1 = yyResult.semanticValue();
18123:
18124: yyOption1 = yyResult.index;
18125: yyOpValue1 = v$el$1;
18126: }
18127: }
18128: { // Start scope for v$g$1.
18129: final Node v$g$1 = yyOpValue1;
18130:
18131: yyValue = GNode.create("JavaThrows", v$g$1);
18132: yyValue.setLocation(location(yyStart));
18133:
18134: return new SemanticValue(yyValue, yyOption1, yyError);
18135: } // End scope for v$g$1.
18136: }
18137:
18138: // =========================================================================
18139:
18140: /**
18141: * Parse nonterminal xtc.lang.jeannie.JeannieC.JavaType.
18142: *
18143: * @param yyStart The index.
18144: * @return The result.
18145: * @throws IOException Signals an I/O error.
18146: */
18147: private Result pJavaType(final int yyStart) throws IOException {
18148: Result yyResult;
18149: Node yyValue;
18150: ParseError yyError = ParseError.DUMMY;
18151:
18152: // Alternative 1.
18153:
18154: yyResult = pJavaInC(yyStart);
18155: yyError = yyResult.select(yyError);
18156: if (yyResult.hasValue()) {
18157:
18158: yyResult = pJavaType$TypeName(yyResult.index);
18159: yyError = yyResult.select(yyError);
18160: if (yyResult.hasValue()) {
18161: final Node v$g$1 = yyResult.semanticValue();
18162:
18163: yyValue = GNode.create("JavaType", v$g$1);
18164: yyValue.setLocation(location(yyStart));
18165:
18166: return yyResult.createValue(yyValue, yyError);
18167: }
18168: }
18169:
18170: // Done.
18171: return yyError;
18172: }
18173:
18174: // =========================================================================
18175:
18176: /**
18177: * Parse nonterminal xtc.lang.jeannie.JeannieJava.CompilationUnit.
18178: *
18179: * @param yyStart The index.
18180: * @return The result.
18181: * @throws IOException Signals an I/O error.
18182: */
18183: private Result pCompilationUnit(final int yyStart)
18184: throws IOException {
18185: int yyC;
18186: int yyIndex;
18187: Result yyResult;
18188: int yyRepetition1;
18189: Pair<Node> yyRepValue1;
18190: int yyOption1;
18191: Node yyOpValue1;
18192: Node yyValue;
18193: ParseError yyError = ParseError.DUMMY;
18194:
18195: // Alternative 1.
18196:
18197: yyResult = pPrelude(yyStart);
18198: yyError = yyResult.select(yyError);
18199: if (yyResult.hasValue()) {
18200:
18201: yyResult = pCDeclarations(yyResult.index);
18202: yyError = yyResult.select(yyError);
18203: if (yyResult.hasValue()) {
18204: final Node v$g$1 = yyResult.semanticValue();
18205:
18206: yyOption1 = yyResult.index;
18207: yyOpValue1 = null;
18208:
18209: yyResult = pPackageDeclaration(yyOption1);
18210: yyError = yyResult.select(yyError);
18211: if (yyResult.hasValue()) {
18212: final Node v$el$1 = yyResult.semanticValue();
18213:
18214: yyOption1 = yyResult.index;
18215: yyOpValue1 = v$el$1;
18216: }
18217: { // Start scope for v$g$2.
18218: final Node v$g$2 = yyOpValue1;
18219:
18220: yyRepetition1 = yyOption1;
18221: yyRepValue1 = Pair.empty();
18222: while (true) {
18223:
18224: yyResult = pImportDeclaration(yyRepetition1);
18225: yyError = yyResult.select(yyError);
18226: if (yyResult.hasValue()) {
18227: final Node v$el$2 = yyResult
18228: .semanticValue();
18229:
18230: yyRepetition1 = yyResult.index;
18231: yyRepValue1 = new Pair<Node>(v$el$2,
18232: yyRepValue1);
18233: continue;
18234: }
18235: break;
18236: }
18237: { // Start scope for v$g$3.
18238: final Pair<Node> v$g$3 = yyRepValue1.reverse();
18239:
18240: yyRepValue1 = Pair.empty();
18241: while (true) {
18242:
18243: yyResult = pClassOrInterfaceDeclaration(yyRepetition1);
18244: yyError = yyResult.select(yyError);
18245: if (yyResult.hasValue()) {
18246: final Node v$el$3 = yyResult
18247: .semanticValue();
18248:
18249: yyRepetition1 = yyResult.index;
18250: yyRepValue1 = new Pair<Node>(v$el$3,
18251: yyRepValue1);
18252: continue;
18253: }
18254: break;
18255: }
18256: { // Start scope for v$g$4.
18257: final Pair<Node> v$g$4 = yyRepValue1
18258: .reverse();
18259:
18260: yyOption1 = yyRepetition1;
18261:
18262: yyC = character(yyOption1);
18263: if ('\u001a' == yyC) {
18264: yyIndex = yyOption1 + 1;
18265:
18266: yyOption1 = yyIndex;
18267: }
18268:
18269: yyResult = pEndOfFile(yyOption1);
18270: yyError = yyResult.select(yyError);
18271: if (yyResult.hasValue()) {
18272:
18273: yyValue = GNode
18274: .create(
18275: "CompilationUnit",
18276: v$g$3.size()
18277: + v$g$4.size()
18278: + 2).add(v$g$1)
18279: .add(v$g$2).addAll(v$g$3)
18280: .addAll(v$g$4);
18281: yyValue.setLocation(location(yyStart));
18282:
18283: return yyResult.createValue(yyValue,
18284: yyError);
18285: }
18286: } // End scope for v$g$4.
18287: } // End scope for v$g$3.
18288: } // End scope for v$g$2.
18289: }
18290: }
18291:
18292: // Done.
18293: yyError = yyError.select("compilation unit expected", yyStart);
18294: return yyError;
18295: }
18296:
18297: // =========================================================================
18298:
18299: /**
18300: * Parse nonterminal xtc.lang.jeannie.JeannieJava.PackageDeclaration.
18301: *
18302: * @param yyStart The index.
18303: * @return The result.
18304: * @throws IOException Signals an I/O error.
18305: */
18306: private Result pPackageDeclaration(final int yyStart)
18307: throws IOException {
18308: Result yyResult;
18309: int yyBase;
18310: Node yyValue;
18311: ParseError yyError = ParseError.DUMMY;
18312:
18313: // Alternative <Declaration>.
18314:
18315: yyResult = pJavaIdentifier$Word(yyStart);
18316: yyError = yyResult.select(yyError);
18317: if (yyResult.hasValue("package")) {
18318:
18319: yyResult = pQualifiedIdentifier(yyResult.index);
18320: yyError = yyResult.select(yyError);
18321: if (yyResult.hasValue()) {
18322: final Node v$g$2 = yyResult.semanticValue();
18323:
18324: yyBase = yyResult.index;
18325: yyResult = pSymbol(yyBase);
18326: yyError = yyResult.select(yyError);
18327: if (yyResult.hasValue(";")) {
18328:
18329: yyValue = GNode.create("PackageDeclaration", null,
18330: v$g$2);
18331: yyValue.setLocation(location(yyStart));
18332:
18333: return yyResult.createValue(yyValue, yyError);
18334: } else {
18335: yyError = yyError.select("\";\" expected", yyBase);
18336: }
18337: }
18338: }
18339:
18340: // Done.
18341: yyError = yyError.select("package declaration expected",
18342: yyStart);
18343: return yyError;
18344: }
18345:
18346: // =========================================================================
18347:
18348: /**
18349: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ImportDeclaration.
18350: *
18351: * @param yyStart The index.
18352: * @return The result.
18353: * @throws IOException Signals an I/O error.
18354: */
18355: private Result pImportDeclaration(final int yyStart)
18356: throws IOException {
18357: Result yyResult;
18358: int yyBase;
18359: int yyOption1;
18360: String yyOpValue1;
18361: Node yyValue;
18362: ParseError yyError = ParseError.DUMMY;
18363:
18364: // Alternative <Declaration>.
18365:
18366: yyResult = pJavaIdentifier$Word(yyStart);
18367: yyError = yyResult.select(yyError);
18368: if (yyResult.hasValue("import")) {
18369:
18370: yyResult = pQualifiedIdentifier(yyResult.index);
18371: yyError = yyResult.select(yyError);
18372: if (yyResult.hasValue()) {
18373: final Node v$g$2 = yyResult.semanticValue();
18374:
18375: yyOption1 = yyResult.index;
18376: yyOpValue1 = null;
18377:
18378: yyResult = pDotStarTail(yyOption1);
18379: yyError = yyResult.select(yyError);
18380: if (yyResult.hasValue()) {
18381: final String v$el$1 = yyResult.semanticValue();
18382:
18383: yyOption1 = yyResult.index;
18384: yyOpValue1 = v$el$1;
18385: }
18386: { // Start scope for v$g$3.
18387: final String v$g$3 = yyOpValue1;
18388:
18389: yyBase = yyOption1;
18390: yyResult = pSymbol(yyBase);
18391: yyError = yyResult.select(yyError);
18392: if (yyResult.hasValue(";")) {
18393:
18394: yyValue = GNode.create("ImportDeclaration",
18395: null, v$g$2, v$g$3);
18396: yyValue.setLocation(location(yyStart));
18397:
18398: return yyResult.createValue(yyValue, yyError);
18399: } else {
18400: yyError = yyError.select("\";\" expected",
18401: yyBase);
18402: }
18403: } // End scope for v$g$3.
18404: }
18405: }
18406:
18407: // Done.
18408: yyError = yyError
18409: .select("import declaration expected", yyStart);
18410: return yyError;
18411: }
18412:
18413: // =========================================================================
18414:
18415: /**
18416: * Parse nonterminal xtc.lang.jeannie.JeannieJava.DotStarTail.
18417: *
18418: * @param yyStart The index.
18419: * @return The result.
18420: * @throws IOException Signals an I/O error.
18421: */
18422: private Result pDotStarTail(final int yyStart) throws IOException {
18423: Result yyResult;
18424: int yyBase;
18425: String yyValue;
18426: ParseError yyError = ParseError.DUMMY;
18427:
18428: // Alternative 1.
18429:
18430: yyResult = pSymbol(yyStart);
18431: yyError = yyResult.select(yyError);
18432: if (yyResult.hasValue(".")) {
18433:
18434: yyBase = yyResult.index;
18435: yyResult = pSymbol(yyBase);
18436: yyError = yyResult.select(yyError);
18437: if (yyResult.hasValue("*")) {
18438: yyValue = "*";
18439:
18440: return yyResult.createValue(yyValue, yyError);
18441: } else {
18442: yyError = yyError.select("\"*\" expected", yyBase);
18443: }
18444: }
18445:
18446: // Done.
18447: yyError = yyError.select("dot star tail expected", yyStart);
18448: return yyError;
18449: }
18450:
18451: // =========================================================================
18452:
18453: /**
18454: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Modifiers.
18455: *
18456: * @param yyStart The index.
18457: * @return The result.
18458: * @throws IOException Signals an I/O error.
18459: */
18460: private Result pModifiers(final int yyStart) throws IOException {
18461: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
18462: if (null == yyColumn.chunk7)
18463: yyColumn.chunk7 = new Chunk7();
18464: if (null == yyColumn.chunk7.fModifiers)
18465: yyColumn.chunk7.fModifiers = pModifiers$1(yyStart);
18466: return yyColumn.chunk7.fModifiers;
18467: }
18468:
18469: /** Actually parse xtc.lang.jeannie.JeannieJava.Modifiers. */
18470: private Result pModifiers$1(final int yyStart) throws IOException {
18471: Result yyResult;
18472: Node yyValue;
18473: ParseError yyError = ParseError.DUMMY;
18474:
18475: // Alternative 1.
18476:
18477: yyResult = pModifierList(yyStart);
18478: yyError = yyResult.select(yyError);
18479: if (yyResult.hasValue()) {
18480: final Pair<Node> v$g$1 = yyResult.semanticValue();
18481:
18482: yyValue = GNode.createFromPair("Modifiers", v$g$1);
18483: yyValue.setLocation(location(yyStart));
18484:
18485: return yyResult.createValue(yyValue, yyError);
18486: }
18487:
18488: // Done.
18489: return yyError;
18490: }
18491:
18492: // =========================================================================
18493:
18494: /**
18495: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ModifierList.
18496: *
18497: * @param yyStart The index.
18498: * @return The result.
18499: * @throws IOException Signals an I/O error.
18500: */
18501: private Result pModifierList(final int yyStart) throws IOException {
18502: Result yyResult;
18503: int yyRepetition1;
18504: Pair<Node> yyRepValue1;
18505: Pair<Node> yyValue;
18506: ParseError yyError = ParseError.DUMMY;
18507:
18508: // Alternative 1.
18509:
18510: yyRepetition1 = yyStart;
18511: yyRepValue1 = Pair.empty();
18512: while (true) {
18513:
18514: yyResult = pModifier(yyRepetition1);
18515: yyError = yyResult.select(yyError);
18516: if (yyResult.hasValue()) {
18517: final Node v$el$1 = yyResult.semanticValue();
18518:
18519: yyRepetition1 = yyResult.index;
18520: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
18521: continue;
18522: }
18523: break;
18524: }
18525: { // Start scope for yyValue.
18526: yyValue = yyRepValue1.reverse();
18527:
18528: return new SemanticValue(yyValue, yyRepetition1, yyError);
18529: } // End scope for yyValue.
18530: }
18531:
18532: // =========================================================================
18533:
18534: /**
18535: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Modifier.
18536: *
18537: * @param yyStart The index.
18538: * @return The result.
18539: * @throws IOException Signals an I/O error.
18540: */
18541: private Result pModifier(final int yyStart) throws IOException {
18542: Result yyResult;
18543: Node yyValue;
18544: ParseError yyError = ParseError.DUMMY;
18545:
18546: // Alternative <Public>.
18547:
18548: yyResult = pJavaIdentifier$Word(yyStart);
18549: yyError = yyResult.select(yyError);
18550: if (yyResult.hasValue("public")) {
18551: final String v$g$1 = "public";
18552:
18553: yyValue = GNode.create("Modifier", v$g$1);
18554: yyValue.setLocation(location(yyStart));
18555:
18556: return yyResult.createValue(yyValue, yyError);
18557: }
18558:
18559: // Alternative <Protected>.
18560:
18561: yyResult = pJavaIdentifier$Word(yyStart);
18562: yyError = yyResult.select(yyError);
18563: if (yyResult.hasValue("protected")) {
18564: final String v$g$2 = "protected";
18565:
18566: yyValue = GNode.create("Modifier", v$g$2);
18567: yyValue.setLocation(location(yyStart));
18568:
18569: return yyResult.createValue(yyValue, yyError);
18570: }
18571:
18572: // Alternative <Private>.
18573:
18574: yyResult = pJavaIdentifier$Word(yyStart);
18575: yyError = yyResult.select(yyError);
18576: if (yyResult.hasValue("private")) {
18577: final String v$g$3 = "private";
18578:
18579: yyValue = GNode.create("Modifier", v$g$3);
18580: yyValue.setLocation(location(yyStart));
18581:
18582: return yyResult.createValue(yyValue, yyError);
18583: }
18584:
18585: // Alternative <Static>.
18586:
18587: yyResult = pJavaIdentifier$Word(yyStart);
18588: yyError = yyResult.select(yyError);
18589: if (yyResult.hasValue("static")) {
18590: final String v$g$4 = "static";
18591:
18592: yyValue = GNode.create("Modifier", v$g$4);
18593: yyValue.setLocation(location(yyStart));
18594:
18595: return yyResult.createValue(yyValue, yyError);
18596: }
18597:
18598: // Alternative <Abstract>.
18599:
18600: yyResult = pJavaIdentifier$Word(yyStart);
18601: yyError = yyResult.select(yyError);
18602: if (yyResult.hasValue("abstract")) {
18603: final String v$g$5 = "abstract";
18604:
18605: yyValue = GNode.create("Modifier", v$g$5);
18606: yyValue.setLocation(location(yyStart));
18607:
18608: return yyResult.createValue(yyValue, yyError);
18609: }
18610:
18611: // Alternative <Final>.
18612:
18613: yyResult = pJavaIdentifier$Word(yyStart);
18614: yyError = yyResult.select(yyError);
18615: if (yyResult.hasValue("final")) {
18616: final String v$g$6 = "final";
18617:
18618: yyValue = GNode.create("Modifier", v$g$6);
18619: yyValue.setLocation(location(yyStart));
18620:
18621: return yyResult.createValue(yyValue, yyError);
18622: }
18623:
18624: // Alternative <Native>.
18625:
18626: yyResult = pJavaIdentifier$Word(yyStart);
18627: yyError = yyResult.select(yyError);
18628: if (yyResult.hasValue("native")) {
18629: final String v$g$7 = "native";
18630:
18631: yyValue = GNode.create("Modifier", v$g$7);
18632: yyValue.setLocation(location(yyStart));
18633:
18634: return yyResult.createValue(yyValue, yyError);
18635: }
18636:
18637: // Alternative <Synchronized>.
18638:
18639: yyResult = pJavaIdentifier$Word(yyStart);
18640: yyError = yyResult.select(yyError);
18641: if (yyResult.hasValue("synchronized")) {
18642: final String v$g$8 = "synchronized";
18643:
18644: yyValue = GNode.create("Modifier", v$g$8);
18645: yyValue.setLocation(location(yyStart));
18646:
18647: return yyResult.createValue(yyValue, yyError);
18648: }
18649:
18650: // Alternative <Transient>.
18651:
18652: yyResult = pJavaIdentifier$Word(yyStart);
18653: yyError = yyResult.select(yyError);
18654: if (yyResult.hasValue("transient")) {
18655: final String v$g$9 = "transient";
18656:
18657: yyValue = GNode.create("Modifier", v$g$9);
18658: yyValue.setLocation(location(yyStart));
18659:
18660: return yyResult.createValue(yyValue, yyError);
18661: }
18662:
18663: // Alternative <Volatile>.
18664:
18665: yyResult = pJavaIdentifier$Word(yyStart);
18666: yyError = yyResult.select(yyError);
18667: if (yyResult.hasValue("volatile")) {
18668: final String v$g$10 = "volatile";
18669:
18670: yyValue = GNode.create("Modifier", v$g$10);
18671: yyValue.setLocation(location(yyStart));
18672:
18673: return yyResult.createValue(yyValue, yyError);
18674: }
18675:
18676: // Alternative <Strictfp>.
18677:
18678: yyResult = pJavaIdentifier$Word(yyStart);
18679: yyError = yyResult.select(yyError);
18680: if (yyResult.hasValue("strictfp")) {
18681: final String v$g$11 = "strictfp";
18682:
18683: yyValue = GNode.create("Modifier", v$g$11);
18684: yyValue.setLocation(location(yyStart));
18685:
18686: return yyResult.createValue(yyValue, yyError);
18687: }
18688:
18689: // Done.
18690: yyError = yyError.select("modifier expected", yyStart);
18691: return yyError;
18692: }
18693:
18694: // =========================================================================
18695:
18696: /**
18697: * Parse nonterminal xtc.lang.jeannie.JeannieJava.FormalParameter.
18698: *
18699: * @param yyStart The index.
18700: * @return The result.
18701: * @throws IOException Signals an I/O error.
18702: */
18703: private Result pFormalParameter(final int yyStart)
18704: throws IOException {
18705: Result yyResult;
18706: int yyOption1;
18707: Node yyOpValue1;
18708: Node yyValue;
18709: ParseError yyError = ParseError.DUMMY;
18710:
18711: // Alternative <Parameter>.
18712:
18713: yyResult = pVariableModifiers(yyStart);
18714: yyError = yyResult.select(yyError);
18715: if (yyResult.hasValue()) {
18716: final Node v$g$1 = yyResult.semanticValue();
18717:
18718: yyResult = pType(yyResult.index);
18719: yyError = yyResult.select(yyError);
18720: if (yyResult.hasValue()) {
18721: final Node v$g$2 = yyResult.semanticValue();
18722:
18723: yyResult = pJavaIdentifier$Identifier(yyResult.index);
18724: yyError = yyResult.select(yyError);
18725: if (yyResult.hasValue()) {
18726: final String v$g$4 = yyResult.semanticValue();
18727:
18728: yyOption1 = yyResult.index;
18729: yyOpValue1 = null;
18730:
18731: yyResult = pDimensions(yyOption1);
18732: yyError = yyResult.select(yyError);
18733: if (yyResult.hasValue()) {
18734: final Node v$el$1 = yyResult.semanticValue();
18735:
18736: yyOption1 = yyResult.index;
18737: yyOpValue1 = v$el$1;
18738: }
18739: { // Start scope for v$g$5.
18740: final Node v$g$5 = yyOpValue1;
18741:
18742: yyValue = GNode.create("FormalParameter",
18743: v$g$1, v$g$2, null, v$g$4, v$g$5);
18744: yyValue.setLocation(location(yyStart));
18745:
18746: return new SemanticValue(yyValue, yyOption1,
18747: yyError);
18748: } // End scope for v$g$5.
18749: }
18750: }
18751: }
18752:
18753: // Done.
18754: return yyError;
18755: }
18756:
18757: // =========================================================================
18758:
18759: /**
18760: * Parse nonterminal xtc.lang.jeannie.JeannieJava.VariableModifiers.
18761: *
18762: * @param yyStart The index.
18763: * @return The result.
18764: * @throws IOException Signals an I/O error.
18765: */
18766: private Result pVariableModifiers(final int yyStart)
18767: throws IOException {
18768: Result yyResult;
18769: Node yyValue;
18770: ParseError yyError = ParseError.DUMMY;
18771:
18772: // Alternative <Final>.
18773:
18774: yyResult = pFinalModifier(yyStart);
18775: yyError = yyResult.select(yyError);
18776: if (yyResult.hasValue()) {
18777: final Node v$g$1 = yyResult.semanticValue();
18778:
18779: yyValue = GNode.create("Modifiers", v$g$1);
18780: yyValue.setLocation(location(yyStart));
18781:
18782: return yyResult.createValue(yyValue, yyError);
18783: }
18784:
18785: // Alternative <Nonfinal>.
18786:
18787: yyValue = GNode.create("Modifiers", false);
18788: yyValue.setLocation(location(yyStart));
18789:
18790: return new SemanticValue(yyValue, yyStart, yyError);
18791: }
18792:
18793: // =========================================================================
18794:
18795: /**
18796: * Parse nonterminal xtc.lang.jeannie.JeannieJava.FinalModifier.
18797: *
18798: * @param yyStart The index.
18799: * @return The result.
18800: * @throws IOException Signals an I/O error.
18801: */
18802: private Result pFinalModifier(final int yyStart) throws IOException {
18803: Result yyResult;
18804: Node yyValue;
18805: ParseError yyError = ParseError.DUMMY;
18806:
18807: // Alternative 1.
18808:
18809: yyResult = pJavaIdentifier$Word(yyStart);
18810: yyError = yyResult.select(yyError);
18811: if (yyResult.hasValue("final")) {
18812: final String v$g$1 = "final";
18813:
18814: yyValue = GNode.create("Modifier", v$g$1);
18815: yyValue.setLocation(location(yyStart));
18816:
18817: return yyResult.createValue(yyValue, yyError);
18818: }
18819:
18820: // Done.
18821: yyError = yyError.select("final modifier expected", yyStart);
18822: return yyError;
18823: }
18824:
18825: // =========================================================================
18826:
18827: /**
18828: * Parse nonterminal xtc.lang.jeannie.JeannieJava.FormalParameters.
18829: *
18830: * @param yyStart The index.
18831: * @return The result.
18832: * @throws IOException Signals an I/O error.
18833: */
18834: private Result pFormalParameters(final int yyStart)
18835: throws IOException {
18836: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
18837: if (null == yyColumn.chunk7)
18838: yyColumn.chunk7 = new Chunk7();
18839: if (null == yyColumn.chunk7.fFormalParameters)
18840: yyColumn.chunk7.fFormalParameters = pFormalParameters$1(yyStart);
18841: return yyColumn.chunk7.fFormalParameters;
18842: }
18843:
18844: /** Actually parse xtc.lang.jeannie.JeannieJava.FormalParameters. */
18845: private Result pFormalParameters$1(final int yyStart)
18846: throws IOException {
18847: Result yyResult;
18848: int yyBase;
18849: Node yyValue;
18850: ParseError yyError = ParseError.DUMMY;
18851:
18852: // Alternative 1.
18853:
18854: yyResult = pSymbol(yyStart);
18855: yyError = yyResult.select(yyError);
18856: if (yyResult.hasValue("(")) {
18857:
18858: final int yyChoice1 = yyResult.index;
18859:
18860: // Nested alternative 1.
18861:
18862: yyResult = pFormalParameter(yyChoice1);
18863: yyError = yyResult.select(yyError);
18864: if (yyResult.hasValue()) {
18865: final Node v$g$1 = yyResult.semanticValue();
18866:
18867: yyResult = pFormalParameters$$Star1(yyResult.index);
18868: yyError = yyResult.select(yyError);
18869: if (yyResult.hasValue()) {
18870: final Pair<Node> v$g$2 = yyResult.semanticValue();
18871:
18872: yyBase = yyResult.index;
18873: yyResult = pSymbol(yyBase);
18874: yyError = yyResult.select(yyError);
18875: if (yyResult.hasValue(")")) {
18876:
18877: yyValue = GNode.createFromPair(
18878: "FormalParameters", v$g$1, v$g$2);
18879: yyValue.setLocation(location(yyStart));
18880:
18881: return yyResult.createValue(yyValue, yyError);
18882: } else {
18883: yyError = yyError.select("\")\" expected",
18884: yyBase);
18885: }
18886: }
18887: }
18888:
18889: // Nested alternative 2.
18890:
18891: yyBase = yyChoice1;
18892: yyResult = pSymbol(yyBase);
18893: yyError = yyResult.select(yyError);
18894: if (yyResult.hasValue(")")) {
18895:
18896: yyValue = GNode.create("FormalParameters", false);
18897: yyValue.setLocation(location(yyStart));
18898:
18899: return yyResult.createValue(yyValue, yyError);
18900: } else {
18901: yyError = yyError.select("\")\" expected", yyBase);
18902: }
18903: }
18904:
18905: // Done.
18906: yyError = yyError.select("formal parameters expected", yyStart);
18907: return yyError;
18908: }
18909:
18910: // =========================================================================
18911:
18912: /**
18913: * Parse synthetic nonterminal
18914: * xtc.lang.jeannie.Jeannie.FormalParameters$$Star1.
18915: *
18916: * @param yyStart The index.
18917: * @return The result.
18918: * @throws IOException Signals an I/O error.
18919: */
18920: private Result pFormalParameters$$Star1(final int yyStart)
18921: throws IOException {
18922:
18923: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
18924: if (null == yyColumn.chunk7)
18925: yyColumn.chunk7 = new Chunk7();
18926: if (null == yyColumn.chunk7.fFormalParameters$$Star1)
18927: yyColumn.chunk7.fFormalParameters$$Star1 = pFormalParameters$$Star1$1(yyStart);
18928: return yyColumn.chunk7.fFormalParameters$$Star1;
18929: }
18930:
18931: /** Actually parse xtc.lang.jeannie.Jeannie.FormalParameters$$Star1. */
18932: private Result pFormalParameters$$Star1$1(final int yyStart)
18933: throws IOException {
18934:
18935: Result yyResult;
18936: Pair<Node> yyValue;
18937: ParseError yyError = ParseError.DUMMY;
18938:
18939: // Alternative 1.
18940:
18941: yyResult = pSymbol(yyStart);
18942: yyError = yyResult.select(yyError);
18943: if (yyResult.hasValue(",")) {
18944:
18945: yyResult = pFormalParameter(yyResult.index);
18946: yyError = yyResult.select(yyError);
18947: if (yyResult.hasValue()) {
18948: final Node v$el$1 = yyResult.semanticValue();
18949:
18950: yyResult = pFormalParameters$$Star1(yyResult.index);
18951: yyError = yyResult.select(yyError);
18952: if (yyResult.hasValue()) {
18953: final Pair<Node> v$2 = yyResult.semanticValue();
18954:
18955: yyValue = new Pair<Node>(v$el$1, v$2);
18956:
18957: return yyResult.createValue(yyValue, yyError);
18958: }
18959: }
18960: }
18961:
18962: // Alternative 2.
18963:
18964: yyValue = Pair.empty();
18965:
18966: return new SemanticValue(yyValue, yyStart, yyError);
18967: }
18968:
18969: // =========================================================================
18970:
18971: /**
18972: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Declarator.
18973: *
18974: * @param yyStart The index.
18975: * @return The result.
18976: * @throws IOException Signals an I/O error.
18977: */
18978: private Result pJeannieJava$Declarator(final int yyStart)
18979: throws IOException {
18980:
18981: Result yyResult;
18982: int yyBase;
18983: int yyOption1;
18984: Node yyOpValue1;
18985: Node yyValue;
18986: ParseError yyError = ParseError.DUMMY;
18987:
18988: // Alternative <Declarator>.
18989:
18990: yyResult = pJavaIdentifier$Identifier(yyStart);
18991: yyError = yyResult.select(yyError);
18992: if (yyResult.hasValue()) {
18993: final String v$g$1 = yyResult.semanticValue();
18994:
18995: yyOption1 = yyResult.index;
18996: yyOpValue1 = null;
18997:
18998: yyResult = pDimensions(yyOption1);
18999: yyError = yyResult.select(yyError);
19000: if (yyResult.hasValue()) {
19001: final Node v$el$1 = yyResult.semanticValue();
19002:
19003: yyOption1 = yyResult.index;
19004: yyOpValue1 = v$el$1;
19005: }
19006: { // Start scope for v$g$2.
19007: final Node v$g$2 = yyOpValue1;
19008:
19009: yyOpValue1 = null;
19010:
19011: yyBase = yyOption1;
19012: yyResult = pSymbol(yyBase);
19013: yyError = yyResult.select(yyError);
19014: if (yyResult.hasValue("=")) {
19015:
19016: yyResult = pVariableInitializer(yyResult.index);
19017: yyError = yyResult.select(yyError);
19018: if (yyResult.hasValue()) {
19019: final Node v$el$2 = yyResult.semanticValue();
19020:
19021: yyOption1 = yyResult.index;
19022: yyOpValue1 = v$el$2;
19023: }
19024: } else {
19025: yyError = yyError.select("\"=\" expected", yyBase);
19026: }
19027: { // Start scope for v$g$3.
19028: final Node v$g$3 = yyOpValue1;
19029:
19030: yyValue = GNode.create("Declarator", v$g$1, v$g$2,
19031: v$g$3);
19032: yyValue.setLocation(location(yyStart));
19033:
19034: return new SemanticValue(yyValue, yyOption1,
19035: yyError);
19036: } // End scope for v$g$3.
19037: } // End scope for v$g$2.
19038: }
19039:
19040: // Done.
19041: return yyError;
19042: }
19043:
19044: // =========================================================================
19045:
19046: /**
19047: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Declarators.
19048: *
19049: * @param yyStart The index.
19050: * @return The result.
19051: * @throws IOException Signals an I/O error.
19052: */
19053: private Result pDeclarators(final int yyStart) throws IOException {
19054: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
19055: if (null == yyColumn.chunk7)
19056: yyColumn.chunk7 = new Chunk7();
19057: if (null == yyColumn.chunk7.fDeclarators)
19058: yyColumn.chunk7.fDeclarators = pDeclarators$1(yyStart);
19059: return yyColumn.chunk7.fDeclarators;
19060: }
19061:
19062: /** Actually parse xtc.lang.jeannie.JeannieJava.Declarators. */
19063: private Result pDeclarators$1(final int yyStart) throws IOException {
19064: Result yyResult;
19065: Node yyValue;
19066: ParseError yyError = ParseError.DUMMY;
19067:
19068: // Alternative 1.
19069:
19070: yyResult = pJeannieJava$Declarator(yyStart);
19071: yyError = yyResult.select(yyError);
19072: if (yyResult.hasValue()) {
19073: final Node v$g$1 = yyResult.semanticValue();
19074:
19075: yyResult = pDeclarators$$Star1(yyResult.index);
19076: yyError = yyResult.select(yyError);
19077: if (yyResult.hasValue()) {
19078: final Pair<Node> v$g$2 = yyResult.semanticValue();
19079:
19080: yyValue = GNode.createFromPair("Declarators", v$g$1,
19081: v$g$2);
19082: yyValue.setLocation(location(yyStart));
19083:
19084: return yyResult.createValue(yyValue, yyError);
19085: }
19086: }
19087:
19088: // Done.
19089: return yyError;
19090: }
19091:
19092: // =========================================================================
19093:
19094: /**
19095: * Parse synthetic nonterminal xtc.lang.jeannie.Jeannie.Declarators$$Star1.
19096: *
19097: * @param yyStart The index.
19098: * @return The result.
19099: * @throws IOException Signals an I/O error.
19100: */
19101: private Result pDeclarators$$Star1(final int yyStart)
19102: throws IOException {
19103: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
19104: if (null == yyColumn.chunk7)
19105: yyColumn.chunk7 = new Chunk7();
19106: if (null == yyColumn.chunk7.fDeclarators$$Star1)
19107: yyColumn.chunk7.fDeclarators$$Star1 = pDeclarators$$Star1$1(yyStart);
19108: return yyColumn.chunk7.fDeclarators$$Star1;
19109: }
19110:
19111: /** Actually parse xtc.lang.jeannie.Jeannie.Declarators$$Star1. */
19112: private Result pDeclarators$$Star1$1(final int yyStart)
19113: throws IOException {
19114: Result yyResult;
19115: Pair<Node> yyValue;
19116: ParseError yyError = ParseError.DUMMY;
19117:
19118: // Alternative 1.
19119:
19120: yyResult = pSymbol(yyStart);
19121: yyError = yyResult.select(yyError);
19122: if (yyResult.hasValue(",")) {
19123:
19124: yyResult = pJeannieJava$Declarator(yyResult.index);
19125: yyError = yyResult.select(yyError);
19126: if (yyResult.hasValue()) {
19127: final Node v$el$1 = yyResult.semanticValue();
19128:
19129: yyResult = pDeclarators$$Star1(yyResult.index);
19130: yyError = yyResult.select(yyError);
19131: if (yyResult.hasValue()) {
19132: final Pair<Node> v$2 = yyResult.semanticValue();
19133:
19134: yyValue = new Pair<Node>(v$el$1, v$2);
19135:
19136: return yyResult.createValue(yyValue, yyError);
19137: }
19138: }
19139: }
19140:
19141: // Alternative 2.
19142:
19143: yyValue = Pair.empty();
19144:
19145: return new SemanticValue(yyValue, yyStart, yyError);
19146: }
19147:
19148: // =========================================================================
19149:
19150: /**
19151: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ClassBody.
19152: *
19153: * @param yyStart The index.
19154: * @return The result.
19155: * @throws IOException Signals an I/O error.
19156: */
19157: private Result pClassBody(final int yyStart) throws IOException {
19158: Result yyResult;
19159: int yyBase;
19160: int yyRepetition1;
19161: Pair<Node> yyRepValue1;
19162: Node yyValue;
19163: ParseError yyError = ParseError.DUMMY;
19164:
19165: // Alternative <Body>.
19166:
19167: yyResult = pSymbol(yyStart);
19168: yyError = yyResult.select(yyError);
19169: if (yyResult.hasValue("{")) {
19170:
19171: yyRepetition1 = yyResult.index;
19172: yyRepValue1 = Pair.empty();
19173: while (true) {
19174:
19175: yyResult = pJeannieJava$Declaration(yyRepetition1);
19176: yyError = yyResult.select(yyError);
19177: if (yyResult.hasValue()) {
19178: final Node v$el$1 = yyResult.semanticValue();
19179:
19180: yyRepetition1 = yyResult.index;
19181: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
19182: continue;
19183: }
19184: break;
19185: }
19186: { // Start scope for v$g$1.
19187: final Pair<Node> v$g$1 = yyRepValue1.reverse();
19188:
19189: yyBase = yyRepetition1;
19190: yyResult = pSymbol(yyBase);
19191: yyError = yyResult.select(yyError);
19192: if (yyResult.hasValue("}")) {
19193:
19194: yyValue = GNode.createFromPair("ClassBody", v$g$1);
19195: yyValue.setLocation(location(yyStart));
19196:
19197: return yyResult.createValue(yyValue, yyError);
19198: } else {
19199: yyError = yyError.select("\"}\" expected", yyBase);
19200: }
19201: } // End scope for v$g$1.
19202: }
19203:
19204: // Done.
19205: yyError = yyError.select("class body expected", yyStart);
19206: return yyError;
19207: }
19208:
19209: // =========================================================================
19210:
19211: /**
19212: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Declaration.
19213: *
19214: * @param yyStart The index.
19215: * @return The result.
19216: * @throws IOException Signals an I/O error.
19217: */
19218: private Result pJeannieJava$Declaration(final int yyStart)
19219: throws IOException {
19220:
19221: Result yyResult;
19222: int yyBase;
19223: int yyOption1;
19224: Object yyOpValue1;
19225: Node yyValue;
19226: ParseError yyError = ParseError.DUMMY;
19227:
19228: // Alternative 1.
19229:
19230: yyResult = pModifiers(yyStart);
19231: yyError = yyResult.select(yyError);
19232: if (yyResult.hasValue()) {
19233: final Node v$g$1 = yyResult.semanticValue();
19234:
19235: final int yyChoice1 = yyResult.index;
19236:
19237: // Nested alternative 1.
19238:
19239: yyResult = pType(yyChoice1);
19240: yyError = yyResult.select(yyError);
19241: if (yyResult.hasValue()) {
19242: final Node v$g$2 = yyResult.semanticValue();
19243:
19244: yyResult = pDeclarators(yyResult.index);
19245: yyError = yyResult.select(yyError);
19246: if (yyResult.hasValue()) {
19247: final Node v$g$3 = yyResult.semanticValue();
19248:
19249: yyBase = yyResult.index;
19250: yyResult = pSymbol(yyBase);
19251: yyError = yyResult.select(yyError);
19252: if (yyResult.hasValue(";")) {
19253:
19254: yyValue = GNode.create("FieldDeclaration",
19255: v$g$1, v$g$2, v$g$3);
19256: yyValue.setLocation(location(yyStart));
19257:
19258: return yyResult.createValue(yyValue, yyError);
19259: } else {
19260: yyError = yyError.select("\";\" expected",
19261: yyBase);
19262: }
19263: }
19264: }
19265:
19266: // Nested alternative 2.
19267: { // Start scope for nested choice.
19268:
19269: final int yyChoice2 = yyChoice1;
19270:
19271: // Nested alternative 1.
19272:
19273: yyResult = pResultType(yyChoice2);
19274: yyError = yyResult.select(yyError);
19275: if (yyResult.hasValue()) {
19276: final Node v$g$3 = yyResult.semanticValue();
19277:
19278: yyResult = pJavaIdentifier$Identifier(yyResult.index);
19279: yyError = yyResult.select(yyError);
19280: if (yyResult.hasValue()) {
19281: final String v$g$4 = yyResult.semanticValue();
19282:
19283: yyResult = pFormalParameters(yyResult.index);
19284: yyError = yyResult.select(yyError);
19285: if (yyResult.hasValue()) {
19286: final Node v$g$5 = yyResult.semanticValue();
19287:
19288: yyOption1 = yyResult.index;
19289: yyOpValue1 = null;
19290:
19291: yyResult = pDimensions(yyOption1);
19292: yyError = yyResult.select(yyError);
19293: if (yyResult.hasValue()) {
19294: final Node v$el$1 = yyResult
19295: .semanticValue();
19296:
19297: yyOption1 = yyResult.index;
19298: yyOpValue1 = v$el$1;
19299: }
19300: { // Start scope for v$g$6.
19301: final Node v$g$6 = cast(yyOpValue1);
19302:
19303: yyOpValue1 = null;
19304:
19305: yyResult = pThrowsClause(yyOption1);
19306: yyError = yyResult.select(yyError);
19307: if (yyResult.hasValue()) {
19308: final Node v$el$2 = yyResult
19309: .semanticValue();
19310:
19311: yyOption1 = yyResult.index;
19312: yyOpValue1 = v$el$2;
19313: }
19314: { // Start scope for v$g$7.
19315: final Node v$g$7 = cast(yyOpValue1);
19316:
19317: final int yyChoice3 = yyOption1;
19318:
19319: // Nested alternative 1.
19320:
19321: yyResult = pBlock(yyChoice3);
19322: yyError = yyResult.select(yyError);
19323: if (yyResult.hasValue()) {
19324: final Node v$g$8 = yyResult
19325: .semanticValue();
19326:
19327: yyValue = GNode.create(
19328: "MethodDeclaration",
19329: v$g$1, null, v$g$3,
19330: v$g$4, v$g$5, v$g$6,
19331: v$g$7, v$g$8);
19332: yyValue
19333: .setLocation(location(yyStart));
19334:
19335: return yyResult.createValue(
19336: yyValue, yyError);
19337: }
19338:
19339: // Nested alternative 2.
19340:
19341: yyBase = yyChoice3;
19342: yyResult = pSymbol(yyBase);
19343: yyError = yyResult.select(yyError);
19344: if (yyResult.hasValue(";")) {
19345:
19346: yyValue = GNode.create(
19347: "MethodDeclaration",
19348: v$g$1, null, v$g$3,
19349: v$g$4, v$g$5, v$g$6,
19350: v$g$7, null);
19351: yyValue
19352: .setLocation(location(yyStart));
19353:
19354: return yyResult.createValue(
19355: yyValue, yyError);
19356: } else {
19357: yyError = yyError.select(
19358: "\";\" expected",
19359: yyBase);
19360: }
19361: } // End scope for v$g$7.
19362: } // End scope for v$g$6.
19363: }
19364: }
19365: }
19366:
19367: // Nested alternative 2.
19368:
19369: yyResult = pJavaIdentifier$Identifier(yyChoice2);
19370: yyError = yyResult.select(yyError);
19371: if (yyResult.hasValue()) {
19372: final String v$g$3 = yyResult.semanticValue();
19373:
19374: yyResult = pFormalParameters(yyResult.index);
19375: yyError = yyResult.select(yyError);
19376: if (yyResult.hasValue()) {
19377: final Node v$g$4 = yyResult.semanticValue();
19378:
19379: yyOption1 = yyResult.index;
19380: yyOpValue1 = null;
19381:
19382: yyResult = pThrowsClause(yyOption1);
19383: yyError = yyResult.select(yyError);
19384: if (yyResult.hasValue()) {
19385: final Node v$el$1 = yyResult
19386: .semanticValue();
19387:
19388: yyOption1 = yyResult.index;
19389: yyOpValue1 = v$el$1;
19390: }
19391: { // Start scope for v$g$5.
19392: final Node v$g$5 = cast(yyOpValue1);
19393:
19394: yyResult = pBlock(yyOption1);
19395: yyError = yyResult.select(yyError);
19396: if (yyResult.hasValue()) {
19397: final Node v$g$6 = yyResult
19398: .semanticValue();
19399:
19400: yyValue = GNode.create(
19401: "ConstructorDeclaration",
19402: v$g$1, null, v$g$3, v$g$4,
19403: v$g$5, v$g$6);
19404: yyValue.setLocation(location(yyStart));
19405:
19406: return yyResult.createValue(yyValue,
19407: yyError);
19408: }
19409: } // End scope for v$g$5.
19410: }
19411: }
19412: } // End scope for nested choice.
19413:
19414: // Nested alternative 3.
19415:
19416: yyBase = yyChoice1;
19417: yyResult = pJavaIdentifier$Word(yyBase);
19418: yyError = yyResult.select(yyError);
19419: if (yyResult.hasValue("class")) {
19420:
19421: yyResult = pJavaIdentifier$Identifier(yyResult.index);
19422: yyError = yyResult.select(yyError);
19423: if (yyResult.hasValue()) {
19424: final String v$g$2 = yyResult.semanticValue();
19425:
19426: yyOption1 = yyResult.index;
19427: yyOpValue1 = null;
19428:
19429: yyResult = pExtension(yyOption1);
19430: yyError = yyResult.select(yyError);
19431: if (yyResult.hasValue()) {
19432: final Node v$el$1 = yyResult.semanticValue();
19433:
19434: yyOption1 = yyResult.index;
19435: yyOpValue1 = v$el$1;
19436: }
19437: { // Start scope for v$g$4.
19438: final Node v$g$4 = cast(yyOpValue1);
19439:
19440: yyOpValue1 = null;
19441:
19442: yyResult = pImplementation(yyOption1);
19443: yyError = yyResult.select(yyError);
19444: if (yyResult.hasValue()) {
19445: final Node v$el$2 = yyResult
19446: .semanticValue();
19447:
19448: yyOption1 = yyResult.index;
19449: yyOpValue1 = v$el$2;
19450: }
19451: { // Start scope for v$g$5.
19452: final Node v$g$5 = cast(yyOpValue1);
19453:
19454: yyResult = pClassBody(yyOption1);
19455: yyError = yyResult.select(yyError);
19456: if (yyResult.hasValue()) {
19457: final Node v$g$6 = yyResult
19458: .semanticValue();
19459:
19460: yyValue = GNode.create(
19461: "ClassDeclaration", v$g$1,
19462: v$g$2, null, v$g$4, v$g$5,
19463: v$g$6);
19464: yyValue.setLocation(location(yyStart));
19465:
19466: return yyResult.createValue(yyValue,
19467: yyError);
19468: }
19469: } // End scope for v$g$5.
19470: } // End scope for v$g$4.
19471: }
19472: } else {
19473: yyError = yyError.select("\"class\" expected", yyBase);
19474: }
19475:
19476: // Nested alternative 4.
19477:
19478: yyBase = yyChoice1;
19479: yyResult = pJavaIdentifier$Word(yyBase);
19480: yyError = yyResult.select(yyError);
19481: if (yyResult.hasValue("interface")) {
19482:
19483: yyResult = pJavaIdentifier$Identifier(yyResult.index);
19484: yyError = yyResult.select(yyError);
19485: if (yyResult.hasValue()) {
19486: final String v$g$2 = yyResult.semanticValue();
19487:
19488: yyOption1 = yyResult.index;
19489: yyOpValue1 = null;
19490:
19491: yyResult = pExtension(yyOption1);
19492: yyError = yyResult.select(yyError);
19493: if (yyResult.hasValue()) {
19494: final Node v$el$1 = yyResult.semanticValue();
19495:
19496: yyOption1 = yyResult.index;
19497: yyOpValue1 = v$el$1;
19498: }
19499: { // Start scope for v$g$4.
19500: final Node v$g$4 = cast(yyOpValue1);
19501:
19502: yyResult = pClassBody(yyOption1);
19503: yyError = yyResult.select(yyError);
19504: if (yyResult.hasValue()) {
19505: final Node v$g$5 = yyResult.semanticValue();
19506:
19507: yyValue = GNode.create(
19508: "InterfaceDeclaration", v$g$1,
19509: v$g$2, null, v$g$4, v$g$5);
19510: yyValue.setLocation(location(yyStart));
19511:
19512: return yyResult.createValue(yyValue,
19513: yyError);
19514: }
19515: } // End scope for v$g$4.
19516: }
19517: } else {
19518: yyError = yyError.select("\"interface\" expected",
19519: yyBase);
19520: }
19521: }
19522:
19523: // Alternative 2.
19524:
19525: yyOption1 = yyStart;
19526: yyOpValue1 = null;
19527:
19528: yyBase = yyOption1;
19529: yyResult = pJavaIdentifier$Word(yyBase);
19530: yyError = yyResult.select(yyError);
19531: if (yyResult.hasValue("static")) {
19532: final String v$el$1 = "static";
19533:
19534: yyOption1 = yyResult.index;
19535: yyOpValue1 = v$el$1;
19536: } else {
19537: yyError = yyError.select("\"static\" expected", yyBase);
19538: }
19539: { // Start scope for v$g$1.
19540: final String v$g$1 = cast(yyOpValue1);
19541:
19542: yyResult = pBlock(yyOption1);
19543: yyError = yyResult.select(yyError);
19544: if (yyResult.hasValue()) {
19545: final Node v$g$2 = yyResult.semanticValue();
19546:
19547: yyValue = GNode
19548: .create("BlockDeclaration", v$g$1, v$g$2);
19549: yyValue.setLocation(location(yyStart));
19550:
19551: return yyResult.createValue(yyValue, yyError);
19552: }
19553: } // End scope for v$g$1.
19554:
19555: // Alternative 3.
19556:
19557: yyResult = pSymbol(yyStart);
19558: yyError = yyResult.select(yyError);
19559: if (yyResult.hasValue(";")) {
19560:
19561: yyValue = GNode.create("EmptyDeclaration", false);
19562: yyValue.setLocation(location(yyStart));
19563:
19564: return yyResult.createValue(yyValue, yyError);
19565: }
19566:
19567: // Done.
19568: yyError = yyError.select("declaration expected", yyStart);
19569: return yyError;
19570: }
19571:
19572: // =========================================================================
19573:
19574: /**
19575: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ThrowsClause.
19576: *
19577: * @param yyStart The index.
19578: * @return The result.
19579: * @throws IOException Signals an I/O error.
19580: */
19581: private Result pThrowsClause(final int yyStart) throws IOException {
19582: Result yyResult;
19583: int yyBase;
19584: int yyRepetition1;
19585: Pair<Node> yyRepValue1;
19586: Node yyValue;
19587: ParseError yyError = ParseError.DUMMY;
19588:
19589: // Alternative 1.
19590:
19591: yyResult = pJavaIdentifier$Word(yyStart);
19592: yyError = yyResult.select(yyError);
19593: if (yyResult.hasValue("throws")) {
19594:
19595: yyResult = pQualifiedIdentifier(yyResult.index);
19596: yyError = yyResult.select(yyError);
19597: if (yyResult.hasValue()) {
19598: final Node v$g$1 = yyResult.semanticValue();
19599:
19600: yyRepetition1 = yyResult.index;
19601: yyRepValue1 = Pair.empty();
19602: while (true) {
19603:
19604: yyBase = yyRepetition1;
19605: yyResult = pSymbol(yyBase);
19606: yyError = yyResult.select(yyError);
19607: if (yyResult.hasValue(",")) {
19608:
19609: yyResult = pQualifiedIdentifier(yyResult.index);
19610: yyError = yyResult.select(yyError);
19611: if (yyResult.hasValue()) {
19612: final Node v$el$1 = yyResult
19613: .semanticValue();
19614:
19615: yyRepetition1 = yyResult.index;
19616: yyRepValue1 = new Pair<Node>(v$el$1,
19617: yyRepValue1);
19618: continue;
19619: }
19620: } else {
19621: yyError = yyError.select("\",\" expected",
19622: yyBase);
19623: }
19624: break;
19625: }
19626: { // Start scope for v$g$2.
19627: final Pair<Node> v$g$2 = yyRepValue1.reverse();
19628:
19629: yyValue = GNode.createFromPair("ThrowsClause",
19630: v$g$1, v$g$2);
19631: yyValue.setLocation(location(yyStart));
19632:
19633: return new SemanticValue(yyValue, yyRepetition1,
19634: yyError);
19635: } // End scope for v$g$2.
19636: }
19637: }
19638:
19639: // Done.
19640: yyError = yyError.select("throws clause expected", yyStart);
19641: return yyError;
19642: }
19643:
19644: // =========================================================================
19645:
19646: /**
19647: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Extension.
19648: *
19649: * @param yyStart The index.
19650: * @return The result.
19651: * @throws IOException Signals an I/O error.
19652: */
19653: private Result pExtension(final int yyStart) throws IOException {
19654: Result yyResult;
19655: int yyBase;
19656: int yyRepetition1;
19657: Pair<Node> yyRepValue1;
19658: Node yyValue;
19659: ParseError yyError = ParseError.DUMMY;
19660:
19661: // Alternative 1.
19662:
19663: yyResult = pJavaIdentifier$Word(yyStart);
19664: yyError = yyResult.select(yyError);
19665: if (yyResult.hasValue("extends")) {
19666:
19667: yyResult = pType(yyResult.index);
19668: yyError = yyResult.select(yyError);
19669: if (yyResult.hasValue()) {
19670: final Node v$g$1 = yyResult.semanticValue();
19671:
19672: yyRepetition1 = yyResult.index;
19673: yyRepValue1 = Pair.empty();
19674: while (true) {
19675:
19676: yyBase = yyRepetition1;
19677: yyResult = pSymbol(yyBase);
19678: yyError = yyResult.select(yyError);
19679: if (yyResult.hasValue(",")) {
19680:
19681: yyResult = pType(yyResult.index);
19682: yyError = yyResult.select(yyError);
19683: if (yyResult.hasValue()) {
19684: final Node v$el$1 = yyResult
19685: .semanticValue();
19686:
19687: yyRepetition1 = yyResult.index;
19688: yyRepValue1 = new Pair<Node>(v$el$1,
19689: yyRepValue1);
19690: continue;
19691: }
19692: } else {
19693: yyError = yyError.select("\",\" expected",
19694: yyBase);
19695: }
19696: break;
19697: }
19698: { // Start scope for v$g$2.
19699: final Pair<Node> v$g$2 = yyRepValue1.reverse();
19700:
19701: yyValue = GNode.createFromPair("Extension", v$g$1,
19702: v$g$2);
19703: yyValue.setLocation(location(yyStart));
19704:
19705: return new SemanticValue(yyValue, yyRepetition1,
19706: yyError);
19707: } // End scope for v$g$2.
19708: }
19709: }
19710:
19711: // Done.
19712: yyError = yyError.select("extension expected", yyStart);
19713: return yyError;
19714: }
19715:
19716: // =========================================================================
19717:
19718: /**
19719: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Implementation.
19720: *
19721: * @param yyStart The index.
19722: * @return The result.
19723: * @throws IOException Signals an I/O error.
19724: */
19725: private Result pImplementation(final int yyStart)
19726: throws IOException {
19727: Result yyResult;
19728: int yyBase;
19729: int yyRepetition1;
19730: Pair<Node> yyRepValue1;
19731: Node yyValue;
19732: ParseError yyError = ParseError.DUMMY;
19733:
19734: // Alternative 1.
19735:
19736: yyResult = pJavaIdentifier$Word(yyStart);
19737: yyError = yyResult.select(yyError);
19738: if (yyResult.hasValue("implements")) {
19739:
19740: yyResult = pType(yyResult.index);
19741: yyError = yyResult.select(yyError);
19742: if (yyResult.hasValue()) {
19743: final Node v$g$1 = yyResult.semanticValue();
19744:
19745: yyRepetition1 = yyResult.index;
19746: yyRepValue1 = Pair.empty();
19747: while (true) {
19748:
19749: yyBase = yyRepetition1;
19750: yyResult = pSymbol(yyBase);
19751: yyError = yyResult.select(yyError);
19752: if (yyResult.hasValue(",")) {
19753:
19754: yyResult = pType(yyResult.index);
19755: yyError = yyResult.select(yyError);
19756: if (yyResult.hasValue()) {
19757: final Node v$el$1 = yyResult
19758: .semanticValue();
19759:
19760: yyRepetition1 = yyResult.index;
19761: yyRepValue1 = new Pair<Node>(v$el$1,
19762: yyRepValue1);
19763: continue;
19764: }
19765: } else {
19766: yyError = yyError.select("\",\" expected",
19767: yyBase);
19768: }
19769: break;
19770: }
19771: { // Start scope for v$g$2.
19772: final Pair<Node> v$g$2 = yyRepValue1.reverse();
19773:
19774: yyValue = GNode.createFromPair("Implementation",
19775: v$g$1, v$g$2);
19776: yyValue.setLocation(location(yyStart));
19777:
19778: return new SemanticValue(yyValue, yyRepetition1,
19779: yyError);
19780: } // End scope for v$g$2.
19781: }
19782: }
19783:
19784: // Done.
19785: yyError = yyError.select("implementation expected", yyStart);
19786: return yyError;
19787: }
19788:
19789: // =========================================================================
19790:
19791: /**
19792: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Block.
19793: *
19794: * @param yyStart The index.
19795: * @return The result.
19796: * @throws IOException Signals an I/O error.
19797: */
19798: private Result pBlock(final int yyStart) throws IOException {
19799: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
19800: if (null == yyColumn.chunk7)
19801: yyColumn.chunk7 = new Chunk7();
19802: if (null == yyColumn.chunk7.fBlock)
19803: yyColumn.chunk7.fBlock = pBlock$1(yyStart);
19804: return yyColumn.chunk7.fBlock;
19805: }
19806:
19807: /** Actually parse xtc.lang.jeannie.JeannieJava.Block. */
19808: private Result pBlock$1(final int yyStart) throws IOException {
19809: Result yyResult;
19810: Node yyValue;
19811: ParseError yyError = ParseError.DUMMY;
19812:
19813: // Alternative <JavaBlock>.
19814:
19815: yyResult = pJavaInJavaBlock(yyStart);
19816: yyError = yyResult.select(yyError);
19817: if (yyResult.hasValue()) {
19818: yyValue = yyResult.semanticValue();
19819:
19820: return yyResult.createValue(yyValue, yyError);
19821: }
19822:
19823: // Alternative <CBlock>.
19824:
19825: yyResult = pCInJavaBlock(yyStart);
19826: yyError = yyResult.select(yyError);
19827: if (yyResult.hasValue()) {
19828: yyValue = yyResult.semanticValue();
19829:
19830: return yyResult.createValue(yyValue, yyError);
19831: }
19832:
19833: // Done.
19834: return yyError;
19835: }
19836:
19837: // =========================================================================
19838:
19839: /**
19840: * Parse nonterminal xtc.lang.jeannie.JeannieJava.DeclarationOrStatement.
19841: *
19842: * @param yyStart The index.
19843: * @return The result.
19844: * @throws IOException Signals an I/O error.
19845: */
19846: private Result pJeannieJava$DeclarationOrStatement(final int yyStart)
19847: throws IOException {
19848:
19849: Result yyResult;
19850: Node yyValue;
19851: ParseError yyError = ParseError.DUMMY;
19852:
19853: // Alternative <Declaration>.
19854:
19855: yyResult = pInBlockDeclaration(yyStart);
19856: yyError = yyResult.select(yyError);
19857: if (yyResult.hasValue()) {
19858: yyValue = yyResult.semanticValue();
19859:
19860: return yyResult.createValue(yyValue, yyError);
19861: }
19862:
19863: // Alternative <Statement>.
19864:
19865: yyResult = pJeannieJava$Statement(yyStart);
19866: yyError = yyResult.select(yyError);
19867: if (yyResult.hasValue()) {
19868: yyValue = yyResult.semanticValue();
19869:
19870: return yyResult.createValue(yyValue, yyError);
19871: }
19872:
19873: // Done.
19874: return yyError;
19875: }
19876:
19877: // =========================================================================
19878:
19879: /**
19880: * Parse nonterminal xtc.lang.jeannie.JeannieJava.InBlockDeclaration.
19881: *
19882: * @param yyStart The index.
19883: * @return The result.
19884: * @throws IOException Signals an I/O error.
19885: */
19886: private Result pInBlockDeclaration(final int yyStart)
19887: throws IOException {
19888: Result yyResult;
19889: int yyBase;
19890: int yyOption1;
19891: Node yyOpValue1;
19892: Node yyValue;
19893: ParseError yyError = ParseError.DUMMY;
19894:
19895: // Alternative <Variable>.
19896:
19897: yyResult = pVariableDeclaration(yyStart);
19898: yyError = yyResult.select(yyError);
19899: if (yyResult.hasValue()) {
19900: yyValue = yyResult.semanticValue();
19901:
19902: return yyResult.createValue(yyValue, yyError);
19903: }
19904:
19905: // Alternative 2.
19906:
19907: yyResult = pModifiers(yyStart);
19908: yyError = yyResult.select(yyError);
19909: if (yyResult.hasValue()) {
19910: final Node v$g$1 = yyResult.semanticValue();
19911:
19912: final int yyChoice1 = yyResult.index;
19913:
19914: // Nested alternative 1.
19915:
19916: yyBase = yyChoice1;
19917: yyResult = pJavaIdentifier$Word(yyBase);
19918: yyError = yyResult.select(yyError);
19919: if (yyResult.hasValue("class")) {
19920:
19921: yyResult = pJavaIdentifier$Identifier(yyResult.index);
19922: yyError = yyResult.select(yyError);
19923: if (yyResult.hasValue()) {
19924: final String v$g$2 = yyResult.semanticValue();
19925:
19926: yyOption1 = yyResult.index;
19927: yyOpValue1 = null;
19928:
19929: yyResult = pExtension(yyOption1);
19930: yyError = yyResult.select(yyError);
19931: if (yyResult.hasValue()) {
19932: final Node v$el$1 = yyResult.semanticValue();
19933:
19934: yyOption1 = yyResult.index;
19935: yyOpValue1 = v$el$1;
19936: }
19937: { // Start scope for v$g$4.
19938: final Node v$g$4 = yyOpValue1;
19939:
19940: yyOpValue1 = null;
19941:
19942: yyResult = pImplementation(yyOption1);
19943: yyError = yyResult.select(yyError);
19944: if (yyResult.hasValue()) {
19945: final Node v$el$2 = yyResult
19946: .semanticValue();
19947:
19948: yyOption1 = yyResult.index;
19949: yyOpValue1 = v$el$2;
19950: }
19951: { // Start scope for v$g$5.
19952: final Node v$g$5 = yyOpValue1;
19953:
19954: yyResult = pClassBody(yyOption1);
19955: yyError = yyResult.select(yyError);
19956: if (yyResult.hasValue()) {
19957: final Node v$g$6 = yyResult
19958: .semanticValue();
19959:
19960: yyValue = GNode.create(
19961: "ClassDeclaration", v$g$1,
19962: v$g$2, null, v$g$4, v$g$5,
19963: v$g$6);
19964: yyValue.setLocation(location(yyStart));
19965:
19966: return yyResult.createValue(yyValue,
19967: yyError);
19968: }
19969: } // End scope for v$g$5.
19970: } // End scope for v$g$4.
19971: }
19972: } else {
19973: yyError = yyError.select("\"class\" expected", yyBase);
19974: }
19975:
19976: // Nested alternative 2.
19977:
19978: yyBase = yyChoice1;
19979: yyResult = pJavaIdentifier$Word(yyBase);
19980: yyError = yyResult.select(yyError);
19981: if (yyResult.hasValue("interface")) {
19982:
19983: yyResult = pJavaIdentifier$Identifier(yyResult.index);
19984: yyError = yyResult.select(yyError);
19985: if (yyResult.hasValue()) {
19986: final String v$g$2 = yyResult.semanticValue();
19987:
19988: yyOption1 = yyResult.index;
19989: yyOpValue1 = null;
19990:
19991: yyResult = pExtension(yyOption1);
19992: yyError = yyResult.select(yyError);
19993: if (yyResult.hasValue()) {
19994: final Node v$el$1 = yyResult.semanticValue();
19995:
19996: yyOption1 = yyResult.index;
19997: yyOpValue1 = v$el$1;
19998: }
19999: { // Start scope for v$g$4.
20000: final Node v$g$4 = yyOpValue1;
20001:
20002: yyResult = pClassBody(yyOption1);
20003: yyError = yyResult.select(yyError);
20004: if (yyResult.hasValue()) {
20005: final Node v$g$5 = yyResult.semanticValue();
20006:
20007: yyValue = GNode.create(
20008: "InterfaceDeclaration", v$g$1,
20009: v$g$2, null, v$g$4, v$g$5);
20010: yyValue.setLocation(location(yyStart));
20011:
20012: return yyResult.createValue(yyValue,
20013: yyError);
20014: }
20015: } // End scope for v$g$4.
20016: }
20017: } else {
20018: yyError = yyError.select("\"interface\" expected",
20019: yyBase);
20020: }
20021: }
20022:
20023: // Done.
20024: return yyError;
20025: }
20026:
20027: // =========================================================================
20028:
20029: /**
20030: * Parse nonterminal xtc.lang.jeannie.JeannieJava.VariableDeclaration.
20031: *
20032: * @param yyStart The index.
20033: * @return The result.
20034: * @throws IOException Signals an I/O error.
20035: */
20036: private Result pVariableDeclaration(final int yyStart)
20037: throws IOException {
20038: Result yyResult;
20039: int yyBase;
20040: Node yyValue;
20041: ParseError yyError = ParseError.DUMMY;
20042:
20043: // Alternative <Declaration>.
20044:
20045: yyResult = pVariableModifiers(yyStart);
20046: yyError = yyResult.select(yyError);
20047: if (yyResult.hasValue()) {
20048: final Node v$g$1 = yyResult.semanticValue();
20049:
20050: yyResult = pType(yyResult.index);
20051: yyError = yyResult.select(yyError);
20052: if (yyResult.hasValue()) {
20053: final Node v$g$2 = yyResult.semanticValue();
20054:
20055: yyResult = pDeclarators(yyResult.index);
20056: yyError = yyResult.select(yyError);
20057: if (yyResult.hasValue()) {
20058: final Node v$g$3 = yyResult.semanticValue();
20059:
20060: yyBase = yyResult.index;
20061: yyResult = pSymbol(yyBase);
20062: yyError = yyResult.select(yyError);
20063: if (yyResult.hasValue(";")) {
20064:
20065: yyValue = GNode.create("FieldDeclaration",
20066: v$g$1, v$g$2, v$g$3);
20067: yyValue.setLocation(location(yyStart));
20068:
20069: return yyResult.createValue(yyValue, yyError);
20070: } else {
20071: yyError = yyError.select("\";\" expected",
20072: yyBase);
20073: }
20074: }
20075: }
20076: }
20077:
20078: // Done.
20079: return yyError;
20080: }
20081:
20082: // =========================================================================
20083:
20084: /**
20085: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Statement.
20086: *
20087: * @param yyStart The index.
20088: * @return The result.
20089: * @throws IOException Signals an I/O error.
20090: */
20091: private Result pJeannieJava$Statement(final int yyStart)
20092: throws IOException {
20093:
20094: Result yyResult;
20095: int yyBase;
20096: int yyRepetition1;
20097: boolean yyRepeated1;
20098: Pair<Node> yyRepValue1;
20099: int yyOption1;
20100: Object yyOpValue1;
20101: Node yyValue;
20102: ParseError yyError = ParseError.DUMMY;
20103:
20104: // Alternative <Block>.
20105:
20106: yyResult = pBlock(yyStart);
20107: yyError = yyResult.select(yyError);
20108: if (yyResult.hasValue()) {
20109: yyValue = yyResult.semanticValue();
20110:
20111: return yyResult.createValue(yyValue, yyError);
20112: }
20113:
20114: // Alternative 2.
20115:
20116: yyResult = pJavaIdentifier$Word(yyStart);
20117: yyError = yyResult.select(yyError);
20118: if (yyResult.hasValue("if")) {
20119:
20120: yyResult = pParExpression(yyResult.index);
20121: yyError = yyResult.select(yyError);
20122: if (yyResult.hasValue()) {
20123: final Node v$g$1 = yyResult.semanticValue();
20124:
20125: yyResult = pJeannieJava$Statement(yyResult.index);
20126: yyError = yyResult.select(yyError);
20127: if (yyResult.hasValue()) {
20128: final Node v$g$2 = yyResult.semanticValue();
20129:
20130: final int yyChoice1 = yyResult.index;
20131:
20132: // Nested alternative 1.
20133:
20134: yyBase = yyChoice1;
20135: yyResult = pJavaIdentifier$Word(yyBase);
20136: yyError = yyResult.select(yyError);
20137: if (yyResult.hasValue("else")) {
20138:
20139: yyResult = pJeannieJava$Statement(yyResult.index);
20140: yyError = yyResult.select(yyError);
20141: if (yyResult.hasValue()) {
20142: final Node v$g$3 = yyResult.semanticValue();
20143:
20144: yyValue = GNode.create(
20145: "ConditionalStatement", v$g$1,
20146: v$g$2, v$g$3);
20147: yyValue.setLocation(location(yyStart));
20148:
20149: return yyResult.createValue(yyValue,
20150: yyError);
20151: }
20152: } else {
20153: yyError = yyError.select("\"else\" expected",
20154: yyBase);
20155: }
20156:
20157: // Nested alternative 2.
20158:
20159: yyValue = GNode.create("ConditionalStatement",
20160: v$g$1, v$g$2, null);
20161: yyValue.setLocation(location(yyStart));
20162:
20163: return new SemanticValue(yyValue, yyChoice1,
20164: yyError);
20165: }
20166: }
20167: }
20168:
20169: // Alternative 3.
20170:
20171: yyResult = pJavaIdentifier$Word(yyStart);
20172: yyError = yyResult.select(yyError);
20173: if (yyResult.hasValue("for")) {
20174:
20175: yyBase = yyResult.index;
20176: yyResult = pSymbol(yyBase);
20177: yyError = yyResult.select(yyError);
20178: if (yyResult.hasValue("(")) {
20179:
20180: yyResult = pBasicForControl(yyResult.index);
20181: yyError = yyResult.select(yyError);
20182: if (yyResult.hasValue()) {
20183: final Node v$g$1 = yyResult.semanticValue();
20184:
20185: yyBase = yyResult.index;
20186: yyResult = pSymbol(yyBase);
20187: yyError = yyResult.select(yyError);
20188: if (yyResult.hasValue(")")) {
20189:
20190: yyResult = pJeannieJava$Statement(yyResult.index);
20191: yyError = yyResult.select(yyError);
20192: if (yyResult.hasValue()) {
20193: final Node v$g$2 = yyResult.semanticValue();
20194:
20195: yyValue = GNode.create("ForStatement",
20196: v$g$1, v$g$2);
20197: yyValue.setLocation(location(yyStart));
20198:
20199: return yyResult.createValue(yyValue,
20200: yyError);
20201: }
20202: } else {
20203: yyError = yyError.select("\")\" expected",
20204: yyBase);
20205: }
20206: }
20207: } else {
20208: yyError = yyError.select("\"(\" expected", yyBase);
20209: }
20210: }
20211:
20212: // Alternative 4.
20213:
20214: yyResult = pJavaIdentifier$Word(yyStart);
20215: yyError = yyResult.select(yyError);
20216: if (yyResult.hasValue("while")) {
20217:
20218: yyResult = pParExpression(yyResult.index);
20219: yyError = yyResult.select(yyError);
20220: if (yyResult.hasValue()) {
20221: final Node v$g$1 = yyResult.semanticValue();
20222:
20223: yyResult = pJeannieJava$Statement(yyResult.index);
20224: yyError = yyResult.select(yyError);
20225: if (yyResult.hasValue()) {
20226: final Node v$g$2 = yyResult.semanticValue();
20227:
20228: yyValue = GNode.create("WhileStatement", v$g$1,
20229: v$g$2);
20230: yyValue.setLocation(location(yyStart));
20231:
20232: return yyResult.createValue(yyValue, yyError);
20233: }
20234: }
20235: }
20236:
20237: // Alternative 5.
20238:
20239: yyResult = pJavaIdentifier$Word(yyStart);
20240: yyError = yyResult.select(yyError);
20241: if (yyResult.hasValue("do")) {
20242:
20243: yyResult = pJeannieJava$Statement(yyResult.index);
20244: yyError = yyResult.select(yyError);
20245: if (yyResult.hasValue()) {
20246: final Node v$g$1 = yyResult.semanticValue();
20247:
20248: yyBase = yyResult.index;
20249: yyResult = pJavaIdentifier$Word(yyBase);
20250: yyError = yyResult.select(yyError);
20251: if (yyResult.hasValue("while")) {
20252:
20253: yyResult = pParExpression(yyResult.index);
20254: yyError = yyResult.select(yyError);
20255: if (yyResult.hasValue()) {
20256: final Node v$g$2 = yyResult.semanticValue();
20257:
20258: yyBase = yyResult.index;
20259: yyResult = pSymbol(yyBase);
20260: yyError = yyResult.select(yyError);
20261: if (yyResult.hasValue(";")) {
20262:
20263: yyValue = GNode.create("DoWhileStatement",
20264: v$g$1, v$g$2);
20265: yyValue.setLocation(location(yyStart));
20266:
20267: return yyResult.createValue(yyValue,
20268: yyError);
20269: } else {
20270: yyError = yyError.select("\";\" expected",
20271: yyBase);
20272: }
20273: }
20274: } else {
20275: yyError = yyError.select("\"while\" expected",
20276: yyBase);
20277: }
20278: }
20279: }
20280:
20281: // Alternative 6.
20282:
20283: yyResult = pJavaIdentifier$Word(yyStart);
20284: yyError = yyResult.select(yyError);
20285: if (yyResult.hasValue("try")) {
20286:
20287: yyResult = pBlock(yyResult.index);
20288: yyError = yyResult.select(yyError);
20289: if (yyResult.hasValue()) {
20290: final Node v$g$1 = yyResult.semanticValue();
20291:
20292: final int yyChoice1 = yyResult.index;
20293:
20294: // Nested alternative 1.
20295:
20296: yyRepetition1 = yyChoice1;
20297: yyRepValue1 = Pair.empty();
20298: while (true) {
20299:
20300: yyResult = pCatchClause(yyRepetition1);
20301: yyError = yyResult.select(yyError);
20302: if (yyResult.hasValue()) {
20303: final Node v$el$1 = yyResult.semanticValue();
20304:
20305: yyRepetition1 = yyResult.index;
20306: yyRepValue1 = new Pair<Node>(v$el$1,
20307: yyRepValue1);
20308: continue;
20309: }
20310: break;
20311: }
20312: { // Start scope for v$g$2.
20313: final Pair<Node> v$g$2 = yyRepValue1.reverse();
20314:
20315: yyBase = yyRepetition1;
20316: yyResult = pJavaIdentifier$Word(yyBase);
20317: yyError = yyResult.select(yyError);
20318: if (yyResult.hasValue("finally")) {
20319:
20320: yyResult = pBlock(yyResult.index);
20321: yyError = yyResult.select(yyError);
20322: if (yyResult.hasValue()) {
20323: final Node v$g$3 = yyResult.semanticValue();
20324:
20325: yyValue = GNode.create(
20326: "TryCatchFinallyStatement",
20327: v$g$2.size() + 2).add(v$g$1)
20328: .addAll(v$g$2).add(v$g$3);
20329: yyValue.setLocation(location(yyStart));
20330:
20331: return yyResult.createValue(yyValue,
20332: yyError);
20333: }
20334: } else {
20335: yyError = yyError.select(
20336: "\"finally\" expected", yyBase);
20337: }
20338: } // End scope for v$g$2.
20339:
20340: // Nested alternative 2.
20341:
20342: yyRepetition1 = yyChoice1;
20343: yyRepeated1 = false;
20344: yyRepValue1 = Pair.empty();
20345: while (true) {
20346:
20347: yyResult = pCatchClause(yyRepetition1);
20348: yyError = yyResult.select(yyError);
20349: if (yyResult.hasValue()) {
20350: final Node v$el$2 = yyResult.semanticValue();
20351:
20352: yyRepetition1 = yyResult.index;
20353: yyRepeated1 = true;
20354: yyRepValue1 = new Pair<Node>(v$el$2,
20355: yyRepValue1);
20356: continue;
20357: }
20358: break;
20359: }
20360:
20361: if (yyRepeated1) {
20362: final Pair<Node> v$g$4 = yyRepValue1.reverse();
20363:
20364: yyValue = GNode.create("TryCatchFinallyStatement",
20365: v$g$4.size() + 2).add(v$g$1).addAll(v$g$4)
20366: .add(null);
20367: yyValue.setLocation(location(yyStart));
20368:
20369: return new SemanticValue(yyValue, yyRepetition1,
20370: yyError);
20371: }
20372: }
20373: }
20374:
20375: // Alternative 7.
20376:
20377: yyResult = pJavaIdentifier$Word(yyStart);
20378: yyError = yyResult.select(yyError);
20379: if (yyResult.hasValue("switch")) {
20380:
20381: yyResult = pParExpression(yyResult.index);
20382: yyError = yyResult.select(yyError);
20383: if (yyResult.hasValue()) {
20384: final Node v$g$1 = yyResult.semanticValue();
20385:
20386: yyBase = yyResult.index;
20387: yyResult = pSymbol(yyBase);
20388: yyError = yyResult.select(yyError);
20389: if (yyResult.hasValue("{")) {
20390:
20391: yyRepetition1 = yyResult.index;
20392: yyRepValue1 = Pair.empty();
20393: while (true) {
20394:
20395: yyResult = pSwitchClause(yyRepetition1);
20396: yyError = yyResult.select(yyError);
20397: if (yyResult.hasValue()) {
20398: final Node v$el$1 = yyResult
20399: .semanticValue();
20400:
20401: yyRepetition1 = yyResult.index;
20402: yyRepValue1 = new Pair<Node>(v$el$1,
20403: yyRepValue1);
20404: continue;
20405: }
20406: break;
20407: }
20408: { // Start scope for v$g$2.
20409: final Pair<Node> v$g$2 = yyRepValue1.reverse();
20410:
20411: yyBase = yyRepetition1;
20412: yyResult = pSymbol(yyBase);
20413: yyError = yyResult.select(yyError);
20414: if (yyResult.hasValue("}")) {
20415:
20416: yyValue = GNode.createFromPair(
20417: "SwitchStatement", v$g$1, v$g$2);
20418: yyValue.setLocation(location(yyStart));
20419:
20420: return yyResult.createValue(yyValue,
20421: yyError);
20422: } else {
20423: yyError = yyError.select("\"}\" expected",
20424: yyBase);
20425: }
20426: } // End scope for v$g$2.
20427: } else {
20428: yyError = yyError.select("\"{\" expected", yyBase);
20429: }
20430: }
20431: }
20432:
20433: // Alternative 8.
20434:
20435: yyResult = pJavaIdentifier$Word(yyStart);
20436: yyError = yyResult.select(yyError);
20437: if (yyResult.hasValue("synchronized")) {
20438:
20439: yyResult = pParExpression(yyResult.index);
20440: yyError = yyResult.select(yyError);
20441: if (yyResult.hasValue()) {
20442: final Node v$g$1 = yyResult.semanticValue();
20443:
20444: yyResult = pBlock(yyResult.index);
20445: yyError = yyResult.select(yyError);
20446: if (yyResult.hasValue()) {
20447: final Node v$g$2 = yyResult.semanticValue();
20448:
20449: yyValue = GNode.create("SynchronizedStatement",
20450: v$g$1, v$g$2);
20451: yyValue.setLocation(location(yyStart));
20452:
20453: return yyResult.createValue(yyValue, yyError);
20454: }
20455: }
20456: }
20457:
20458: // Alternative 9.
20459:
20460: yyResult = pJavaIdentifier$Word(yyStart);
20461: yyError = yyResult.select(yyError);
20462: if (yyResult.hasValue("return")) {
20463:
20464: yyOption1 = yyResult.index;
20465: yyOpValue1 = null;
20466:
20467: yyResult = pJeannieJava$Expression(yyOption1);
20468: yyError = yyResult.select(yyError);
20469: if (yyResult.hasValue()) {
20470: final Node v$el$1 = yyResult.semanticValue();
20471:
20472: yyOption1 = yyResult.index;
20473: yyOpValue1 = v$el$1;
20474: }
20475: { // Start scope for v$g$1.
20476: final Node v$g$1 = cast(yyOpValue1);
20477:
20478: yyBase = yyOption1;
20479: yyResult = pSymbol(yyBase);
20480: yyError = yyResult.select(yyError);
20481: if (yyResult.hasValue(";")) {
20482:
20483: yyValue = GNode.create("ReturnStatement", v$g$1);
20484: yyValue.setLocation(location(yyStart));
20485:
20486: return yyResult.createValue(yyValue, yyError);
20487: } else {
20488: yyError = yyError.select("\";\" expected", yyBase);
20489: }
20490: } // End scope for v$g$1.
20491: }
20492:
20493: // Alternative 10.
20494:
20495: yyResult = pJavaIdentifier$Word(yyStart);
20496: yyError = yyResult.select(yyError);
20497: if (yyResult.hasValue("throw")) {
20498:
20499: yyResult = pJeannieJava$Expression(yyResult.index);
20500: yyError = yyResult.select(yyError);
20501: if (yyResult.hasValue()) {
20502: final Node v$g$1 = yyResult.semanticValue();
20503:
20504: yyBase = yyResult.index;
20505: yyResult = pSymbol(yyBase);
20506: yyError = yyResult.select(yyError);
20507: if (yyResult.hasValue(";")) {
20508:
20509: yyValue = GNode.create("ThrowStatement", v$g$1);
20510: yyValue.setLocation(location(yyStart));
20511:
20512: return yyResult.createValue(yyValue, yyError);
20513: } else {
20514: yyError = yyError.select("\";\" expected", yyBase);
20515: }
20516: }
20517: }
20518:
20519: // Alternative 11.
20520:
20521: yyResult = pJavaIdentifier$Word(yyStart);
20522: yyError = yyResult.select(yyError);
20523: if (yyResult.hasValue("break")) {
20524:
20525: yyOption1 = yyResult.index;
20526: yyOpValue1 = null;
20527:
20528: yyResult = pJavaIdentifier$Identifier(yyOption1);
20529: yyError = yyResult.select(yyError);
20530: if (yyResult.hasValue()) {
20531: final String v$el$1 = yyResult.semanticValue();
20532:
20533: yyOption1 = yyResult.index;
20534: yyOpValue1 = v$el$1;
20535: }
20536: { // Start scope for v$g$1.
20537: final String v$g$1 = cast(yyOpValue1);
20538:
20539: yyBase = yyOption1;
20540: yyResult = pSymbol(yyBase);
20541: yyError = yyResult.select(yyError);
20542: if (yyResult.hasValue(";")) {
20543:
20544: yyValue = GNode.create("BreakStatement", v$g$1);
20545: yyValue.setLocation(location(yyStart));
20546:
20547: return yyResult.createValue(yyValue, yyError);
20548: } else {
20549: yyError = yyError.select("\";\" expected", yyBase);
20550: }
20551: } // End scope for v$g$1.
20552: }
20553:
20554: // Alternative 12.
20555:
20556: yyResult = pJavaIdentifier$Word(yyStart);
20557: yyError = yyResult.select(yyError);
20558: if (yyResult.hasValue("continue")) {
20559:
20560: yyOption1 = yyResult.index;
20561: yyOpValue1 = null;
20562:
20563: yyResult = pJavaIdentifier$Identifier(yyOption1);
20564: yyError = yyResult.select(yyError);
20565: if (yyResult.hasValue()) {
20566: final String v$el$1 = yyResult.semanticValue();
20567:
20568: yyOption1 = yyResult.index;
20569: yyOpValue1 = v$el$1;
20570: }
20571: { // Start scope for v$g$1.
20572: final String v$g$1 = cast(yyOpValue1);
20573:
20574: yyBase = yyOption1;
20575: yyResult = pSymbol(yyBase);
20576: yyError = yyResult.select(yyError);
20577: if (yyResult.hasValue(";")) {
20578:
20579: yyValue = GNode.create("ContinueStatement", v$g$1);
20580: yyValue.setLocation(location(yyStart));
20581:
20582: return yyResult.createValue(yyValue, yyError);
20583: } else {
20584: yyError = yyError.select("\";\" expected", yyBase);
20585: }
20586: } // End scope for v$g$1.
20587: }
20588:
20589: // Alternative 13.
20590:
20591: yyResult = pJavaIdentifier$Identifier(yyStart);
20592: yyError = yyResult.select(yyError);
20593: if (yyResult.hasValue()) {
20594: final String v$g$1 = yyResult.semanticValue();
20595:
20596: yyBase = yyResult.index;
20597: yyResult = pSymbol(yyBase);
20598: yyError = yyResult.select(yyError);
20599: if (yyResult.hasValue(":")) {
20600:
20601: yyResult = pJeannieJava$Statement(yyResult.index);
20602: yyError = yyResult.select(yyError);
20603: if (yyResult.hasValue()) {
20604: final Node v$g$2 = yyResult.semanticValue();
20605:
20606: yyValue = GNode.create("LabeledStatement", v$g$1,
20607: v$g$2);
20608: yyValue.setLocation(location(yyStart));
20609:
20610: return yyResult.createValue(yyValue, yyError);
20611: }
20612: } else {
20613: yyError = yyError.select("\":\" expected", yyBase);
20614: }
20615: }
20616:
20617: // Alternative 14.
20618:
20619: yyResult = pJeannieJava$Expression(yyStart);
20620: yyError = yyResult.select(yyError);
20621: if (yyResult.hasValue()) {
20622: final Node v$g$1 = yyResult.semanticValue();
20623:
20624: yyBase = yyResult.index;
20625: yyResult = pSymbol(yyBase);
20626: yyError = yyResult.select(yyError);
20627: if (yyResult.hasValue(";")) {
20628:
20629: yyValue = GNode.create("ExpressionStatement", v$g$1);
20630: yyValue.setLocation(location(yyStart));
20631:
20632: return yyResult.createValue(yyValue, yyError);
20633: } else {
20634: yyError = yyError.select("\";\" expected", yyBase);
20635: }
20636: }
20637:
20638: // Alternative 15.
20639:
20640: yyResult = pJavaIdentifier$Word(yyStart);
20641: yyError = yyResult.select(yyError);
20642: if (yyResult.hasValue("assert")) {
20643:
20644: yyResult = pJeannieJava$Expression(yyResult.index);
20645: yyError = yyResult.select(yyError);
20646: if (yyResult.hasValue()) {
20647: final Node v$g$1 = yyResult.semanticValue();
20648:
20649: yyOption1 = yyResult.index;
20650: yyOpValue1 = null;
20651:
20652: yyBase = yyOption1;
20653: yyResult = pSymbol(yyBase);
20654: yyError = yyResult.select(yyError);
20655: if (yyResult.hasValue(":")) {
20656:
20657: yyResult = pJeannieJava$Expression(yyResult.index);
20658: yyError = yyResult.select(yyError);
20659: if (yyResult.hasValue()) {
20660: final Node v$el$1 = yyResult.semanticValue();
20661:
20662: yyOption1 = yyResult.index;
20663: yyOpValue1 = v$el$1;
20664: }
20665: } else {
20666: yyError = yyError.select("\":\" expected", yyBase);
20667: }
20668: { // Start scope for v$g$2.
20669: final Node v$g$2 = cast(yyOpValue1);
20670:
20671: yyBase = yyOption1;
20672: yyResult = pSymbol(yyBase);
20673: yyError = yyResult.select(yyError);
20674: if (yyResult.hasValue(";")) {
20675:
20676: yyValue = GNode.create("AssertStatement",
20677: v$g$1, v$g$2);
20678: yyValue.setLocation(location(yyStart));
20679:
20680: return yyResult.createValue(yyValue, yyError);
20681: } else {
20682: yyError = yyError.select("\";\" expected",
20683: yyBase);
20684: }
20685: } // End scope for v$g$2.
20686: }
20687: }
20688:
20689: // Alternative 16.
20690:
20691: yyResult = pSymbol(yyStart);
20692: yyError = yyResult.select(yyError);
20693: if (yyResult.hasValue(";")) {
20694:
20695: yyValue = GNode.create("EmptyStatement", false);
20696: yyValue.setLocation(location(yyStart));
20697:
20698: return yyResult.createValue(yyValue, yyError);
20699: }
20700:
20701: // Done.
20702: yyError = yyError.select("statement expected", yyStart);
20703: return yyError;
20704: }
20705:
20706: // =========================================================================
20707:
20708: /**
20709: * Parse nonterminal xtc.lang.jeannie.JeannieJava.BasicForControl.
20710: *
20711: * @param yyStart The index.
20712: * @return The result.
20713: * @throws IOException Signals an I/O error.
20714: */
20715: private Result pBasicForControl(final int yyStart)
20716: throws IOException {
20717: Result yyResult;
20718: int yyBase;
20719: int yyOption1;
20720: Node yyOpValue1;
20721: Node yyValue;
20722: ParseError yyError = ParseError.DUMMY;
20723:
20724: // Alternative <Declaration>.
20725:
20726: yyResult = pVariableModifiers(yyStart);
20727: yyError = yyResult.select(yyError);
20728: if (yyResult.hasValue()) {
20729: final Node v$g$1 = yyResult.semanticValue();
20730:
20731: yyResult = pType(yyResult.index);
20732: yyError = yyResult.select(yyError);
20733: if (yyResult.hasValue()) {
20734: final Node v$g$2 = yyResult.semanticValue();
20735:
20736: yyResult = pDeclarators(yyResult.index);
20737: yyError = yyResult.select(yyError);
20738: if (yyResult.hasValue()) {
20739: final Node v$g$3 = yyResult.semanticValue();
20740:
20741: yyBase = yyResult.index;
20742: yyResult = pSymbol(yyBase);
20743: yyError = yyResult.select(yyError);
20744: if (yyResult.hasValue(";")) {
20745:
20746: yyOption1 = yyResult.index;
20747: yyOpValue1 = null;
20748:
20749: yyResult = pJeannieJava$Expression(yyOption1);
20750: yyError = yyResult.select(yyError);
20751: if (yyResult.hasValue()) {
20752: final Node v$el$1 = yyResult
20753: .semanticValue();
20754:
20755: yyOption1 = yyResult.index;
20756: yyOpValue1 = v$el$1;
20757: }
20758: { // Start scope for v$g$4.
20759: final Node v$g$4 = yyOpValue1;
20760:
20761: yyBase = yyOption1;
20762: yyResult = pSymbol(yyBase);
20763: yyError = yyResult.select(yyError);
20764: if (yyResult.hasValue(";")) {
20765:
20766: yyOption1 = yyResult.index;
20767: yyOpValue1 = null;
20768:
20769: yyResult = pJeannieJava$ExpressionList(yyOption1);
20770: yyError = yyResult.select(yyError);
20771: if (yyResult.hasValue()) {
20772: final Node v$el$2 = yyResult
20773: .semanticValue();
20774:
20775: yyOption1 = yyResult.index;
20776: yyOpValue1 = v$el$2;
20777: }
20778: { // Start scope for v$g$5.
20779: final Node v$g$5 = yyOpValue1;
20780:
20781: yyValue = GNode.create(
20782: "BasicForControl", v$g$1,
20783: v$g$2, v$g$3, v$g$4, v$g$5);
20784: yyValue
20785: .setLocation(location(yyStart));
20786:
20787: return new SemanticValue(yyValue,
20788: yyOption1, yyError);
20789: } // End scope for v$g$5.
20790: } else {
20791: yyError = yyError.select(
20792: "\";\" expected", yyBase);
20793: }
20794: } // End scope for v$g$4.
20795: } else {
20796: yyError = yyError.select("\";\" expected",
20797: yyBase);
20798: }
20799: }
20800: }
20801: }
20802:
20803: // Alternative <Initialization>.
20804:
20805: yyOption1 = yyStart;
20806: yyOpValue1 = null;
20807:
20808: yyResult = pJeannieJava$ExpressionList(yyOption1);
20809: yyError = yyResult.select(yyError);
20810: if (yyResult.hasValue()) {
20811: final Node v$el$3 = yyResult.semanticValue();
20812:
20813: yyOption1 = yyResult.index;
20814: yyOpValue1 = v$el$3;
20815: }
20816: { // Start scope for v$g$8.
20817: final Node v$g$8 = yyOpValue1;
20818:
20819: yyBase = yyOption1;
20820: yyResult = pSymbol(yyBase);
20821: yyError = yyResult.select(yyError);
20822: if (yyResult.hasValue(";")) {
20823:
20824: yyOption1 = yyResult.index;
20825: yyOpValue1 = null;
20826:
20827: yyResult = pJeannieJava$Expression(yyOption1);
20828: yyError = yyResult.select(yyError);
20829: if (yyResult.hasValue()) {
20830: final Node v$el$4 = yyResult.semanticValue();
20831:
20832: yyOption1 = yyResult.index;
20833: yyOpValue1 = v$el$4;
20834: }
20835: { // Start scope for v$g$9.
20836: final Node v$g$9 = yyOpValue1;
20837:
20838: yyBase = yyOption1;
20839: yyResult = pSymbol(yyBase);
20840: yyError = yyResult.select(yyError);
20841: if (yyResult.hasValue(";")) {
20842:
20843: yyOption1 = yyResult.index;
20844: yyOpValue1 = null;
20845:
20846: yyResult = pJeannieJava$ExpressionList(yyOption1);
20847: yyError = yyResult.select(yyError);
20848: if (yyResult.hasValue()) {
20849: final Node v$el$5 = yyResult
20850: .semanticValue();
20851:
20852: yyOption1 = yyResult.index;
20853: yyOpValue1 = v$el$5;
20854: }
20855: { // Start scope for v$g$10.
20856: final Node v$g$10 = yyOpValue1;
20857:
20858: yyValue = GNode.create("BasicForControl",
20859: null, null, v$g$8, v$g$9, v$g$10);
20860: yyValue.setLocation(location(yyStart));
20861:
20862: return new SemanticValue(yyValue,
20863: yyOption1, yyError);
20864: } // End scope for v$g$10.
20865: } else {
20866: yyError = yyError.select("\";\" expected",
20867: yyBase);
20868: }
20869: } // End scope for v$g$9.
20870: } else {
20871: yyError = yyError.select("\";\" expected", yyBase);
20872: }
20873: } // End scope for v$g$8.
20874:
20875: // Done.
20876: return yyError;
20877: }
20878:
20879: // =========================================================================
20880:
20881: /**
20882: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ParExpression.
20883: *
20884: * @param yyStart The index.
20885: * @return The result.
20886: * @throws IOException Signals an I/O error.
20887: */
20888: private Result pParExpression(final int yyStart) throws IOException {
20889: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
20890: if (null == yyColumn.chunk7)
20891: yyColumn.chunk7 = new Chunk7();
20892: if (null == yyColumn.chunk7.fParExpression)
20893: yyColumn.chunk7.fParExpression = pParExpression$1(yyStart);
20894: return yyColumn.chunk7.fParExpression;
20895: }
20896:
20897: /** Actually parse xtc.lang.jeannie.JeannieJava.ParExpression. */
20898: private Result pParExpression$1(final int yyStart)
20899: throws IOException {
20900: Result yyResult;
20901: int yyBase;
20902: Node yyValue;
20903: ParseError yyError = ParseError.DUMMY;
20904:
20905: // Alternative 1.
20906:
20907: yyResult = pSymbol(yyStart);
20908: yyError = yyResult.select(yyError);
20909: if (yyResult.hasValue("(")) {
20910:
20911: yyResult = pJeannieJava$Expression(yyResult.index);
20912: yyError = yyResult.select(yyError);
20913: if (yyResult.hasValue()) {
20914: yyValue = yyResult.semanticValue();
20915:
20916: yyBase = yyResult.index;
20917: yyResult = pSymbol(yyBase);
20918: yyError = yyResult.select(yyError);
20919: if (yyResult.hasValue(")")) {
20920:
20921: return yyResult.createValue(yyValue, yyError);
20922: } else {
20923: yyError = yyError.select("\")\" expected", yyBase);
20924: }
20925: }
20926: }
20927:
20928: // Done.
20929: yyError = yyError.select("par expression expected", yyStart);
20930: return yyError;
20931: }
20932:
20933: // =========================================================================
20934:
20935: /**
20936: * Parse nonterminal xtc.lang.jeannie.JeannieJava.TryCatchFinallyStatement.
20937: *
20938: * @param yyStart The index.
20939: * @return The result.
20940: * @throws IOException Signals an I/O error.
20941: */
20942: private Result pTryCatchFinallyStatement(final int yyStart)
20943: throws IOException {
20944:
20945: Result yyResult;
20946: int yyBase;
20947: int yyRepetition1;
20948: boolean yyRepeated1;
20949: Pair<Node> yyRepValue1;
20950: Node yyValue;
20951: ParseError yyError = ParseError.DUMMY;
20952:
20953: // Alternative 1.
20954:
20955: yyResult = pJavaIdentifier$Word(yyStart);
20956: yyError = yyResult.select(yyError);
20957: if (yyResult.hasValue("try")) {
20958:
20959: yyResult = pBlock(yyResult.index);
20960: yyError = yyResult.select(yyError);
20961: if (yyResult.hasValue()) {
20962: final Node v$g$1 = yyResult.semanticValue();
20963:
20964: final int yyChoice1 = yyResult.index;
20965:
20966: // Nested alternative 1.
20967:
20968: yyRepetition1 = yyChoice1;
20969: yyRepValue1 = Pair.empty();
20970: while (true) {
20971:
20972: yyResult = pCatchClause(yyRepetition1);
20973: yyError = yyResult.select(yyError);
20974: if (yyResult.hasValue()) {
20975: final Node v$el$1 = yyResult.semanticValue();
20976:
20977: yyRepetition1 = yyResult.index;
20978: yyRepValue1 = new Pair<Node>(v$el$1,
20979: yyRepValue1);
20980: continue;
20981: }
20982: break;
20983: }
20984: { // Start scope for v$g$2.
20985: final Pair<Node> v$g$2 = yyRepValue1.reverse();
20986:
20987: yyBase = yyRepetition1;
20988: yyResult = pJavaIdentifier$Word(yyBase);
20989: yyError = yyResult.select(yyError);
20990: if (yyResult.hasValue("finally")) {
20991:
20992: yyResult = pBlock(yyResult.index);
20993: yyError = yyResult.select(yyError);
20994: if (yyResult.hasValue()) {
20995: final Node v$g$3 = yyResult.semanticValue();
20996:
20997: yyValue = GNode.create(
20998: "TryCatchFinallyStatement",
20999: v$g$2.size() + 2).add(v$g$1)
21000: .addAll(v$g$2).add(v$g$3);
21001: yyValue.setLocation(location(yyStart));
21002:
21003: return yyResult.createValue(yyValue,
21004: yyError);
21005: }
21006: } else {
21007: yyError = yyError.select(
21008: "\"finally\" expected", yyBase);
21009: }
21010: } // End scope for v$g$2.
21011:
21012: // Nested alternative 2.
21013:
21014: yyRepetition1 = yyChoice1;
21015: yyRepeated1 = false;
21016: yyRepValue1 = Pair.empty();
21017: while (true) {
21018:
21019: yyResult = pCatchClause(yyRepetition1);
21020: yyError = yyResult.select(yyError);
21021: if (yyResult.hasValue()) {
21022: final Node v$el$2 = yyResult.semanticValue();
21023:
21024: yyRepetition1 = yyResult.index;
21025: yyRepeated1 = true;
21026: yyRepValue1 = new Pair<Node>(v$el$2,
21027: yyRepValue1);
21028: continue;
21029: }
21030: break;
21031: }
21032:
21033: if (yyRepeated1) {
21034: final Pair<Node> v$g$4 = yyRepValue1.reverse();
21035:
21036: yyValue = GNode.create("TryCatchFinallyStatement",
21037: v$g$4.size() + 2).add(v$g$1).addAll(v$g$4)
21038: .add(null);
21039: yyValue.setLocation(location(yyStart));
21040:
21041: return new SemanticValue(yyValue, yyRepetition1,
21042: yyError);
21043: }
21044: }
21045: }
21046:
21047: // Done.
21048: yyError = yyError.select(
21049: "try catch finally statement expected", yyStart);
21050: return yyError;
21051: }
21052:
21053: // =========================================================================
21054:
21055: /**
21056: * Parse nonterminal xtc.lang.jeannie.JeannieJava.CatchClause.
21057: *
21058: * @param yyStart The index.
21059: * @return The result.
21060: * @throws IOException Signals an I/O error.
21061: */
21062: private Result pCatchClause(final int yyStart) throws IOException {
21063: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
21064: if (null == yyColumn.chunk7)
21065: yyColumn.chunk7 = new Chunk7();
21066: if (null == yyColumn.chunk7.fCatchClause)
21067: yyColumn.chunk7.fCatchClause = pCatchClause$1(yyStart);
21068: return yyColumn.chunk7.fCatchClause;
21069: }
21070:
21071: /** Actually parse xtc.lang.jeannie.JeannieJava.CatchClause. */
21072: private Result pCatchClause$1(final int yyStart) throws IOException {
21073: Result yyResult;
21074: int yyBase;
21075: Node yyValue;
21076: ParseError yyError = ParseError.DUMMY;
21077:
21078: // Alternative 1.
21079:
21080: yyResult = pJavaIdentifier$Word(yyStart);
21081: yyError = yyResult.select(yyError);
21082: if (yyResult.hasValue("catch")) {
21083:
21084: yyBase = yyResult.index;
21085: yyResult = pSymbol(yyBase);
21086: yyError = yyResult.select(yyError);
21087: if (yyResult.hasValue("(")) {
21088:
21089: yyResult = pFormalParameter(yyResult.index);
21090: yyError = yyResult.select(yyError);
21091: if (yyResult.hasValue()) {
21092: final Node v$g$1 = yyResult.semanticValue();
21093:
21094: yyBase = yyResult.index;
21095: yyResult = pSymbol(yyBase);
21096: yyError = yyResult.select(yyError);
21097: if (yyResult.hasValue(")")) {
21098:
21099: yyResult = pBlock(yyResult.index);
21100: yyError = yyResult.select(yyError);
21101: if (yyResult.hasValue()) {
21102: final Node v$g$2 = yyResult.semanticValue();
21103:
21104: yyValue = GNode.create("CatchClause",
21105: v$g$1, v$g$2);
21106: yyValue.setLocation(location(yyStart));
21107:
21108: return yyResult.createValue(yyValue,
21109: yyError);
21110: }
21111: } else {
21112: yyError = yyError.select("\")\" expected",
21113: yyBase);
21114: }
21115: }
21116: } else {
21117: yyError = yyError.select("\"(\" expected", yyBase);
21118: }
21119: }
21120:
21121: // Done.
21122: yyError = yyError.select("catch clause expected", yyStart);
21123: return yyError;
21124: }
21125:
21126: // =========================================================================
21127:
21128: /**
21129: * Parse nonterminal xtc.lang.jeannie.JeannieJava.SwitchClause.
21130: *
21131: * @param yyStart The index.
21132: * @return The result.
21133: * @throws IOException Signals an I/O error.
21134: */
21135: private Result pSwitchClause(final int yyStart) throws IOException {
21136: Result yyResult;
21137: int yyBase;
21138: int yyRepetition1;
21139: Pair<Node> yyRepValue1;
21140: Node yyValue;
21141: ParseError yyError = ParseError.DUMMY;
21142:
21143: // Alternative 1.
21144:
21145: yyResult = pJavaIdentifier$Word(yyStart);
21146: yyError = yyResult.select(yyError);
21147: if (yyResult.hasValue("case")) {
21148:
21149: yyResult = pJeannieJava$Expression(yyResult.index);
21150: yyError = yyResult.select(yyError);
21151: if (yyResult.hasValue()) {
21152: final Node v$g$1 = yyResult.semanticValue();
21153:
21154: yyBase = yyResult.index;
21155: yyResult = pSymbol(yyBase);
21156: yyError = yyResult.select(yyError);
21157: if (yyResult.hasValue(":")) {
21158:
21159: yyRepetition1 = yyResult.index;
21160: yyRepValue1 = Pair.empty();
21161: while (true) {
21162:
21163: yyResult = pJeannieJava$DeclarationOrStatement(yyRepetition1);
21164: yyError = yyResult.select(yyError);
21165: if (yyResult.hasValue()) {
21166: final Node v$el$1 = yyResult
21167: .semanticValue();
21168:
21169: yyRepetition1 = yyResult.index;
21170: yyRepValue1 = new Pair<Node>(v$el$1,
21171: yyRepValue1);
21172: continue;
21173: }
21174: break;
21175: }
21176: { // Start scope for v$g$2.
21177: final Pair<Node> v$g$2 = yyRepValue1.reverse();
21178:
21179: yyValue = GNode.createFromPair("CaseClause",
21180: v$g$1, v$g$2);
21181: yyValue.setLocation(location(yyStart));
21182:
21183: return new SemanticValue(yyValue,
21184: yyRepetition1, yyError);
21185: } // End scope for v$g$2.
21186: } else {
21187: yyError = yyError.select("\":\" expected", yyBase);
21188: }
21189: }
21190: }
21191:
21192: // Alternative 2.
21193:
21194: yyResult = pJavaIdentifier$Word(yyStart);
21195: yyError = yyResult.select(yyError);
21196: if (yyResult.hasValue("default")) {
21197:
21198: yyBase = yyResult.index;
21199: yyResult = pSymbol(yyBase);
21200: yyError = yyResult.select(yyError);
21201: if (yyResult.hasValue(":")) {
21202:
21203: yyRepetition1 = yyResult.index;
21204: yyRepValue1 = Pair.empty();
21205: while (true) {
21206:
21207: yyResult = pJeannieJava$DeclarationOrStatement(yyRepetition1);
21208: yyError = yyResult.select(yyError);
21209: if (yyResult.hasValue()) {
21210: final Node v$el$1 = yyResult.semanticValue();
21211:
21212: yyRepetition1 = yyResult.index;
21213: yyRepValue1 = new Pair<Node>(v$el$1,
21214: yyRepValue1);
21215: continue;
21216: }
21217: break;
21218: }
21219: { // Start scope for v$g$1.
21220: final Pair<Node> v$g$1 = yyRepValue1.reverse();
21221:
21222: yyValue = GNode.createFromPair("DefaultClause",
21223: v$g$1);
21224: yyValue.setLocation(location(yyStart));
21225:
21226: return new SemanticValue(yyValue, yyRepetition1,
21227: yyError);
21228: } // End scope for v$g$1.
21229: } else {
21230: yyError = yyError.select("\":\" expected", yyBase);
21231: }
21232: }
21233:
21234: // Done.
21235: yyError = yyError.select("switch clause expected", yyStart);
21236: return yyError;
21237: }
21238:
21239: // =========================================================================
21240:
21241: /**
21242: * Parse nonterminal xtc.lang.jeannie.JeannieJava.SynchronizedStatement.
21243: *
21244: * @param yyStart The index.
21245: * @return The result.
21246: * @throws IOException Signals an I/O error.
21247: */
21248: private Result pSynchronizedStatement(final int yyStart)
21249: throws IOException {
21250:
21251: Result yyResult;
21252: Node yyValue;
21253: ParseError yyError = ParseError.DUMMY;
21254:
21255: // Alternative 1.
21256:
21257: yyResult = pJavaIdentifier$Word(yyStart);
21258: yyError = yyResult.select(yyError);
21259: if (yyResult.hasValue("synchronized")) {
21260:
21261: yyResult = pParExpression(yyResult.index);
21262: yyError = yyResult.select(yyError);
21263: if (yyResult.hasValue()) {
21264: final Node v$g$1 = yyResult.semanticValue();
21265:
21266: yyResult = pBlock(yyResult.index);
21267: yyError = yyResult.select(yyError);
21268: if (yyResult.hasValue()) {
21269: final Node v$g$2 = yyResult.semanticValue();
21270:
21271: yyValue = GNode.create("SynchronizedStatement",
21272: v$g$1, v$g$2);
21273: yyValue.setLocation(location(yyStart));
21274:
21275: return yyResult.createValue(yyValue, yyError);
21276: }
21277: }
21278: }
21279:
21280: // Done.
21281: yyError = yyError.select("synchronized statement expected",
21282: yyStart);
21283: return yyError;
21284: }
21285:
21286: // =========================================================================
21287:
21288: /**
21289: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ThrowStatement.
21290: *
21291: * @param yyStart The index.
21292: * @return The result.
21293: * @throws IOException Signals an I/O error.
21294: */
21295: private Result pThrowStatement(final int yyStart)
21296: throws IOException {
21297: Result yyResult;
21298: int yyBase;
21299: Node yyValue;
21300: ParseError yyError = ParseError.DUMMY;
21301:
21302: // Alternative 1.
21303:
21304: yyResult = pJavaIdentifier$Word(yyStart);
21305: yyError = yyResult.select(yyError);
21306: if (yyResult.hasValue("throw")) {
21307:
21308: yyResult = pJeannieJava$Expression(yyResult.index);
21309: yyError = yyResult.select(yyError);
21310: if (yyResult.hasValue()) {
21311: final Node v$g$1 = yyResult.semanticValue();
21312:
21313: yyBase = yyResult.index;
21314: yyResult = pSymbol(yyBase);
21315: yyError = yyResult.select(yyError);
21316: if (yyResult.hasValue(";")) {
21317:
21318: yyValue = GNode.create("ThrowStatement", v$g$1);
21319: yyValue.setLocation(location(yyStart));
21320:
21321: return yyResult.createValue(yyValue, yyError);
21322: } else {
21323: yyError = yyError.select("\";\" expected", yyBase);
21324: }
21325: }
21326: }
21327:
21328: // Done.
21329: yyError = yyError.select("throw statement expected", yyStart);
21330: return yyError;
21331: }
21332:
21333: // =========================================================================
21334:
21335: /**
21336: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ExpressionList.
21337: *
21338: * @param yyStart The index.
21339: * @return The result.
21340: * @throws IOException Signals an I/O error.
21341: */
21342: private Result pJeannieJava$ExpressionList(final int yyStart)
21343: throws IOException {
21344:
21345: Result yyResult;
21346: int yyBase;
21347: int yyRepetition1;
21348: Pair<Node> yyRepValue1;
21349: Node yyValue;
21350: ParseError yyError = ParseError.DUMMY;
21351:
21352: // Alternative 1.
21353:
21354: yyResult = pJeannieJava$Expression(yyStart);
21355: yyError = yyResult.select(yyError);
21356: if (yyResult.hasValue()) {
21357: final Node v$g$1 = yyResult.semanticValue();
21358:
21359: yyRepetition1 = yyResult.index;
21360: yyRepValue1 = Pair.empty();
21361: while (true) {
21362:
21363: yyBase = yyRepetition1;
21364: yyResult = pSymbol(yyBase);
21365: yyError = yyResult.select(yyError);
21366: if (yyResult.hasValue(",")) {
21367:
21368: yyResult = pJeannieJava$Expression(yyResult.index);
21369: yyError = yyResult.select(yyError);
21370: if (yyResult.hasValue()) {
21371: final Node v$el$1 = yyResult.semanticValue();
21372:
21373: yyRepetition1 = yyResult.index;
21374: yyRepValue1 = new Pair<Node>(v$el$1,
21375: yyRepValue1);
21376: continue;
21377: }
21378: } else {
21379: yyError = yyError.select("\",\" expected", yyBase);
21380: }
21381: break;
21382: }
21383: { // Start scope for v$g$2.
21384: final Pair<Node> v$g$2 = yyRepValue1.reverse();
21385:
21386: yyValue = GNode.createFromPair("ExpressionList", v$g$1,
21387: v$g$2);
21388: yyValue.setLocation(location(yyStart));
21389:
21390: return new SemanticValue(yyValue, yyRepetition1,
21391: yyError);
21392: } // End scope for v$g$2.
21393: }
21394:
21395: // Done.
21396: return yyError;
21397: }
21398:
21399: // =========================================================================
21400:
21401: /**
21402: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Expression.
21403: *
21404: * @param yyStart The index.
21405: * @return The result.
21406: * @throws IOException Signals an I/O error.
21407: */
21408: private Result pJeannieJava$Expression(final int yyStart)
21409: throws IOException {
21410:
21411: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
21412: if (null == yyColumn.chunk7)
21413: yyColumn.chunk7 = new Chunk7();
21414: if (null == yyColumn.chunk7.fJeannieJava$Expression)
21415: yyColumn.chunk7.fJeannieJava$Expression = pJeannieJava$Expression$1(yyStart);
21416: return yyColumn.chunk7.fJeannieJava$Expression;
21417: }
21418:
21419: /** Actually parse xtc.lang.jeannie.JeannieJava.Expression. */
21420: private Result pJeannieJava$Expression$1(final int yyStart)
21421: throws IOException {
21422:
21423: Result yyResult;
21424: Node yyValue;
21425: ParseError yyError = ParseError.DUMMY;
21426:
21427: // Alternative <Assignment>.
21428:
21429: yyResult = pJeannieJava$ConditionalExpression(yyStart);
21430: yyError = yyResult.select(yyError);
21431: if (yyResult.hasValue()) {
21432: final Node v$g$1 = yyResult.semanticValue();
21433:
21434: yyResult = pJeannieJava$AssignmentOperator(yyResult.index);
21435: yyError = yyResult.select(yyError);
21436: if (yyResult.hasValue()) {
21437: final String v$g$2 = yyResult.semanticValue();
21438:
21439: yyResult = pJeannieJava$Expression(yyResult.index);
21440: yyError = yyResult.select(yyError);
21441: if (yyResult.hasValue()) {
21442: final Node v$g$3 = yyResult.semanticValue();
21443:
21444: yyValue = GNode.create("Expression", v$g$1, v$g$2,
21445: v$g$3);
21446: yyValue.setLocation(location(yyStart));
21447:
21448: return yyResult.createValue(yyValue, yyError);
21449: }
21450: }
21451: }
21452:
21453: // Alternative <Base>.
21454:
21455: yyResult = pJeannieJava$ConditionalExpression(yyStart);
21456: yyError = yyResult.select(yyError);
21457: if (yyResult.hasValue()) {
21458: yyValue = yyResult.semanticValue();
21459:
21460: return yyResult.createValue(yyValue, yyError);
21461: }
21462:
21463: // Done.
21464: return yyError;
21465: }
21466:
21467: // =========================================================================
21468:
21469: /**
21470: * Parse nonterminal xtc.lang.jeannie.JeannieJava.AssignmentOperator.
21471: *
21472: * @param yyStart The index.
21473: * @return The result.
21474: * @throws IOException Signals an I/O error.
21475: */
21476: private Result pJeannieJava$AssignmentOperator(final int yyStart)
21477: throws IOException {
21478:
21479: Result yyResult;
21480: String yyValue;
21481: ParseError yyError = ParseError.DUMMY;
21482:
21483: // Alternative <Equal>.
21484:
21485: yyResult = pSymbol(yyStart);
21486: yyError = yyResult.select(yyError);
21487: if (yyResult.hasValue("=")) {
21488: yyValue = "=";
21489:
21490: return yyResult.createValue(yyValue, yyError);
21491: }
21492:
21493: // Alternative <PlusEqual>.
21494:
21495: yyResult = pSymbol(yyStart);
21496: yyError = yyResult.select(yyError);
21497: if (yyResult.hasValue("+=")) {
21498: yyValue = "+=";
21499:
21500: return yyResult.createValue(yyValue, yyError);
21501: }
21502:
21503: // Alternative <MinusEqual>.
21504:
21505: yyResult = pSymbol(yyStart);
21506: yyError = yyResult.select(yyError);
21507: if (yyResult.hasValue("-=")) {
21508: yyValue = "-=";
21509:
21510: return yyResult.createValue(yyValue, yyError);
21511: }
21512:
21513: // Alternative <StarEqual>.
21514:
21515: yyResult = pSymbol(yyStart);
21516: yyError = yyResult.select(yyError);
21517: if (yyResult.hasValue("*=")) {
21518: yyValue = "*=";
21519:
21520: return yyResult.createValue(yyValue, yyError);
21521: }
21522:
21523: // Alternative <SlashEqual>.
21524:
21525: yyResult = pSymbol(yyStart);
21526: yyError = yyResult.select(yyError);
21527: if (yyResult.hasValue("/=")) {
21528: yyValue = "/=";
21529:
21530: return yyResult.createValue(yyValue, yyError);
21531: }
21532:
21533: // Alternative <AmpersandEqual>.
21534:
21535: yyResult = pSymbol(yyStart);
21536: yyError = yyResult.select(yyError);
21537: if (yyResult.hasValue("&=")) {
21538: yyValue = "&=";
21539:
21540: return yyResult.createValue(yyValue, yyError);
21541: }
21542:
21543: // Alternative <BarEqual>.
21544:
21545: yyResult = pSymbol(yyStart);
21546: yyError = yyResult.select(yyError);
21547: if (yyResult.hasValue("|=")) {
21548: yyValue = "|=";
21549:
21550: return yyResult.createValue(yyValue, yyError);
21551: }
21552:
21553: // Alternative <CaretEqual>.
21554:
21555: yyResult = pSymbol(yyStart);
21556: yyError = yyResult.select(yyError);
21557: if (yyResult.hasValue("^=")) {
21558: yyValue = "^=";
21559:
21560: return yyResult.createValue(yyValue, yyError);
21561: }
21562:
21563: // Alternative <PercentEqual>.
21564:
21565: yyResult = pSymbol(yyStart);
21566: yyError = yyResult.select(yyError);
21567: if (yyResult.hasValue("%=")) {
21568: yyValue = "%=";
21569:
21570: return yyResult.createValue(yyValue, yyError);
21571: }
21572:
21573: // Alternative <DoubleLessEqual>.
21574:
21575: yyResult = pSymbol(yyStart);
21576: yyError = yyResult.select(yyError);
21577: if (yyResult.hasValue("<<=")) {
21578: yyValue = "<<=";
21579:
21580: return yyResult.createValue(yyValue, yyError);
21581: }
21582:
21583: // Alternative <DoubleGreaterEqual>.
21584:
21585: yyResult = pSymbol(yyStart);
21586: yyError = yyResult.select(yyError);
21587: if (yyResult.hasValue(">>=")) {
21588: yyValue = ">>=";
21589:
21590: return yyResult.createValue(yyValue, yyError);
21591: }
21592:
21593: // Alternative <TripleGreaterEqual>.
21594:
21595: yyResult = pSymbol(yyStart);
21596: yyError = yyResult.select(yyError);
21597: if (yyResult.hasValue(">>>=")) {
21598: yyValue = ">>>=";
21599:
21600: return yyResult.createValue(yyValue, yyError);
21601: }
21602:
21603: // Done.
21604: yyError = yyError.select("assignment operator expected",
21605: yyStart);
21606: return yyError;
21607: }
21608:
21609: // =========================================================================
21610:
21611: /**
21612: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ConditionalExpression.
21613: *
21614: * @param yyStart The index.
21615: * @return The result.
21616: * @throws IOException Signals an I/O error.
21617: */
21618: private Result pJeannieJava$ConditionalExpression(final int yyStart)
21619: throws IOException {
21620:
21621: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
21622: if (null == yyColumn.chunk7)
21623: yyColumn.chunk7 = new Chunk7();
21624: if (null == yyColumn.chunk7.fJeannieJava$ConditionalExpression)
21625: yyColumn.chunk7.fJeannieJava$ConditionalExpression = pJeannieJava$ConditionalExpression$1(yyStart);
21626: return yyColumn.chunk7.fJeannieJava$ConditionalExpression;
21627: }
21628:
21629: /** Actually parse xtc.lang.jeannie.JeannieJava.ConditionalExpression. */
21630: private Result pJeannieJava$ConditionalExpression$1(
21631: final int yyStart) throws IOException {
21632:
21633: Result yyResult;
21634: int yyBase;
21635: Node yyValue;
21636: ParseError yyError = ParseError.DUMMY;
21637:
21638: // Alternative <Conditional>.
21639:
21640: yyResult = pJeannieJava$LogicalOrExpression(yyStart);
21641: yyError = yyResult.select(yyError);
21642: if (yyResult.hasValue()) {
21643: final Node v$g$1 = yyResult.semanticValue();
21644:
21645: yyBase = yyResult.index;
21646: yyResult = pSymbol(yyBase);
21647: yyError = yyResult.select(yyError);
21648: if (yyResult.hasValue("?")) {
21649:
21650: yyResult = pJeannieJava$Expression(yyResult.index);
21651: yyError = yyResult.select(yyError);
21652: if (yyResult.hasValue()) {
21653: final Node v$g$2 = yyResult.semanticValue();
21654:
21655: yyBase = yyResult.index;
21656: yyResult = pSymbol(yyBase);
21657: yyError = yyResult.select(yyError);
21658: if (yyResult.hasValue(":")) {
21659:
21660: yyResult = pJeannieJava$ConditionalExpression(yyResult.index);
21661: yyError = yyResult.select(yyError);
21662: if (yyResult.hasValue()) {
21663: final Node v$g$3 = yyResult.semanticValue();
21664:
21665: yyValue = GNode.create(
21666: "ConditionalExpression", v$g$1,
21667: v$g$2, v$g$3);
21668: yyValue.setLocation(location(yyStart));
21669:
21670: return yyResult.createValue(yyValue,
21671: yyError);
21672: }
21673: } else {
21674: yyError = yyError.select("\":\" expected",
21675: yyBase);
21676: }
21677: }
21678: } else {
21679: yyError = yyError.select("\"?\" expected", yyBase);
21680: }
21681: }
21682:
21683: // Alternative <Base>.
21684:
21685: yyResult = pJeannieJava$LogicalOrExpression(yyStart);
21686: yyError = yyResult.select(yyError);
21687: if (yyResult.hasValue()) {
21688: yyValue = yyResult.semanticValue();
21689:
21690: return yyResult.createValue(yyValue, yyError);
21691: }
21692:
21693: // Done.
21694: return yyError;
21695: }
21696:
21697: // =========================================================================
21698:
21699: /**
21700: * Parse nonterminal xtc.lang.jeannie.JeannieJava.LogicalOrExpression.
21701: *
21702: * @param yyStart The index.
21703: * @return The result.
21704: * @throws IOException Signals an I/O error.
21705: */
21706: private Result pJeannieJava$LogicalOrExpression(final int yyStart)
21707: throws IOException {
21708:
21709: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
21710: if (null == yyColumn.chunk8)
21711: yyColumn.chunk8 = new Chunk8();
21712: if (null == yyColumn.chunk8.fJeannieJava$LogicalOrExpression)
21713: yyColumn.chunk8.fJeannieJava$LogicalOrExpression = pJeannieJava$LogicalOrExpression$1(yyStart);
21714: return yyColumn.chunk8.fJeannieJava$LogicalOrExpression;
21715: }
21716:
21717: /** Actually parse xtc.lang.jeannie.JeannieJava.LogicalOrExpression. */
21718: private Result pJeannieJava$LogicalOrExpression$1(final int yyStart)
21719: throws IOException {
21720:
21721: Result yyResult;
21722: int yyRepetition1;
21723: Pair<Action<Node>> yyRepValue1;
21724: Node yyValue;
21725: ParseError yyError = ParseError.DUMMY;
21726:
21727: // Alternative <Base>.
21728:
21729: yyResult = pJeannieJava$LogicalAndExpression(yyStart);
21730: yyError = yyResult.select(yyError);
21731: if (yyResult.hasValue()) {
21732: final Node v$3 = yyResult.semanticValue();
21733:
21734: yyRepetition1 = yyResult.index;
21735: yyRepValue1 = Pair.empty();
21736: while (true) {
21737:
21738: yyResult = pJeannieJava$LogicalOrExpression$$Tail1(yyRepetition1);
21739: yyError = yyResult.select(yyError);
21740: if (yyResult.hasValue()) {
21741: final Action<Node> v$4 = yyResult.semanticValue();
21742:
21743: yyRepetition1 = yyResult.index;
21744: yyRepValue1 = new Pair<Action<Node>>(v$4,
21745: yyRepValue1);
21746: continue;
21747: }
21748: break;
21749: }
21750: { // Start scope for v$5.
21751: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
21752:
21753: yyValue = apply(v$5, v$3, yyStart);
21754:
21755: return new SemanticValue(yyValue, yyRepetition1,
21756: yyError);
21757: } // End scope for v$5.
21758: }
21759:
21760: // Done.
21761: return yyError;
21762: }
21763:
21764: // =========================================================================
21765:
21766: /**
21767: * Parse synthetic nonterminal JeannieJava.LogicalOrExpression$$Tail1.
21768: *
21769: * @param yyStart The index.
21770: * @return The result.
21771: * @throws IOException Signals an I/O error.
21772: */
21773: private Result pJeannieJava$LogicalOrExpression$$Tail1(
21774: final int yyStart) throws IOException {
21775:
21776: Result yyResult;
21777: Action<Node> yyValue;
21778: ParseError yyError = ParseError.DUMMY;
21779:
21780: // Alternative <Or>.
21781:
21782: yyResult = pSymbol(yyStart);
21783: yyError = yyResult.select(yyError);
21784: if (yyResult.hasValue("||")) {
21785:
21786: yyResult = pJeannieJava$LogicalAndExpression(yyResult.index);
21787: yyError = yyResult.select(yyError);
21788: if (yyResult.hasValue()) {
21789: final Node v$g$2 = yyResult.semanticValue();
21790:
21791: yyValue = new Action<Node>() {
21792: public Node run(Node v$1) {
21793: return GNode.create("LogicalOrExpression", v$1,
21794: v$g$2);
21795: }
21796: };
21797:
21798: return yyResult.createValue(yyValue, yyError);
21799: }
21800: }
21801:
21802: // Done.
21803: yyError = yyError.select("logical or expression expected",
21804: yyStart);
21805: return yyError;
21806: }
21807:
21808: // =========================================================================
21809:
21810: /**
21811: * Parse nonterminal xtc.lang.jeannie.JeannieJava.LogicalAndExpression.
21812: *
21813: * @param yyStart The index.
21814: * @return The result.
21815: * @throws IOException Signals an I/O error.
21816: */
21817: private Result pJeannieJava$LogicalAndExpression(final int yyStart)
21818: throws IOException {
21819:
21820: Result yyResult;
21821: int yyRepetition1;
21822: Pair<Action<Node>> yyRepValue1;
21823: Node yyValue;
21824: ParseError yyError = ParseError.DUMMY;
21825:
21826: // Alternative <Base>.
21827:
21828: yyResult = pJeannieJava$BitwiseOrExpression(yyStart);
21829: yyError = yyResult.select(yyError);
21830: if (yyResult.hasValue()) {
21831: final Node v$3 = yyResult.semanticValue();
21832:
21833: yyRepetition1 = yyResult.index;
21834: yyRepValue1 = Pair.empty();
21835: while (true) {
21836:
21837: yyResult = pJeannieJava$LogicalAndExpression$$Tail1(yyRepetition1);
21838: yyError = yyResult.select(yyError);
21839: if (yyResult.hasValue()) {
21840: final Action<Node> v$4 = yyResult.semanticValue();
21841:
21842: yyRepetition1 = yyResult.index;
21843: yyRepValue1 = new Pair<Action<Node>>(v$4,
21844: yyRepValue1);
21845: continue;
21846: }
21847: break;
21848: }
21849: { // Start scope for v$5.
21850: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
21851:
21852: yyValue = apply(v$5, v$3, yyStart);
21853:
21854: return new SemanticValue(yyValue, yyRepetition1,
21855: yyError);
21856: } // End scope for v$5.
21857: }
21858:
21859: // Done.
21860: return yyError;
21861: }
21862:
21863: // =========================================================================
21864:
21865: /**
21866: * Parse synthetic nonterminal JeannieJava.LogicalAndExpression$$Tail1.
21867: *
21868: * @param yyStart The index.
21869: * @return The result.
21870: * @throws IOException Signals an I/O error.
21871: */
21872: private Result pJeannieJava$LogicalAndExpression$$Tail1(
21873: final int yyStart) throws IOException {
21874:
21875: Result yyResult;
21876: Action<Node> yyValue;
21877: ParseError yyError = ParseError.DUMMY;
21878:
21879: // Alternative <And>.
21880:
21881: yyResult = pSymbol(yyStart);
21882: yyError = yyResult.select(yyError);
21883: if (yyResult.hasValue("&&")) {
21884:
21885: yyResult = pJeannieJava$BitwiseOrExpression(yyResult.index);
21886: yyError = yyResult.select(yyError);
21887: if (yyResult.hasValue()) {
21888: final Node v$g$2 = yyResult.semanticValue();
21889:
21890: yyValue = new Action<Node>() {
21891: public Node run(Node v$1) {
21892: return GNode.create("LogicalAndExpression",
21893: v$1, v$g$2);
21894: }
21895: };
21896:
21897: return yyResult.createValue(yyValue, yyError);
21898: }
21899: }
21900:
21901: // Done.
21902: yyError = yyError.select("logical and expression expected",
21903: yyStart);
21904: return yyError;
21905: }
21906:
21907: // =========================================================================
21908:
21909: /**
21910: * Parse nonterminal xtc.lang.jeannie.JeannieJava.BitwiseOrExpression.
21911: *
21912: * @param yyStart The index.
21913: * @return The result.
21914: * @throws IOException Signals an I/O error.
21915: */
21916: private Result pJeannieJava$BitwiseOrExpression(final int yyStart)
21917: throws IOException {
21918:
21919: Result yyResult;
21920: int yyRepetition1;
21921: Pair<Action<Node>> yyRepValue1;
21922: Node yyValue;
21923: ParseError yyError = ParseError.DUMMY;
21924:
21925: // Alternative <Base>.
21926:
21927: yyResult = pJeannieJava$BitwiseXorExpression(yyStart);
21928: yyError = yyResult.select(yyError);
21929: if (yyResult.hasValue()) {
21930: final Node v$3 = yyResult.semanticValue();
21931:
21932: yyRepetition1 = yyResult.index;
21933: yyRepValue1 = Pair.empty();
21934: while (true) {
21935:
21936: yyResult = pJeannieJava$BitwiseOrExpression$$Tail1(yyRepetition1);
21937: yyError = yyResult.select(yyError);
21938: if (yyResult.hasValue()) {
21939: final Action<Node> v$4 = yyResult.semanticValue();
21940:
21941: yyRepetition1 = yyResult.index;
21942: yyRepValue1 = new Pair<Action<Node>>(v$4,
21943: yyRepValue1);
21944: continue;
21945: }
21946: break;
21947: }
21948: { // Start scope for v$5.
21949: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
21950:
21951: yyValue = apply(v$5, v$3, yyStart);
21952:
21953: return new SemanticValue(yyValue, yyRepetition1,
21954: yyError);
21955: } // End scope for v$5.
21956: }
21957:
21958: // Done.
21959: return yyError;
21960: }
21961:
21962: // =========================================================================
21963:
21964: /**
21965: * Parse synthetic nonterminal JeannieJava.BitwiseOrExpression$$Tail1.
21966: *
21967: * @param yyStart The index.
21968: * @return The result.
21969: * @throws IOException Signals an I/O error.
21970: */
21971: private Result pJeannieJava$BitwiseOrExpression$$Tail1(
21972: final int yyStart) throws IOException {
21973:
21974: Result yyResult;
21975: Action<Node> yyValue;
21976: ParseError yyError = ParseError.DUMMY;
21977:
21978: // Alternative <Or>.
21979:
21980: yyResult = pSymbol(yyStart);
21981: yyError = yyResult.select(yyError);
21982: if (yyResult.hasValue("|")) {
21983:
21984: yyResult = pJeannieJava$BitwiseXorExpression(yyResult.index);
21985: yyError = yyResult.select(yyError);
21986: if (yyResult.hasValue()) {
21987: final Node v$g$2 = yyResult.semanticValue();
21988:
21989: yyValue = new Action<Node>() {
21990: public Node run(Node v$1) {
21991: return GNode.create("BitwiseOrExpression", v$1,
21992: v$g$2);
21993: }
21994: };
21995:
21996: return yyResult.createValue(yyValue, yyError);
21997: }
21998: }
21999:
22000: // Done.
22001: yyError = yyError.select("bitwise or expression expected",
22002: yyStart);
22003: return yyError;
22004: }
22005:
22006: // =========================================================================
22007:
22008: /**
22009: * Parse nonterminal xtc.lang.jeannie.JeannieJava.BitwiseXorExpression.
22010: *
22011: * @param yyStart The index.
22012: * @return The result.
22013: * @throws IOException Signals an I/O error.
22014: */
22015: private Result pJeannieJava$BitwiseXorExpression(final int yyStart)
22016: throws IOException {
22017:
22018: Result yyResult;
22019: int yyRepetition1;
22020: Pair<Action<Node>> yyRepValue1;
22021: Node yyValue;
22022: ParseError yyError = ParseError.DUMMY;
22023:
22024: // Alternative <Base>.
22025:
22026: yyResult = pJeannieJava$BitwiseAndExpression(yyStart);
22027: yyError = yyResult.select(yyError);
22028: if (yyResult.hasValue()) {
22029: final Node v$3 = yyResult.semanticValue();
22030:
22031: yyRepetition1 = yyResult.index;
22032: yyRepValue1 = Pair.empty();
22033: while (true) {
22034:
22035: yyResult = pJeannieJava$BitwiseXorExpression$$Tail1(yyRepetition1);
22036: yyError = yyResult.select(yyError);
22037: if (yyResult.hasValue()) {
22038: final Action<Node> v$4 = yyResult.semanticValue();
22039:
22040: yyRepetition1 = yyResult.index;
22041: yyRepValue1 = new Pair<Action<Node>>(v$4,
22042: yyRepValue1);
22043: continue;
22044: }
22045: break;
22046: }
22047: { // Start scope for v$5.
22048: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
22049:
22050: yyValue = apply(v$5, v$3, yyStart);
22051:
22052: return new SemanticValue(yyValue, yyRepetition1,
22053: yyError);
22054: } // End scope for v$5.
22055: }
22056:
22057: // Done.
22058: return yyError;
22059: }
22060:
22061: // =========================================================================
22062:
22063: /**
22064: * Parse synthetic nonterminal JeannieJava.BitwiseXorExpression$$Tail1.
22065: *
22066: * @param yyStart The index.
22067: * @return The result.
22068: * @throws IOException Signals an I/O error.
22069: */
22070: private Result pJeannieJava$BitwiseXorExpression$$Tail1(
22071: final int yyStart) throws IOException {
22072:
22073: Result yyResult;
22074: Action<Node> yyValue;
22075: ParseError yyError = ParseError.DUMMY;
22076:
22077: // Alternative <Xor>.
22078:
22079: yyResult = pSymbol(yyStart);
22080: yyError = yyResult.select(yyError);
22081: if (yyResult.hasValue("^")) {
22082:
22083: yyResult = pJeannieJava$BitwiseAndExpression(yyResult.index);
22084: yyError = yyResult.select(yyError);
22085: if (yyResult.hasValue()) {
22086: final Node v$g$2 = yyResult.semanticValue();
22087:
22088: yyValue = new Action<Node>() {
22089: public Node run(Node v$1) {
22090: return GNode.create("BitwiseXorExpression",
22091: v$1, v$g$2);
22092: }
22093: };
22094:
22095: return yyResult.createValue(yyValue, yyError);
22096: }
22097: }
22098:
22099: // Done.
22100: yyError = yyError.select("bitwise xor expression expected",
22101: yyStart);
22102: return yyError;
22103: }
22104:
22105: // =========================================================================
22106:
22107: /**
22108: * Parse nonterminal xtc.lang.jeannie.JeannieJava.BitwiseAndExpression.
22109: *
22110: * @param yyStart The index.
22111: * @return The result.
22112: * @throws IOException Signals an I/O error.
22113: */
22114: private Result pJeannieJava$BitwiseAndExpression(final int yyStart)
22115: throws IOException {
22116:
22117: Result yyResult;
22118: int yyRepetition1;
22119: Pair<Action<Node>> yyRepValue1;
22120: Node yyValue;
22121: ParseError yyError = ParseError.DUMMY;
22122:
22123: // Alternative <Base>.
22124:
22125: yyResult = pJeannieJava$EqualityExpression(yyStart);
22126: yyError = yyResult.select(yyError);
22127: if (yyResult.hasValue()) {
22128: final Node v$3 = yyResult.semanticValue();
22129:
22130: yyRepetition1 = yyResult.index;
22131: yyRepValue1 = Pair.empty();
22132: while (true) {
22133:
22134: yyResult = pJeannieJava$BitwiseAndExpression$$Tail1(yyRepetition1);
22135: yyError = yyResult.select(yyError);
22136: if (yyResult.hasValue()) {
22137: final Action<Node> v$4 = yyResult.semanticValue();
22138:
22139: yyRepetition1 = yyResult.index;
22140: yyRepValue1 = new Pair<Action<Node>>(v$4,
22141: yyRepValue1);
22142: continue;
22143: }
22144: break;
22145: }
22146: { // Start scope for v$5.
22147: final Pair<Action<Node>> v$5 = yyRepValue1.reverse();
22148:
22149: yyValue = apply(v$5, v$3, yyStart);
22150:
22151: return new SemanticValue(yyValue, yyRepetition1,
22152: yyError);
22153: } // End scope for v$5.
22154: }
22155:
22156: // Done.
22157: return yyError;
22158: }
22159:
22160: // =========================================================================
22161:
22162: /**
22163: * Parse synthetic nonterminal JeannieJava.BitwiseAndExpression$$Tail1.
22164: *
22165: * @param yyStart The index.
22166: * @return The result.
22167: * @throws IOException Signals an I/O error.
22168: */
22169: private Result pJeannieJava$BitwiseAndExpression$$Tail1(
22170: final int yyStart) throws IOException {
22171:
22172: Result yyResult;
22173: Action<Node> yyValue;
22174: ParseError yyError = ParseError.DUMMY;
22175:
22176: // Alternative <And>.
22177:
22178: yyResult = pSymbol(yyStart);
22179: yyError = yyResult.select(yyError);
22180: if (yyResult.hasValue("&")) {
22181:
22182: yyResult = pJeannieJava$EqualityExpression(yyResult.index);
22183: yyError = yyResult.select(yyError);
22184: if (yyResult.hasValue()) {
22185: final Node v$g$2 = yyResult.semanticValue();
22186:
22187: yyValue = new Action<Node>() {
22188: public Node run(Node v$1) {
22189: return GNode.create("BitwiseAndExpression",
22190: v$1, v$g$2);
22191: }
22192: };
22193:
22194: return yyResult.createValue(yyValue, yyError);
22195: }
22196: }
22197:
22198: // Done.
22199: yyError = yyError.select("bitwise and expression expected",
22200: yyStart);
22201: return yyError;
22202: }
22203:
22204: // =========================================================================
22205:
22206: /**
22207: * Parse nonterminal xtc.lang.jeannie.JeannieJava.EqualityExpression.
22208: *
22209: * @param yyStart The index.
22210: * @return The result.
22211: * @throws IOException Signals an I/O error.
22212: */
22213: private Result pJeannieJava$EqualityExpression(final int yyStart)
22214: throws IOException {
22215:
22216: Result yyResult;
22217: int yyRepetition1;
22218: Pair<Action<Node>> yyRepValue1;
22219: Node yyValue;
22220: ParseError yyError = ParseError.DUMMY;
22221:
22222: // Alternative <Base>.
22223:
22224: yyResult = pInstanceOfExpression(yyStart);
22225: yyError = yyResult.select(yyError);
22226: if (yyResult.hasValue()) {
22227: final Node v$4 = yyResult.semanticValue();
22228:
22229: yyRepetition1 = yyResult.index;
22230: yyRepValue1 = Pair.empty();
22231: while (true) {
22232:
22233: yyResult = pJeannieJava$EqualityExpression$$Tail1(yyRepetition1);
22234: yyError = yyResult.select(yyError);
22235: if (yyResult.hasValue()) {
22236: final Action<Node> v$5 = yyResult.semanticValue();
22237:
22238: yyRepetition1 = yyResult.index;
22239: yyRepValue1 = new Pair<Action<Node>>(v$5,
22240: yyRepValue1);
22241: continue;
22242: }
22243: break;
22244: }
22245: { // Start scope for v$6.
22246: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
22247:
22248: yyValue = apply(v$6, v$4, yyStart);
22249:
22250: return new SemanticValue(yyValue, yyRepetition1,
22251: yyError);
22252: } // End scope for v$6.
22253: }
22254:
22255: // Done.
22256: return yyError;
22257: }
22258:
22259: // =========================================================================
22260:
22261: /**
22262: * Parse synthetic nonterminal JeannieJava.EqualityExpression$$Tail1.
22263: *
22264: * @param yyStart The index.
22265: * @return The result.
22266: * @throws IOException Signals an I/O error.
22267: */
22268: private Result pJeannieJava$EqualityExpression$$Tail1(
22269: final int yyStart) throws IOException {
22270:
22271: Result yyResult;
22272: Action<Node> yyValue;
22273: ParseError yyError = ParseError.DUMMY;
22274:
22275: // Alternative <Recursion>.
22276:
22277: yyResult = p$$Shared7(yyStart);
22278: yyError = yyResult.select(yyError);
22279: if (yyResult.hasValue()) {
22280: final String v$g$2 = yyResult.semanticValue();
22281:
22282: yyResult = pInstanceOfExpression(yyResult.index);
22283: yyError = yyResult.select(yyError);
22284: if (yyResult.hasValue()) {
22285: final Node v$g$3 = yyResult.semanticValue();
22286:
22287: yyValue = new Action<Node>() {
22288: public Node run(Node v$1) {
22289: return GNode.create("EqualityExpression", v$1,
22290: v$g$2, v$g$3);
22291: }
22292: };
22293:
22294: return yyResult.createValue(yyValue, yyError);
22295: }
22296: }
22297:
22298: // Done.
22299: return yyError;
22300: }
22301:
22302: // =========================================================================
22303:
22304: /**
22305: * Parse nonterminal xtc.lang.jeannie.JeannieJava.InstanceOfExpression.
22306: *
22307: * @param yyStart The index.
22308: * @return The result.
22309: * @throws IOException Signals an I/O error.
22310: */
22311: private Result pInstanceOfExpression(final int yyStart)
22312: throws IOException {
22313: Result yyResult;
22314: int yyBase;
22315: Node yyValue;
22316: ParseError yyError = ParseError.DUMMY;
22317:
22318: // Alternative <Instanceof>.
22319:
22320: yyResult = pJeannieJava$RelationalExpression(yyStart);
22321: yyError = yyResult.select(yyError);
22322: if (yyResult.hasValue()) {
22323: final Node v$g$1 = yyResult.semanticValue();
22324:
22325: yyBase = yyResult.index;
22326: yyResult = pJavaIdentifier$Word(yyBase);
22327: yyError = yyResult.select(yyError);
22328: if (yyResult.hasValue("instanceof")) {
22329:
22330: yyResult = pType(yyResult.index);
22331: yyError = yyResult.select(yyError);
22332: if (yyResult.hasValue()) {
22333: final Node v$g$2 = yyResult.semanticValue();
22334:
22335: yyValue = GNode.create("InstanceOfExpression",
22336: v$g$1, v$g$2);
22337: yyValue.setLocation(location(yyStart));
22338:
22339: return yyResult.createValue(yyValue, yyError);
22340: }
22341: } else {
22342: yyError = yyError.select("\"instanceof\" expected",
22343: yyBase);
22344: }
22345: }
22346:
22347: // Alternative <Base>.
22348:
22349: yyResult = pJeannieJava$RelationalExpression(yyStart);
22350: yyError = yyResult.select(yyError);
22351: if (yyResult.hasValue()) {
22352: yyValue = yyResult.semanticValue();
22353:
22354: return yyResult.createValue(yyValue, yyError);
22355: }
22356:
22357: // Done.
22358: return yyError;
22359: }
22360:
22361: // =========================================================================
22362:
22363: /**
22364: * Parse nonterminal xtc.lang.jeannie.JeannieJava.RelationalExpression.
22365: *
22366: * @param yyStart The index.
22367: * @return The result.
22368: * @throws IOException Signals an I/O error.
22369: */
22370: private Result pJeannieJava$RelationalExpression(final int yyStart)
22371: throws IOException {
22372:
22373: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
22374: if (null == yyColumn.chunk8)
22375: yyColumn.chunk8 = new Chunk8();
22376: if (null == yyColumn.chunk8.fJeannieJava$RelationalExpression)
22377: yyColumn.chunk8.fJeannieJava$RelationalExpression = pJeannieJava$RelationalExpression$1(yyStart);
22378: return yyColumn.chunk8.fJeannieJava$RelationalExpression;
22379: }
22380:
22381: /** Actually parse xtc.lang.jeannie.JeannieJava.RelationalExpression. */
22382: private Result pJeannieJava$RelationalExpression$1(final int yyStart)
22383: throws IOException {
22384:
22385: Result yyResult;
22386: int yyRepetition1;
22387: Pair<Action<Node>> yyRepValue1;
22388: Node yyValue;
22389: ParseError yyError = ParseError.DUMMY;
22390:
22391: // Alternative <Base>.
22392:
22393: yyResult = pJeannieJava$ShiftExpression(yyStart);
22394: yyError = yyResult.select(yyError);
22395: if (yyResult.hasValue()) {
22396: final Node v$4 = yyResult.semanticValue();
22397:
22398: yyRepetition1 = yyResult.index;
22399: yyRepValue1 = Pair.empty();
22400: while (true) {
22401:
22402: yyResult = pJeannieJava$RelationalExpression$$Tail1(yyRepetition1);
22403: yyError = yyResult.select(yyError);
22404: if (yyResult.hasValue()) {
22405: final Action<Node> v$5 = yyResult.semanticValue();
22406:
22407: yyRepetition1 = yyResult.index;
22408: yyRepValue1 = new Pair<Action<Node>>(v$5,
22409: yyRepValue1);
22410: continue;
22411: }
22412: break;
22413: }
22414: { // Start scope for v$6.
22415: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
22416:
22417: yyValue = apply(v$6, v$4, yyStart);
22418:
22419: return new SemanticValue(yyValue, yyRepetition1,
22420: yyError);
22421: } // End scope for v$6.
22422: }
22423:
22424: // Done.
22425: return yyError;
22426: }
22427:
22428: // =========================================================================
22429:
22430: /**
22431: * Parse synthetic nonterminal JeannieJava.RelationalExpression$$Tail1.
22432: *
22433: * @param yyStart The index.
22434: * @return The result.
22435: * @throws IOException Signals an I/O error.
22436: */
22437: private Result pJeannieJava$RelationalExpression$$Tail1(
22438: final int yyStart) throws IOException {
22439:
22440: Result yyResult;
22441: Action<Node> yyValue;
22442: ParseError yyError = ParseError.DUMMY;
22443:
22444: // Alternative <Recursion>.
22445:
22446: yyResult = pJeannieJava$RelationalOperator(yyStart);
22447: yyError = yyResult.select(yyError);
22448: if (yyResult.hasValue()) {
22449: final String v$g$2 = yyResult.semanticValue();
22450:
22451: yyResult = pJeannieJava$ShiftExpression(yyResult.index);
22452: yyError = yyResult.select(yyError);
22453: if (yyResult.hasValue()) {
22454: final Node v$g$3 = yyResult.semanticValue();
22455:
22456: yyValue = new Action<Node>() {
22457: public Node run(Node v$1) {
22458: return GNode.create("RelationalExpression",
22459: v$1, v$g$2, v$g$3);
22460: }
22461: };
22462:
22463: return yyResult.createValue(yyValue, yyError);
22464: }
22465: }
22466:
22467: // Done.
22468: return yyError;
22469: }
22470:
22471: // =========================================================================
22472:
22473: /**
22474: * Parse nonterminal xtc.lang.jeannie.JeannieJava.RelationalOperator.
22475: *
22476: * @param yyStart The index.
22477: * @return The result.
22478: * @throws IOException Signals an I/O error.
22479: */
22480: private Result pJeannieJava$RelationalOperator(final int yyStart)
22481: throws IOException {
22482:
22483: Result yyResult;
22484: String yyValue;
22485: ParseError yyError = ParseError.DUMMY;
22486:
22487: // Alternative <Less>.
22488:
22489: yyResult = pSymbol(yyStart);
22490: yyError = yyResult.select(yyError);
22491: if (yyResult.hasValue("<")) {
22492: yyValue = "<";
22493:
22494: return yyResult.createValue(yyValue, yyError);
22495: }
22496:
22497: // Alternative <Greater>.
22498:
22499: yyResult = pSymbol(yyStart);
22500: yyError = yyResult.select(yyError);
22501: if (yyResult.hasValue(">")) {
22502: yyValue = ">";
22503:
22504: return yyResult.createValue(yyValue, yyError);
22505: }
22506:
22507: // Alternative <LessEqual>.
22508:
22509: yyResult = pSymbol(yyStart);
22510: yyError = yyResult.select(yyError);
22511: if (yyResult.hasValue("<=")) {
22512: yyValue = "<=";
22513:
22514: return yyResult.createValue(yyValue, yyError);
22515: }
22516:
22517: // Alternative <GreaterEqual>.
22518:
22519: yyResult = pSymbol(yyStart);
22520: yyError = yyResult.select(yyError);
22521: if (yyResult.hasValue(">=")) {
22522: yyValue = ">=";
22523:
22524: return yyResult.createValue(yyValue, yyError);
22525: }
22526:
22527: // Done.
22528: yyError = yyError.select("relational operator expected",
22529: yyStart);
22530: return yyError;
22531: }
22532:
22533: // =========================================================================
22534:
22535: /**
22536: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ShiftExpression.
22537: *
22538: * @param yyStart The index.
22539: * @return The result.
22540: * @throws IOException Signals an I/O error.
22541: */
22542: private Result pJeannieJava$ShiftExpression(final int yyStart)
22543: throws IOException {
22544:
22545: Result yyResult;
22546: int yyRepetition1;
22547: Pair<Action<Node>> yyRepValue1;
22548: Node yyValue;
22549: ParseError yyError = ParseError.DUMMY;
22550:
22551: // Alternative <Base>.
22552:
22553: yyResult = pJeannieJava$AdditiveExpression(yyStart);
22554: yyError = yyResult.select(yyError);
22555: if (yyResult.hasValue()) {
22556: final Node v$4 = yyResult.semanticValue();
22557:
22558: yyRepetition1 = yyResult.index;
22559: yyRepValue1 = Pair.empty();
22560: while (true) {
22561:
22562: yyResult = pJeannieJava$ShiftExpression$$Tail1(yyRepetition1);
22563: yyError = yyResult.select(yyError);
22564: if (yyResult.hasValue()) {
22565: final Action<Node> v$5 = yyResult.semanticValue();
22566:
22567: yyRepetition1 = yyResult.index;
22568: yyRepValue1 = new Pair<Action<Node>>(v$5,
22569: yyRepValue1);
22570: continue;
22571: }
22572: break;
22573: }
22574: { // Start scope for v$6.
22575: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
22576:
22577: yyValue = apply(v$6, v$4, yyStart);
22578:
22579: return new SemanticValue(yyValue, yyRepetition1,
22580: yyError);
22581: } // End scope for v$6.
22582: }
22583:
22584: // Done.
22585: return yyError;
22586: }
22587:
22588: // =========================================================================
22589:
22590: /**
22591: * Parse synthetic nonterminal JeannieJava.ShiftExpression$$Tail1.
22592: *
22593: * @param yyStart The index.
22594: * @return The result.
22595: * @throws IOException Signals an I/O error.
22596: */
22597: private Result pJeannieJava$ShiftExpression$$Tail1(final int yyStart)
22598: throws IOException {
22599:
22600: Result yyResult;
22601: Action<Node> yyValue;
22602: ParseError yyError = ParseError.DUMMY;
22603:
22604: // Alternative <Recursion>.
22605:
22606: yyResult = pJeannieJava$ShiftOperator(yyStart);
22607: yyError = yyResult.select(yyError);
22608: if (yyResult.hasValue()) {
22609: final String v$g$2 = yyResult.semanticValue();
22610:
22611: yyResult = pJeannieJava$AdditiveExpression(yyResult.index);
22612: yyError = yyResult.select(yyError);
22613: if (yyResult.hasValue()) {
22614: final Node v$g$3 = yyResult.semanticValue();
22615:
22616: yyValue = new Action<Node>() {
22617: public Node run(Node v$1) {
22618: return GNode.create("ShiftExpression", v$1,
22619: v$g$2, v$g$3);
22620: }
22621: };
22622:
22623: return yyResult.createValue(yyValue, yyError);
22624: }
22625: }
22626:
22627: // Done.
22628: return yyError;
22629: }
22630:
22631: // =========================================================================
22632:
22633: /**
22634: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ShiftOperator.
22635: *
22636: * @param yyStart The index.
22637: * @return The result.
22638: * @throws IOException Signals an I/O error.
22639: */
22640: private Result pJeannieJava$ShiftOperator(final int yyStart)
22641: throws IOException {
22642:
22643: Result yyResult;
22644: String yyValue;
22645: ParseError yyError = ParseError.DUMMY;
22646:
22647: // Alternative <Left>.
22648:
22649: yyResult = pSymbol(yyStart);
22650: yyError = yyResult.select(yyError);
22651: if (yyResult.hasValue("<<")) {
22652: yyValue = "<<";
22653:
22654: return yyResult.createValue(yyValue, yyError);
22655: }
22656:
22657: // Alternative <Right>.
22658:
22659: yyResult = pSymbol(yyStart);
22660: yyError = yyResult.select(yyError);
22661: if (yyResult.hasValue(">>")) {
22662: yyValue = ">>";
22663:
22664: return yyResult.createValue(yyValue, yyError);
22665: }
22666:
22667: // Alternative <UnsignedRight>.
22668:
22669: yyResult = pSymbol(yyStart);
22670: yyError = yyResult.select(yyError);
22671: if (yyResult.hasValue(">>>")) {
22672: yyValue = ">>>";
22673:
22674: return yyResult.createValue(yyValue, yyError);
22675: }
22676:
22677: // Done.
22678: yyError = yyError.select("shift operator expected", yyStart);
22679: return yyError;
22680: }
22681:
22682: // =========================================================================
22683:
22684: /**
22685: * Parse nonterminal xtc.lang.jeannie.JeannieJava.AdditiveExpression.
22686: *
22687: * @param yyStart The index.
22688: * @return The result.
22689: * @throws IOException Signals an I/O error.
22690: */
22691: private Result pJeannieJava$AdditiveExpression(final int yyStart)
22692: throws IOException {
22693:
22694: Result yyResult;
22695: int yyRepetition1;
22696: Pair<Action<Node>> yyRepValue1;
22697: Node yyValue;
22698: ParseError yyError = ParseError.DUMMY;
22699:
22700: // Alternative <Base>.
22701:
22702: yyResult = pJeannieJava$MultiplicativeExpression(yyStart);
22703: yyError = yyResult.select(yyError);
22704: if (yyResult.hasValue()) {
22705: final Node v$4 = yyResult.semanticValue();
22706:
22707: yyRepetition1 = yyResult.index;
22708: yyRepValue1 = Pair.empty();
22709: while (true) {
22710:
22711: yyResult = pJeannieJava$AdditiveExpression$$Tail1(yyRepetition1);
22712: yyError = yyResult.select(yyError);
22713: if (yyResult.hasValue()) {
22714: final Action<Node> v$5 = yyResult.semanticValue();
22715:
22716: yyRepetition1 = yyResult.index;
22717: yyRepValue1 = new Pair<Action<Node>>(v$5,
22718: yyRepValue1);
22719: continue;
22720: }
22721: break;
22722: }
22723: { // Start scope for v$6.
22724: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
22725:
22726: yyValue = apply(v$6, v$4, yyStart);
22727:
22728: return new SemanticValue(yyValue, yyRepetition1,
22729: yyError);
22730: } // End scope for v$6.
22731: }
22732:
22733: // Done.
22734: return yyError;
22735: }
22736:
22737: // =========================================================================
22738:
22739: /**
22740: * Parse synthetic nonterminal JeannieJava.AdditiveExpression$$Tail1.
22741: *
22742: * @param yyStart The index.
22743: * @return The result.
22744: * @throws IOException Signals an I/O error.
22745: */
22746: private Result pJeannieJava$AdditiveExpression$$Tail1(
22747: final int yyStart) throws IOException {
22748:
22749: Result yyResult;
22750: Action<Node> yyValue;
22751: ParseError yyError = ParseError.DUMMY;
22752:
22753: // Alternative <Recursion>.
22754:
22755: yyResult = p$$Shared8(yyStart);
22756: yyError = yyResult.select(yyError);
22757: if (yyResult.hasValue()) {
22758: final String v$g$2 = yyResult.semanticValue();
22759:
22760: yyResult = pJeannieJava$MultiplicativeExpression(yyResult.index);
22761: yyError = yyResult.select(yyError);
22762: if (yyResult.hasValue()) {
22763: final Node v$g$3 = yyResult.semanticValue();
22764:
22765: yyValue = new Action<Node>() {
22766: public Node run(Node v$1) {
22767: return GNode.create("AdditiveExpression", v$1,
22768: v$g$2, v$g$3);
22769: }
22770: };
22771:
22772: return yyResult.createValue(yyValue, yyError);
22773: }
22774: }
22775:
22776: // Done.
22777: return yyError;
22778: }
22779:
22780: // =========================================================================
22781:
22782: /**
22783: * Parse nonterminal xtc.lang.jeannie.JeannieJava.MultiplicativeExpression.
22784: *
22785: * @param yyStart The index.
22786: * @return The result.
22787: * @throws IOException Signals an I/O error.
22788: */
22789: private Result pJeannieJava$MultiplicativeExpression(
22790: final int yyStart) throws IOException {
22791:
22792: Result yyResult;
22793: int yyRepetition1;
22794: Pair<Action<Node>> yyRepValue1;
22795: Node yyValue;
22796: ParseError yyError = ParseError.DUMMY;
22797:
22798: // Alternative <Base>.
22799:
22800: yyResult = pJeannieJava$UnaryExpression(yyStart);
22801: yyError = yyResult.select(yyError);
22802: if (yyResult.hasValue()) {
22803: final Node v$4 = yyResult.semanticValue();
22804:
22805: yyRepetition1 = yyResult.index;
22806: yyRepValue1 = Pair.empty();
22807: while (true) {
22808:
22809: yyResult = pJeannieJava$MultiplicativeExpression$$Tail1(yyRepetition1);
22810: yyError = yyResult.select(yyError);
22811: if (yyResult.hasValue()) {
22812: final Action<Node> v$5 = yyResult.semanticValue();
22813:
22814: yyRepetition1 = yyResult.index;
22815: yyRepValue1 = new Pair<Action<Node>>(v$5,
22816: yyRepValue1);
22817: continue;
22818: }
22819: break;
22820: }
22821: { // Start scope for v$6.
22822: final Pair<Action<Node>> v$6 = yyRepValue1.reverse();
22823:
22824: yyValue = apply(v$6, v$4, yyStart);
22825:
22826: return new SemanticValue(yyValue, yyRepetition1,
22827: yyError);
22828: } // End scope for v$6.
22829: }
22830:
22831: // Done.
22832: return yyError;
22833: }
22834:
22835: // =========================================================================
22836:
22837: /**
22838: * Parse synthetic nonterminal JeannieJava.MultiplicativeExpression$$Tail1.
22839: *
22840: * @param yyStart The index.
22841: * @return The result.
22842: * @throws IOException Signals an I/O error.
22843: */
22844: private Result pJeannieJava$MultiplicativeExpression$$Tail1(
22845: final int yyStart) throws IOException {
22846:
22847: Result yyResult;
22848: Action<Node> yyValue;
22849: ParseError yyError = ParseError.DUMMY;
22850:
22851: // Alternative <Times>.
22852:
22853: yyResult = p$$Shared9(yyStart);
22854: yyError = yyResult.select(yyError);
22855: if (yyResult.hasValue()) {
22856: final String v$g$2 = yyResult.semanticValue();
22857:
22858: yyResult = pJeannieJava$UnaryExpression(yyResult.index);
22859: yyError = yyResult.select(yyError);
22860: if (yyResult.hasValue()) {
22861: final Node v$g$3 = yyResult.semanticValue();
22862:
22863: yyValue = new Action<Node>() {
22864: public Node run(Node v$1) {
22865: return GNode.create("MultiplicativeExpression",
22866: v$1, v$g$2, v$g$3);
22867: }
22868: };
22869:
22870: return yyResult.createValue(yyValue, yyError);
22871: }
22872: }
22873:
22874: // Done.
22875: return yyError;
22876: }
22877:
22878: // =========================================================================
22879:
22880: /**
22881: * Parse nonterminal xtc.lang.jeannie.JeannieJava.UnaryExpression.
22882: *
22883: * @param yyStart The index.
22884: * @return The result.
22885: * @throws IOException Signals an I/O error.
22886: */
22887: private Result pJeannieJava$UnaryExpression(final int yyStart)
22888: throws IOException {
22889:
22890: Result yyResult;
22891: Node yyValue;
22892: ParseError yyError = ParseError.DUMMY;
22893:
22894: // Alternative <Plus>.
22895:
22896: yyResult = pSymbol(yyStart);
22897: yyError = yyResult.select(yyError);
22898: if (yyResult.hasValue("+")) {
22899: final String v$g$1 = "+";
22900:
22901: yyResult = pJeannieJava$UnaryExpression(yyResult.index);
22902: yyError = yyResult.select(yyError);
22903: if (yyResult.hasValue()) {
22904: final Node v$g$2 = yyResult.semanticValue();
22905:
22906: yyValue = GNode.create("UnaryExpression", v$g$1, v$g$2);
22907: yyValue.setLocation(location(yyStart));
22908:
22909: return yyResult.createValue(yyValue, yyError);
22910: }
22911: }
22912:
22913: // Alternative <Minus>.
22914:
22915: yyResult = pSymbol(yyStart);
22916: yyError = yyResult.select(yyError);
22917: if (yyResult.hasValue("-")) {
22918: final String v$g$3 = "-";
22919:
22920: yyResult = pJeannieJava$UnaryExpression(yyResult.index);
22921: yyError = yyResult.select(yyError);
22922: if (yyResult.hasValue()) {
22923: final Node v$g$4 = yyResult.semanticValue();
22924:
22925: yyValue = GNode.create("UnaryExpression", v$g$3, v$g$4);
22926: yyValue.setLocation(location(yyStart));
22927:
22928: return yyResult.createValue(yyValue, yyError);
22929: }
22930: }
22931:
22932: // Alternative <Increment>.
22933:
22934: yyResult = pSymbol(yyStart);
22935: yyError = yyResult.select(yyError);
22936: if (yyResult.hasValue("++")) {
22937: final String v$g$5 = "++";
22938:
22939: yyResult = pJeannieJava$UnaryExpression(yyResult.index);
22940: yyError = yyResult.select(yyError);
22941: if (yyResult.hasValue()) {
22942: final Node v$g$6 = yyResult.semanticValue();
22943:
22944: yyValue = GNode.create("UnaryExpression", v$g$5, v$g$6);
22945: yyValue.setLocation(location(yyStart));
22946:
22947: return yyResult.createValue(yyValue, yyError);
22948: }
22949: }
22950:
22951: // Alternative <Decrement>.
22952:
22953: yyResult = pSymbol(yyStart);
22954: yyError = yyResult.select(yyError);
22955: if (yyResult.hasValue("--")) {
22956: final String v$g$7 = "--";
22957:
22958: yyResult = pJeannieJava$UnaryExpression(yyResult.index);
22959: yyError = yyResult.select(yyError);
22960: if (yyResult.hasValue()) {
22961: final Node v$g$8 = yyResult.semanticValue();
22962:
22963: yyValue = GNode.create("UnaryExpression", v$g$7, v$g$8);
22964: yyValue.setLocation(location(yyStart));
22965:
22966: return yyResult.createValue(yyValue, yyError);
22967: }
22968: }
22969:
22970: // Alternative <Base>.
22971:
22972: yyResult = pUnaryExpressionNotPlusMinus(yyStart);
22973: yyError = yyResult.select(yyError);
22974: if (yyResult.hasValue()) {
22975: yyValue = yyResult.semanticValue();
22976:
22977: return yyResult.createValue(yyValue, yyError);
22978: }
22979:
22980: // Done.
22981: yyError = yyError.select("unary expression expected", yyStart);
22982: return yyError;
22983: }
22984:
22985: // =========================================================================
22986:
22987: /**
22988: * Parse nonterminal
22989: * xtc.lang.jeannie.JeannieJava.UnaryExpressionNotPlusMinus.
22990: *
22991: * @param yyStart The index.
22992: * @return The result.
22993: * @throws IOException Signals an I/O error.
22994: */
22995: private Result pUnaryExpressionNotPlusMinus(final int yyStart)
22996: throws IOException {
22997:
22998: Result yyResult;
22999: int yyBase;
23000: int yyOption1;
23001: Node yyOpValue1;
23002: Node yyValue;
23003: ParseError yyError = ParseError.DUMMY;
23004:
23005: // Alternative 1.
23006:
23007: yyResult = pSymbol(yyStart);
23008: yyError = yyResult.select(yyError);
23009: if (yyResult.hasValue("~")) {
23010:
23011: yyResult = pJeannieJava$UnaryExpression(yyResult.index);
23012: yyError = yyResult.select(yyError);
23013: if (yyResult.hasValue()) {
23014: final Node v$g$1 = yyResult.semanticValue();
23015:
23016: yyValue = GNode.create("BitwiseNegationExpression",
23017: v$g$1);
23018: yyValue.setLocation(location(yyStart));
23019:
23020: return yyResult.createValue(yyValue, yyError);
23021: }
23022: }
23023:
23024: // Alternative <CInJavaExpression>.
23025:
23026: yyResult = pCInJavaExpression(yyStart);
23027: yyError = yyResult.select(yyError);
23028: if (yyResult.hasValue()) {
23029: yyValue = yyResult.semanticValue();
23030:
23031: return yyResult.createValue(yyValue, yyError);
23032: }
23033:
23034: // Alternative 3.
23035:
23036: yyResult = pSymbol(yyStart);
23037: yyError = yyResult.select(yyError);
23038: if (yyResult.hasValue("!")) {
23039:
23040: yyResult = pJeannieJava$UnaryExpression(yyResult.index);
23041: yyError = yyResult.select(yyError);
23042: if (yyResult.hasValue()) {
23043: final Node v$g$1 = yyResult.semanticValue();
23044:
23045: yyValue = GNode.create("LogicalNegationExpression",
23046: v$g$1);
23047: yyValue.setLocation(location(yyStart));
23048:
23049: return yyResult.createValue(yyValue, yyError);
23050: }
23051: }
23052:
23053: // Alternative 4.
23054:
23055: yyResult = pSymbol(yyStart);
23056: yyError = yyResult.select(yyError);
23057: if (yyResult.hasValue("(")) {
23058:
23059: final int yyChoice1 = yyResult.index;
23060:
23061: // Nested alternative 1.
23062:
23063: yyResult = pPrimitiveType(yyChoice1);
23064: yyError = yyResult.select(yyError);
23065: if (yyResult.hasValue()) {
23066: final Node v$g$1 = yyResult.semanticValue();
23067:
23068: yyOption1 = yyResult.index;
23069: yyOpValue1 = null;
23070:
23071: yyResult = pDimensions(yyOption1);
23072: yyError = yyResult.select(yyError);
23073: if (yyResult.hasValue()) {
23074: final Node v$el$1 = yyResult.semanticValue();
23075:
23076: yyOption1 = yyResult.index;
23077: yyOpValue1 = v$el$1;
23078: }
23079: { // Start scope for v$g$2.
23080: final Node v$g$2 = yyOpValue1;
23081:
23082: yyBase = yyOption1;
23083: yyResult = pSymbol(yyBase);
23084: yyError = yyResult.select(yyError);
23085: if (yyResult.hasValue(")")) {
23086:
23087: yyResult = pJeannieJava$UnaryExpression(yyResult.index);
23088: yyError = yyResult.select(yyError);
23089: if (yyResult.hasValue()) {
23090: final Node v$g$3 = yyResult.semanticValue();
23091:
23092: yyValue = GNode.create(
23093: "BasicCastExpression", v$g$1,
23094: v$g$2, v$g$3);
23095: yyValue.setLocation(location(yyStart));
23096:
23097: return yyResult.createValue(yyValue,
23098: yyError);
23099: }
23100: } else {
23101: yyError = yyError.select("\")\" expected",
23102: yyBase);
23103: }
23104: } // End scope for v$g$2.
23105: }
23106:
23107: // Nested alternative 2.
23108:
23109: yyResult = pType(yyChoice1);
23110: yyError = yyResult.select(yyError);
23111: if (yyResult.hasValue()) {
23112: final Node v$g$1 = yyResult.semanticValue();
23113:
23114: yyBase = yyResult.index;
23115: yyResult = pSymbol(yyBase);
23116: yyError = yyResult.select(yyError);
23117: if (yyResult.hasValue(")")) {
23118:
23119: yyResult = pUnaryExpressionNotPlusMinus(yyResult.index);
23120: yyError = yyResult.select(yyError);
23121: if (yyResult.hasValue()) {
23122: final Node v$g$2 = yyResult.semanticValue();
23123:
23124: yyValue = GNode.create("CastExpression", v$g$1,
23125: v$g$2);
23126: yyValue.setLocation(location(yyStart));
23127:
23128: return yyResult.createValue(yyValue, yyError);
23129: }
23130: } else {
23131: yyError = yyError.select("\")\" expected", yyBase);
23132: }
23133: }
23134: }
23135:
23136: // Alternative <Base>.
23137:
23138: yyResult = pJeannieJava$PostfixExpression(yyStart);
23139: yyError = yyResult.select(yyError);
23140: if (yyResult.hasValue()) {
23141: yyValue = yyResult.semanticValue();
23142:
23143: return yyResult.createValue(yyValue, yyError);
23144: }
23145:
23146: // Done.
23147: yyError = yyError.select(
23148: "unary expression not plus minus expected", yyStart);
23149: return yyError;
23150: }
23151:
23152: // =========================================================================
23153:
23154: /**
23155: * Parse nonterminal xtc.lang.jeannie.JeannieJava.PostfixExpression.
23156: *
23157: * @param yyStart The index.
23158: * @return The result.
23159: * @throws IOException Signals an I/O error.
23160: */
23161: private Result pJeannieJava$PostfixExpression(final int yyStart)
23162: throws IOException {
23163:
23164: Result yyResult;
23165: int yyRepetition1;
23166: Pair<Action<Node>> yyRepValue1;
23167: Node yyValue;
23168: ParseError yyError = ParseError.DUMMY;
23169:
23170: // Alternative <Base>.
23171:
23172: yyResult = pJeannieJava$PrimaryExpression(yyStart);
23173: yyError = yyResult.select(yyError);
23174: if (yyResult.hasValue()) {
23175: final Node v$g$15 = yyResult.semanticValue();
23176:
23177: yyRepetition1 = yyResult.index;
23178: yyRepValue1 = Pair.empty();
23179: while (true) {
23180:
23181: yyResult = pJeannieJava$PostfixExpression$$Tail1(yyRepetition1);
23182: yyError = yyResult.select(yyError);
23183: if (yyResult.hasValue()) {
23184: final Action<Node> v$16 = yyResult.semanticValue();
23185:
23186: yyRepetition1 = yyResult.index;
23187: yyRepValue1 = new Pair<Action<Node>>(v$16,
23188: yyRepValue1);
23189: continue;
23190: }
23191: break;
23192: }
23193: { // Start scope for v$17.
23194: final Pair<Action<Node>> v$17 = yyRepValue1.reverse();
23195:
23196: yyValue = apply(v$17, v$g$15, yyStart);
23197:
23198: return new SemanticValue(yyValue, yyRepetition1,
23199: yyError);
23200: } // End scope for v$17.
23201: }
23202:
23203: // Done.
23204: return yyError;
23205: }
23206:
23207: // =========================================================================
23208:
23209: /**
23210: * Parse synthetic nonterminal JeannieJava.PostfixExpression$$Tail1.
23211: *
23212: * @param yyStart The index.
23213: * @return The result.
23214: * @throws IOException Signals an I/O error.
23215: */
23216: private Result pJeannieJava$PostfixExpression$$Tail1(
23217: final int yyStart) throws IOException {
23218:
23219: Result yyResult;
23220: int yyBase;
23221: int yyOption1;
23222: Node yyOpValue1;
23223: Action<Node> yyValue;
23224: ParseError yyError = ParseError.DUMMY;
23225:
23226: // Alternative 1.
23227:
23228: yyResult = pSymbol(yyStart);
23229: yyError = yyResult.select(yyError);
23230: if (yyResult.hasValue(".")) {
23231:
23232: final int yyChoice1 = yyResult.index;
23233:
23234: // Nested alternative 1.
23235: { // Start scope for nested choice.
23236:
23237: final int yyChoice2 = yyChoice1;
23238:
23239: // Nested alternative 1.
23240:
23241: yyResult = pJavaIdentifier$Identifier(yyChoice2);
23242: yyError = yyResult.select(yyError);
23243: if (yyResult.hasValue()) {
23244: final String v$g$3 = yyResult.semanticValue();
23245:
23246: yyResult = pArguments(yyResult.index);
23247: yyError = yyResult.select(yyError);
23248: if (yyResult.hasValue()) {
23249: final Node v$g$4 = yyResult.semanticValue();
23250:
23251: yyValue = new Action<Node>() {
23252: public Node run(Node v$1) {
23253: return GNode.create("CallExpression",
23254: v$1, null, v$g$3, v$g$4);
23255: }
23256: };
23257:
23258: return yyResult.createValue(yyValue, yyError);
23259: }
23260: }
23261:
23262: // Nested alternative 2.
23263:
23264: yyBase = yyChoice2;
23265: yyResult = pJavaIdentifier$Word(yyBase);
23266: yyError = yyResult.select(yyError);
23267: if (yyResult.hasValue("super")) {
23268: final String v$g$5 = "super";
23269:
23270: yyResult = pArguments(yyResult.index);
23271: yyError = yyResult.select(yyError);
23272: if (yyResult.hasValue()) {
23273: final Node v$g$6 = yyResult.semanticValue();
23274:
23275: yyValue = new Action<Node>() {
23276: public Node run(Node v$1) {
23277: return GNode.create("CallExpression",
23278: v$1, null, v$g$5, v$g$6);
23279: }
23280: };
23281:
23282: return yyResult.createValue(yyValue, yyError);
23283: }
23284: } else {
23285: yyError = yyError.select("\"super\" expected",
23286: yyBase);
23287: }
23288: } // End scope for nested choice.
23289:
23290: // Nested alternative 2.
23291:
23292: yyBase = yyChoice1;
23293: yyResult = pJavaIdentifier$Word(yyBase);
23294: yyError = yyResult.select(yyError);
23295: if (yyResult.hasValue("super")) {
23296:
23297: yyValue = new Action<Node>() {
23298: public Node run(Node v$1) {
23299: return GNode.create("SuperExpression", v$1);
23300: }
23301: };
23302:
23303: return yyResult.createValue(yyValue, yyError);
23304: } else {
23305: yyError = yyError.select("\"super\" expected", yyBase);
23306: }
23307:
23308: // Nested alternative 3.
23309:
23310: yyResult = pJavaIdentifier$Identifier(yyChoice1);
23311: yyError = yyResult.select(yyError);
23312: if (yyResult.hasValue()) {
23313: final String v$g$7 = yyResult.semanticValue();
23314:
23315: yyValue = new Action<Node>() {
23316: public Node run(Node v$1) {
23317: return GNode.create("SelectionExpression", v$1,
23318: v$g$7);
23319: }
23320: };
23321:
23322: return yyResult.createValue(yyValue, yyError);
23323: }
23324: }
23325:
23326: // Alternative 2.
23327:
23328: yyResult = pSymbol(yyStart);
23329: yyError = yyResult.select(yyError);
23330: if (yyResult.hasValue("[")) {
23331:
23332: yyResult = pJeannieJava$Expression(yyResult.index);
23333: yyError = yyResult.select(yyError);
23334: if (yyResult.hasValue()) {
23335: final Node v$g$8 = yyResult.semanticValue();
23336:
23337: yyBase = yyResult.index;
23338: yyResult = pSymbol(yyBase);
23339: yyError = yyResult.select(yyError);
23340: if (yyResult.hasValue("]")) {
23341:
23342: yyValue = new Action<Node>() {
23343: public Node run(Node v$1) {
23344: return GNode.create("SubscriptExpression",
23345: v$1, v$g$8);
23346: }
23347: };
23348:
23349: return yyResult.createValue(yyValue, yyError);
23350: } else {
23351: yyError = yyError.select("\"]\" expected", yyBase);
23352: }
23353: }
23354: }
23355:
23356: // Alternative 3.
23357:
23358: yyResult = pSymbol(yyStart);
23359: yyError = yyResult.select(yyError);
23360: if (yyResult.hasValue("++")) {
23361: final String v$g$9 = "++";
23362:
23363: yyValue = new Action<Node>() {
23364: public Node run(Node v$1) {
23365: return GNode
23366: .create("PostfixExpression", v$1, v$g$9);
23367: }
23368: };
23369:
23370: return yyResult.createValue(yyValue, yyError);
23371: }
23372:
23373: // Alternative 4.
23374:
23375: yyResult = pSymbol(yyStart);
23376: yyError = yyResult.select(yyError);
23377: if (yyResult.hasValue("--")) {
23378: final String v$g$10 = "--";
23379:
23380: yyValue = new Action<Node>() {
23381: public Node run(Node v$1) {
23382: return GNode.create("PostfixExpression", v$1,
23383: v$g$10);
23384: }
23385: };
23386:
23387: return yyResult.createValue(yyValue, yyError);
23388: }
23389:
23390: // Alternative 5.
23391:
23392: yyResult = pSymbol(yyStart);
23393: yyError = yyResult.select(yyError);
23394: if (yyResult.hasValue(".")) {
23395:
23396: yyBase = yyResult.index;
23397: yyResult = pJavaIdentifier$Word(yyBase);
23398: yyError = yyResult.select(yyError);
23399: if (yyResult.hasValue("new")) {
23400:
23401: yyResult = pJavaType$TypeName(yyResult.index);
23402: yyError = yyResult.select(yyError);
23403: if (yyResult.hasValue()) {
23404: final Node v$g$12 = yyResult.semanticValue();
23405:
23406: yyResult = pArguments(yyResult.index);
23407: yyError = yyResult.select(yyError);
23408: if (yyResult.hasValue()) {
23409: final Node v$g$13 = yyResult.semanticValue();
23410:
23411: yyOption1 = yyResult.index;
23412: yyOpValue1 = null;
23413:
23414: yyResult = pClassBody(yyOption1);
23415: yyError = yyResult.select(yyError);
23416: if (yyResult.hasValue()) {
23417: final Node v$el$1 = yyResult
23418: .semanticValue();
23419:
23420: yyOption1 = yyResult.index;
23421: yyOpValue1 = v$el$1;
23422: }
23423: { // Start scope for v$g$14.
23424: final Node v$g$14 = yyOpValue1;
23425:
23426: yyValue = new Action<Node>() {
23427: public Node run(Node v$1) {
23428: return GNode.create(
23429: "NewClassExpression", v$1,
23430: null, v$g$12, v$g$13,
23431: v$g$14);
23432: }
23433: };
23434:
23435: return new SemanticValue(yyValue,
23436: yyOption1, yyError);
23437: } // End scope for v$g$14.
23438: }
23439: }
23440: } else {
23441: yyError = yyError.select("\"new\" expected", yyBase);
23442: }
23443: }
23444:
23445: // Done.
23446: yyError = yyError
23447: .select("postfix expression expected", yyStart);
23448: return yyError;
23449: }
23450:
23451: // =========================================================================
23452:
23453: /**
23454: * Parse nonterminal xtc.lang.jeannie.JeannieJava.PrimaryExpression.
23455: *
23456: * @param yyStart The index.
23457: * @return The result.
23458: * @throws IOException Signals an I/O error.
23459: */
23460: private Result pJeannieJava$PrimaryExpression(final int yyStart)
23461: throws IOException {
23462:
23463: Result yyResult;
23464: int yyBase;
23465: int yyOption1;
23466: Node yyOpValue1;
23467: Node yyValue;
23468: ParseError yyError = ParseError.DUMMY;
23469:
23470: // Alternative <Literal>.
23471:
23472: yyResult = pLiteral(yyStart);
23473: yyError = yyResult.select(yyError);
23474: if (yyResult.hasValue()) {
23475: yyValue = yyResult.semanticValue();
23476:
23477: return yyResult.createValue(yyValue, yyError);
23478: }
23479:
23480: // Alternative <Expression>.
23481:
23482: yyResult = pJavaIdentifier$Identifier(yyStart);
23483: yyError = yyResult.select(yyError);
23484: if (yyResult.hasValue()) {
23485: final String v$g$3 = yyResult.semanticValue();
23486:
23487: yyResult = pArguments(yyResult.index);
23488: yyError = yyResult.select(yyError);
23489: if (yyResult.hasValue()) {
23490: final Node v$g$4 = yyResult.semanticValue();
23491:
23492: yyValue = GNode.create("CallExpression", null, null,
23493: v$g$3, v$g$4);
23494: yyValue.setLocation(location(yyStart));
23495:
23496: return yyResult.createValue(yyValue, yyError);
23497: }
23498: }
23499:
23500: // Alternative <Expression>.
23501:
23502: yyResult = pResultType(yyStart);
23503: yyError = yyResult.select(yyError);
23504: if (yyResult.hasValue()) {
23505: final Node v$g$1 = yyResult.semanticValue();
23506:
23507: yyBase = yyResult.index;
23508: yyResult = pSymbol(yyBase);
23509: yyError = yyResult.select(yyError);
23510: if (yyResult.hasValue(".")) {
23511:
23512: yyBase = yyResult.index;
23513: yyResult = pJavaIdentifier$Word(yyBase);
23514: yyError = yyResult.select(yyError);
23515: if (yyResult.hasValue("class")) {
23516:
23517: yyValue = GNode.create("ClassLiteralExpression",
23518: v$g$1);
23519: yyValue.setLocation(location(yyStart));
23520:
23521: return yyResult.createValue(yyValue, yyError);
23522: } else {
23523: yyError = yyError.select("\"class\" expected",
23524: yyBase);
23525: }
23526: } else {
23527: yyError = yyError.select("\".\" expected", yyBase);
23528: }
23529: }
23530:
23531: // Alternative <Expression>.
23532:
23533: yyResult = pJavaIdentifier$Word(yyStart);
23534: yyError = yyResult.select(yyError);
23535: if (yyResult.hasValue("this")) {
23536: final String v$g$3 = "this";
23537:
23538: yyResult = pArguments(yyResult.index);
23539: yyError = yyResult.select(yyError);
23540: if (yyResult.hasValue()) {
23541: final Node v$g$4 = yyResult.semanticValue();
23542:
23543: yyValue = GNode.create("CallExpression", null, null,
23544: v$g$3, v$g$4);
23545: yyValue.setLocation(location(yyStart));
23546:
23547: return yyResult.createValue(yyValue, yyError);
23548: }
23549: }
23550:
23551: // Alternative <Expression>.
23552:
23553: yyOption1 = yyStart;
23554: yyOpValue1 = null;
23555:
23556: yyResult = pQualifiedIdentifier(yyOption1);
23557: yyError = yyResult.select(yyError);
23558: if (yyResult.hasValue()) {
23559: final Node v$el$1 = yyResult.semanticValue();
23560:
23561: yyBase = yyResult.index;
23562: yyResult = pSymbol(yyBase);
23563: yyError = yyResult.select(yyError);
23564: if (yyResult.hasValue(".")) {
23565:
23566: yyOption1 = yyResult.index;
23567: yyOpValue1 = v$el$1;
23568: } else {
23569: yyError = yyError.select("\".\" expected", yyBase);
23570: }
23571: }
23572: { // Start scope for v$g$1.
23573: final Node v$g$1 = yyOpValue1;
23574:
23575: yyBase = yyOption1;
23576: yyResult = pJavaIdentifier$Word(yyBase);
23577: yyError = yyResult.select(yyError);
23578: if (yyResult.hasValue("this")) {
23579:
23580: yyValue = GNode.create("ThisExpression", v$g$1);
23581: yyValue.setLocation(location(yyStart));
23582:
23583: return yyResult.createValue(yyValue, yyError);
23584: } else {
23585: yyError = yyError.select("\"this\" expected", yyBase);
23586: }
23587: } // End scope for v$g$1.
23588:
23589: // Alternative 6.
23590: { // Start scope for nested choice.
23591:
23592: final int yyChoice1 = yyStart;
23593:
23594: // Nested alternative 1.
23595:
23596: yyResult = pJavaIdentifier$Word(yyChoice1);
23597: yyError = yyResult.select(yyError);
23598: if (yyResult.hasValue("super")) {
23599: final String v$g$3 = "super";
23600:
23601: yyResult = pArguments(yyResult.index);
23602: yyError = yyResult.select(yyError);
23603: if (yyResult.hasValue()) {
23604: final Node v$g$4 = yyResult.semanticValue();
23605:
23606: yyValue = GNode.create("CallExpression", null,
23607: null, v$g$3, v$g$4);
23608: yyValue.setLocation(location(yyStart));
23609:
23610: return yyResult.createValue(yyValue, yyError);
23611: }
23612: }
23613:
23614: // Nested alternative 2.
23615:
23616: yyBase = yyChoice1;
23617: yyResult = pJavaIdentifier$Word(yyBase);
23618: yyError = yyResult.select(yyError);
23619: if (yyResult.hasValue("super")) {
23620:
23621: yyValue = GNode.create("SuperExpression", null);
23622: yyValue.setLocation(location(yyStart));
23623:
23624: return yyResult.createValue(yyValue, yyError);
23625: } else {
23626: yyError = yyError.select("\"super\" expected", yyBase);
23627: }
23628: } // End scope for nested choice.
23629:
23630: // Alternative 7.
23631:
23632: yyResult = pJavaIdentifier$Identifier(yyStart);
23633: yyError = yyResult.select(yyError);
23634: if (yyResult.hasValue()) {
23635: final String v$g$1 = yyResult.semanticValue();
23636:
23637: yyValue = GNode.create("PrimaryIdentifier", v$g$1);
23638: yyValue.setLocation(location(yyStart));
23639:
23640: return yyResult.createValue(yyValue, yyError);
23641: }
23642:
23643: // Alternative <Expression>.
23644:
23645: yyResult = pJavaIdentifier$Word(yyStart);
23646: yyError = yyResult.select(yyError);
23647: if (yyResult.hasValue("new")) {
23648:
23649: yyResult = pJavaType$TypeName(yyResult.index);
23650: yyError = yyResult.select(yyError);
23651: if (yyResult.hasValue()) {
23652: final Node v$g$3 = yyResult.semanticValue();
23653:
23654: yyResult = pArguments(yyResult.index);
23655: yyError = yyResult.select(yyError);
23656: if (yyResult.hasValue()) {
23657: final Node v$g$4 = yyResult.semanticValue();
23658:
23659: yyOption1 = yyResult.index;
23660: yyOpValue1 = null;
23661:
23662: yyResult = pClassBody(yyOption1);
23663: yyError = yyResult.select(yyError);
23664: if (yyResult.hasValue()) {
23665: final Node v$el$1 = yyResult.semanticValue();
23666:
23667: yyOption1 = yyResult.index;
23668: yyOpValue1 = v$el$1;
23669: }
23670: { // Start scope for v$g$5.
23671: final Node v$g$5 = yyOpValue1;
23672:
23673: yyValue = GNode.create("NewClassExpression",
23674: null, null, v$g$3, v$g$4, v$g$5);
23675: yyValue.setLocation(location(yyStart));
23676:
23677: return new SemanticValue(yyValue, yyOption1,
23678: yyError);
23679: } // End scope for v$g$5.
23680: }
23681: }
23682: }
23683:
23684: // Alternative 9.
23685:
23686: yyResult = pJavaIdentifier$Word(yyStart);
23687: yyError = yyResult.select(yyError);
23688: if (yyResult.hasValue("new")) {
23689:
23690: yyResult = pJavaType$TypeName(yyResult.index);
23691: yyError = yyResult.select(yyError);
23692: if (yyResult.hasValue()) {
23693: final Node v$g$1 = yyResult.semanticValue();
23694:
23695: final int yyChoice1 = yyResult.index;
23696:
23697: // Nested alternative 1.
23698:
23699: yyResult = pConcreteDimensions(yyChoice1);
23700: yyError = yyResult.select(yyError);
23701: if (yyResult.hasValue()) {
23702: final Node v$g$2 = yyResult.semanticValue();
23703:
23704: yyOption1 = yyResult.index;
23705: yyOpValue1 = null;
23706:
23707: yyResult = pDimensions(yyOption1);
23708: yyError = yyResult.select(yyError);
23709: if (yyResult.hasValue()) {
23710: final Node v$el$1 = yyResult.semanticValue();
23711:
23712: yyOption1 = yyResult.index;
23713: yyOpValue1 = v$el$1;
23714: }
23715: { // Start scope for v$g$3.
23716: final Node v$g$3 = yyOpValue1;
23717:
23718: yyValue = GNode.create("NewArrayExpression",
23719: v$g$1, v$g$2, v$g$3, null);
23720: yyValue.setLocation(location(yyStart));
23721:
23722: return new SemanticValue(yyValue, yyOption1,
23723: yyError);
23724: } // End scope for v$g$3.
23725: }
23726:
23727: // Nested alternative 2.
23728:
23729: yyOption1 = yyChoice1;
23730: yyOpValue1 = null;
23731:
23732: yyResult = pDimensions(yyOption1);
23733: yyError = yyResult.select(yyError);
23734: if (yyResult.hasValue()) {
23735: final Node v$el$2 = yyResult.semanticValue();
23736:
23737: yyOption1 = yyResult.index;
23738: yyOpValue1 = v$el$2;
23739: }
23740: { // Start scope for v$g$6.
23741: final Node v$g$6 = yyOpValue1;
23742:
23743: yyResult = pArrayInitializer(yyOption1);
23744: yyError = yyResult.select(yyError);
23745: if (yyResult.hasValue()) {
23746: final Node v$g$7 = yyResult.semanticValue();
23747:
23748: yyValue = GNode.create("NewArrayExpression",
23749: v$g$1, null, v$g$6, v$g$7);
23750: yyValue.setLocation(location(yyStart));
23751:
23752: return yyResult.createValue(yyValue, yyError);
23753: }
23754: } // End scope for v$g$6.
23755: }
23756: }
23757:
23758: // Alternative <Nested>.
23759:
23760: yyResult = pSymbol(yyStart);
23761: yyError = yyResult.select(yyError);
23762: if (yyResult.hasValue("(")) {
23763:
23764: yyResult = pJeannieJava$Expression(yyResult.index);
23765: yyError = yyResult.select(yyError);
23766: if (yyResult.hasValue()) {
23767: yyValue = yyResult.semanticValue();
23768:
23769: yyBase = yyResult.index;
23770: yyResult = pSymbol(yyBase);
23771: yyError = yyResult.select(yyError);
23772: if (yyResult.hasValue(")")) {
23773:
23774: return yyResult.createValue(yyValue, yyError);
23775: } else {
23776: yyError = yyError.select("\")\" expected", yyBase);
23777: }
23778: }
23779: }
23780:
23781: // Done.
23782: yyError = yyError
23783: .select("primary expression expected", yyStart);
23784: return yyError;
23785: }
23786:
23787: // =========================================================================
23788:
23789: /**
23790: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ConcreteDimensions.
23791: *
23792: * @param yyStart The index.
23793: * @return The result.
23794: * @throws IOException Signals an I/O error.
23795: */
23796: private Result pConcreteDimensions(final int yyStart)
23797: throws IOException {
23798: Result yyResult;
23799: int yyRepetition1;
23800: boolean yyRepeated1;
23801: Pair<Node> yyRepValue1;
23802: Node yyValue;
23803: ParseError yyError = ParseError.DUMMY;
23804:
23805: // Alternative 1.
23806:
23807: yyRepetition1 = yyStart;
23808: yyRepeated1 = false;
23809: yyRepValue1 = Pair.empty();
23810: while (true) {
23811:
23812: yyResult = pConcreteDimension(yyRepetition1);
23813: yyError = yyResult.select(yyError);
23814: if (yyResult.hasValue()) {
23815: final Node v$el$1 = yyResult.semanticValue();
23816:
23817: yyRepetition1 = yyResult.index;
23818: yyRepeated1 = true;
23819: yyRepValue1 = new Pair<Node>(v$el$1, yyRepValue1);
23820: continue;
23821: }
23822: break;
23823: }
23824:
23825: if (yyRepeated1) {
23826: final Pair<Node> v$g$1 = yyRepValue1.reverse();
23827:
23828: yyValue = GNode.createFromPair("ConcreteDimensions", v$g$1);
23829: yyValue.setLocation(location(yyStart));
23830:
23831: return new SemanticValue(yyValue, yyRepetition1, yyError);
23832: }
23833:
23834: // Done.
23835: return yyError;
23836: }
23837:
23838: // =========================================================================
23839:
23840: /**
23841: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ConcreteDimension.
23842: *
23843: * @param yyStart The index.
23844: * @return The result.
23845: * @throws IOException Signals an I/O error.
23846: */
23847: private Result pConcreteDimension(final int yyStart)
23848: throws IOException {
23849: Result yyResult;
23850: int yyBase;
23851: Node yyValue;
23852: ParseError yyError = ParseError.DUMMY;
23853:
23854: // Alternative 1.
23855:
23856: yyResult = pSymbol(yyStart);
23857: yyError = yyResult.select(yyError);
23858: if (yyResult.hasValue("[")) {
23859:
23860: yyResult = pJeannieJava$Expression(yyResult.index);
23861: yyError = yyResult.select(yyError);
23862: if (yyResult.hasValue()) {
23863: yyValue = yyResult.semanticValue();
23864:
23865: yyBase = yyResult.index;
23866: yyResult = pSymbol(yyBase);
23867: yyError = yyResult.select(yyError);
23868: if (yyResult.hasValue("]")) {
23869:
23870: return yyResult.createValue(yyValue, yyError);
23871: } else {
23872: yyError = yyError.select("\"]\" expected", yyBase);
23873: }
23874: }
23875: }
23876:
23877: // Done.
23878: yyError = yyError
23879: .select("concrete dimension expected", yyStart);
23880: return yyError;
23881: }
23882:
23883: // =========================================================================
23884:
23885: /**
23886: * Parse nonterminal xtc.lang.jeannie.JeannieJava.ArrayInitializer.
23887: *
23888: * @param yyStart The index.
23889: * @return The result.
23890: * @throws IOException Signals an I/O error.
23891: */
23892: private Result pArrayInitializer(final int yyStart)
23893: throws IOException {
23894: Result yyResult;
23895: int yyBase;
23896: int yyRepetition1;
23897: Pair<Node> yyRepValue1;
23898: int yyOption1;
23899: Node yyValue;
23900: ParseError yyError = ParseError.DUMMY;
23901:
23902: // Alternative 1.
23903:
23904: yyResult = pSymbol(yyStart);
23905: yyError = yyResult.select(yyError);
23906: if (yyResult.hasValue("{")) {
23907:
23908: final int yyChoice1 = yyResult.index;
23909:
23910: // Nested alternative 1.
23911:
23912: yyResult = pVariableInitializer(yyChoice1);
23913: yyError = yyResult.select(yyError);
23914: if (yyResult.hasValue()) {
23915: final Node v$g$1 = yyResult.semanticValue();
23916:
23917: yyRepetition1 = yyResult.index;
23918: yyRepValue1 = Pair.empty();
23919: while (true) {
23920:
23921: yyBase = yyRepetition1;
23922: yyResult = pSymbol(yyBase);
23923: yyError = yyResult.select(yyError);
23924: if (yyResult.hasValue(",")) {
23925:
23926: yyResult = pVariableInitializer(yyResult.index);
23927: yyError = yyResult.select(yyError);
23928: if (yyResult.hasValue()) {
23929: final Node v$el$1 = yyResult
23930: .semanticValue();
23931:
23932: yyRepetition1 = yyResult.index;
23933: yyRepValue1 = new Pair<Node>(v$el$1,
23934: yyRepValue1);
23935: continue;
23936: }
23937: } else {
23938: yyError = yyError.select("\",\" expected",
23939: yyBase);
23940: }
23941: break;
23942: }
23943: { // Start scope for v$g$2.
23944: final Pair<Node> v$g$2 = yyRepValue1.reverse();
23945:
23946: yyOption1 = yyRepetition1;
23947:
23948: yyBase = yyOption1;
23949: yyResult = pSymbol(yyBase);
23950: yyError = yyResult.select(yyError);
23951: if (yyResult.hasValue(",")) {
23952:
23953: yyOption1 = yyResult.index;
23954: } else {
23955: yyError = yyError.select("\",\" expected",
23956: yyBase);
23957: }
23958:
23959: yyBase = yyOption1;
23960: yyResult = pSymbol(yyBase);
23961: yyError = yyResult.select(yyError);
23962: if (yyResult.hasValue("}")) {
23963:
23964: yyValue = GNode.createFromPair(
23965: "ArrayInitializer", v$g$1, v$g$2);
23966: yyValue.setLocation(location(yyStart));
23967:
23968: return yyResult.createValue(yyValue, yyError);
23969: } else {
23970: yyError = yyError.select("\"}\" expected",
23971: yyBase);
23972: }
23973: } // End scope for v$g$2.
23974: }
23975:
23976: // Nested alternative 2.
23977:
23978: yyOption1 = yyChoice1;
23979:
23980: yyBase = yyOption1;
23981: yyResult = pSymbol(yyBase);
23982: yyError = yyResult.select(yyError);
23983: if (yyResult.hasValue(",")) {
23984:
23985: yyOption1 = yyResult.index;
23986: } else {
23987: yyError = yyError.select("\",\" expected", yyBase);
23988: }
23989:
23990: yyBase = yyOption1;
23991: yyResult = pSymbol(yyBase);
23992: yyError = yyResult.select(yyError);
23993: if (yyResult.hasValue("}")) {
23994:
23995: yyValue = GNode.create("ArrayInitializer", false);
23996: yyValue.setLocation(location(yyStart));
23997:
23998: return yyResult.createValue(yyValue, yyError);
23999: } else {
24000: yyError = yyError.select("\"}\" expected", yyBase);
24001: }
24002: }
24003:
24004: // Done.
24005: yyError = yyError.select("array initializer expected", yyStart);
24006: return yyError;
24007: }
24008:
24009: // =========================================================================
24010:
24011: /**
24012: * Parse nonterminal xtc.lang.jeannie.JeannieJava.VariableInitializer.
24013: *
24014: * @param yyStart The index.
24015: * @return The result.
24016: * @throws IOException Signals an I/O error.
24017: */
24018: private Result pVariableInitializer(final int yyStart)
24019: throws IOException {
24020: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
24021: if (null == yyColumn.chunk8)
24022: yyColumn.chunk8 = new Chunk8();
24023: if (null == yyColumn.chunk8.fVariableInitializer)
24024: yyColumn.chunk8.fVariableInitializer = pVariableInitializer$1(yyStart);
24025: return yyColumn.chunk8.fVariableInitializer;
24026: }
24027:
24028: /** Actually parse xtc.lang.jeannie.JeannieJava.VariableInitializer. */
24029: private Result pVariableInitializer$1(final int yyStart)
24030: throws IOException {
24031:
24032: Result yyResult;
24033: Node yyValue;
24034: ParseError yyError = ParseError.DUMMY;
24035:
24036: // Alternative <Array>.
24037:
24038: yyResult = pArrayInitializer(yyStart);
24039: yyError = yyResult.select(yyError);
24040: if (yyResult.hasValue()) {
24041: yyValue = yyResult.semanticValue();
24042:
24043: return yyResult.createValue(yyValue, yyError);
24044: }
24045:
24046: // Alternative <Expression>.
24047:
24048: yyResult = pJeannieJava$Expression(yyStart);
24049: yyError = yyResult.select(yyError);
24050: if (yyResult.hasValue()) {
24051: yyValue = yyResult.semanticValue();
24052:
24053: return yyResult.createValue(yyValue, yyError);
24054: }
24055:
24056: // Done.
24057: return yyError;
24058: }
24059:
24060: // =========================================================================
24061:
24062: /**
24063: * Parse nonterminal xtc.lang.jeannie.JeannieJava.Arguments.
24064: *
24065: * @param yyStart The index.
24066: * @return The result.
24067: * @throws IOException Signals an I/O error.
24068: */
24069: private Result pArguments(final int yyStart) throws IOException {
24070: Result yyResult;
24071: int yyBase;
24072: int yyRepetition1;
24073: Pair<Node> yyRepValue1;
24074: Node yyValue;
24075: ParseError yyError = ParseError.DUMMY;
24076:
24077: // Alternative 1.
24078:
24079: yyResult = pSymbol(yyStart);
24080: yyError = yyResult.select(yyError);
24081: if (yyResult.hasValue("(")) {
24082:
24083: final int yyChoice1 = yyResult.index;
24084:
24085: // Nested alternative 1.
24086:
24087: yyResult = pJeannieJava$Expression(yyChoice1);
24088: yyError = yyResult.select(yyError);
24089: if (yyResult.hasValue()) {
24090: final Node v$g$1 = yyResult.semanticValue();
24091:
24092: yyRepetition1 = yyResult.index;
24093: yyRepValue1 = Pair.empty();
24094: while (true) {
24095:
24096: yyBase = yyRepetition1;
24097: yyResult = pSymbol(yyBase);
24098: yyError = yyResult.select(yyError);
24099: if (yyResult.hasValue(",")) {
24100:
24101: yyResult = pJeannieJava$Expression(yyResult.index);
24102: yyError = yyResult.select(yyError);
24103: if (yyResult.hasValue()) {
24104: final Node v$el$1 = yyResult
24105: .semanticValue();
24106:
24107: yyRepetition1 = yyResult.index;
24108: yyRepValue1 = new Pair<Node>(v$el$1,
24109: yyRepValue1);
24110: continue;
24111: }
24112: } else {
24113: yyError = yyError.select("\",\" expected",
24114: yyBase);
24115: }
24116: break;
24117: }
24118: { // Start scope for v$g$2.
24119: final Pair<Node> v$g$2 = yyRepValue1.reverse();
24120:
24121: yyBase = yyRepetition1;
24122: yyResult = pSymbol(yyBase);
24123: yyError = yyResult.select(yyError);
24124: if (yyResult.hasValue(")")) {
24125:
24126: yyValue = GNode.createFromPair("Arguments",
24127: v$g$1, v$g$2);
24128: yyValue.setLocation(location(yyStart));
24129:
24130: return yyResult.createValue(yyValue, yyError);
24131: } else {
24132: yyError = yyError.select("\")\" expected",
24133: yyBase);
24134: }
24135: } // End scope for v$g$2.
24136: }
24137:
24138: // Nested alternative 2.
24139:
24140: yyBase = yyChoice1;
24141: yyResult = pSymbol(yyBase);
24142: yyError = yyResult.select(yyError);
24143: if (yyResult.hasValue(")")) {
24144:
24145: yyValue = GNode.create("Arguments", false);
24146: yyValue.setLocation(location(yyStart));
24147:
24148: return yyResult.createValue(yyValue, yyError);
24149: } else {
24150: yyError = yyError.select("\")\" expected", yyBase);
24151: }
24152: }
24153:
24154: // Done.
24155: yyError = yyError.select("arguments expected", yyStart);
24156: return yyError;
24157: }
24158:
24159: // =========================================================================
24160:
24161: /**
24162: * Parse nonterminal xtc.lang.jeannie.JeannieJava.CInJava.
24163: *
24164: * @param yyStart The index.
24165: * @return The result.
24166: * @throws IOException Signals an I/O error.
24167: */
24168: private Result pCInJava(final int yyStart) throws IOException {
24169: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
24170: if (null == yyColumn.chunk8)
24171: yyColumn.chunk8 = new Chunk8();
24172: if (null == yyColumn.chunk8.fCInJava)
24173: yyColumn.chunk8.fCInJava = pCInJava$1(yyStart);
24174: return yyColumn.chunk8.fCInJava;
24175: }
24176:
24177: /** Actually parse xtc.lang.jeannie.JeannieJava.CInJava. */
24178: private Result pCInJava$1(final int yyStart) throws IOException {
24179: int yyC;
24180: int yyIndex;
24181: Result yyResult;
24182: int yyBase;
24183: Void yyValue;
24184: ParseError yyError = ParseError.DUMMY;
24185:
24186: // Alternative 1.
24187:
24188: yyResult = pSymbol(yyStart);
24189: yyError = yyResult.select(yyError);
24190: if (yyResult.hasValue("`")) {
24191:
24192: final int yyChoice1 = yyResult.index;
24193:
24194: // Nested alternative 1.
24195:
24196: yyBase = yyChoice1;
24197: yyResult = pSymbol(yyBase);
24198: yyError = yyResult.select(yyError);
24199: if (yyResult.hasValue(".")) {
24200:
24201: yyBase = yyResult.index;
24202: yyC = character(yyBase);
24203: if ('C' == yyC) {
24204: yyIndex = yyResult.index + 1;
24205:
24206: yyResult = pSpacing(yyIndex);
24207: yyError = yyResult.select(yyError);
24208: if (yyResult.hasValue()) {
24209:
24210: yyValue = null;
24211:
24212: return yyResult.createValue(yyValue, yyError);
24213: }
24214: } else {
24215: yyError = yyError.select("\"C\" expected", yyBase);
24216: }
24217: } else {
24218: yyError = yyError.select("\".\" expected", yyBase);
24219: }
24220:
24221: // Nested alternative 2.
24222:
24223: yyValue = null;
24224:
24225: return new SemanticValue(yyValue, yyChoice1, yyError);
24226: }
24227:
24228: // Done.
24229: yyError = yyError.select("c in java expected", yyStart);
24230: return yyError;
24231: }
24232:
24233: // =========================================================================
24234:
24235: /**
24236: * Parse nonterminal xtc.lang.jeannie.JeannieJava.JavaInJavaBlock.
24237: *
24238: * @param yyStart The index.
24239: * @return The result.
24240: * @throws IOException Signals an I/O error.
24241: */
24242: private Result pJavaInJavaBlock(final int yyStart)
24243: throws IOException {
24244: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
24245: if (null == yyColumn.chunk8)
24246: yyColumn.chunk8 = new Chunk8();
24247: if (null == yyColumn.chunk8.fJavaInJavaBlock)
24248: yyColumn.chunk8.fJavaInJavaBlock = pJavaInJavaBlock$1(yyStart);
24249: return yyColumn.chunk8.fJavaInJavaBlock;
24250: }
24251:
24252: /** Actually parse xtc.lang.jeannie.JeannieJava.JavaInJavaBlock. */
24253: private Result pJavaInJavaBlock$1(final int yyStart)
24254: throws IOException {
24255: Result yyResult;
24256: int yyBase;
24257: Node yyValue;
24258: ParseError yyError = ParseError.DUMMY;
24259:
24260: // Alternative 1.
24261:
24262: yyResult = pSymbol(yyStart);
24263: yyError = yyResult.select(yyError);
24264: if (yyResult.hasValue("{")) {
24265:
24266: yyResult = pJavaInJavaBlock$$Star1(yyResult.index);
24267: yyError = yyResult.select(yyError);
24268: if (yyResult.hasValue()) {
24269: final Pair<Node> v$g$1 = yyResult.semanticValue();
24270:
24271: yyBase = yyResult.index;
24272: yyResult = pSymbol(yyBase);
24273: yyError = yyResult.select(yyError);
24274: if (yyResult.hasValue("}")) {
24275:
24276: yyValue = GNode.createFromPair("JavaInJavaBlock",
24277: v$g$1);
24278: yyValue.setLocation(location(yyStart));
24279:
24280: return yyResult.createValue(yyValue, yyError);
24281: } else {
24282: yyError = yyError.select("\"}\" expected", yyBase);
24283: }
24284: }
24285: }
24286:
24287: // Done.
24288: yyError = yyError
24289: .select("java in java block expected", yyStart);
24290: return yyError;
24291: }
24292:
24293: // =========================================================================
24294:
24295: /**
24296: * Parse synthetic nonterminal
24297: * xtc.lang.jeannie.Jeannie.JavaInJavaBlock$$Star1.
24298: *
24299: * @param yyStart The index.
24300: * @return The result.
24301: * @throws IOException Signals an I/O error.
24302: */
24303: private Result pJavaInJavaBlock$$Star1(final int yyStart)
24304: throws IOException {
24305:
24306: JeannieParserColumn yyColumn = (JeannieParserColumn) column(yyStart);
24307: if (null == yyColumn.chunk8)
24308: yyColumn.chunk8 = new Chunk8();
24309: if (null == yyColumn.chunk8.fJavaInJavaBlock$$Star1)
24310: yyColumn.chunk8.fJavaInJavaBlock$$Star1 = pJavaInJavaBlock$$Star1$1(yyStart);
24311: return yyColumn.chunk8.fJavaInJavaBlock$$Star1;
24312: }
24313:
24314: /** Actually parse xtc.lang.jeannie.Jeannie.JavaInJavaBlock$$Star1. */
24315: private Result pJavaInJavaBlock$$Star1$1(final int yyStart)
24316: throws IOException {
24317:
24318: Result yyResult;
24319: Pair<Node> yyValue;
24320: ParseError yyError = ParseError.DUMMY;
24321:
24322: // Alternative 1.
24323:
24324: yyResult = pJeannieJava$DeclarationOrStatement(yyStart);
24325: yyError = yyResult.select(yyError);
24326: if (yyResult.hasValue()) {
24327: final Node v$el$1 = yyResult.semanticValue();
24328:
24329: yyResult = pJavaInJavaBlock$$Star1(yyResult.index);
24330: yyError = yyResult.select(yyError);
24331: if (yyResult.hasValue()) {
24332: final Pair<Node> v$2 = yyResult.semanticValue();
24333:
24334: yyValue = new Pair<Node>(v$el$1, v$2);
24335:
24336: return yyResult.createValue(yyValue, yyError);
24337: }
24338: }
24339:
24340: // Alternative 2.
24341:
24342: yyValue = Pair.empty();
24343:
24344: return new SemanticValue(yyValue, yyStart, yyError);
24345: }
24346:
24347: // =========================================================================
24348:
24349: /**
24350: * Parse nonterminal xtc.lang.jeannie.JeannieJava.CInJavaBlock.
24351: *
24352: * @param yyStart The index.
24353: * @return The result.
24354: * @throws IOException Signals an I/O error.
24355: */
24356: private Result pCInJavaBlock(final int yyStart) throws IOException {
24357: Result yyResult;
24358: Node yyValue;
24359: ParseError yyError = ParseError.DUMMY;
24360:
24361: // Alternative 1.
24362:
24363: yyResult = pCInJava(yyStart);
24364: yyError = yyResult.select(yyError);
24365: if (yyResult.hasValue()) {
24366:
24367: yyResult = pCInCBlock(yyResult.index);
24368: yyError = yyResult.select(yyError);
24369: if (yyResult.hasValue()) {
24370: final Node v$g$1 = yyResult.semanticValue();
24371:
24372: yyValue = GNode.create("CInJavaBlock", v$g$1);
24373: yyValue.setLocation(location(yyStart));
24374:
24375: return yyResult.createValue(yyValue, yyError);
24376: }
24377: }
24378:
24379: // Done.
24380: return yyError;
24381: }
24382:
24383: // =========================================================================
24384:
24385: /**
24386: * Parse nonterminal xtc.lang.jeannie.JeannieJava.CInJavaExpression.
24387: *
24388: * @param yyStart The index.
24389: * @return The result.
24390: * @throws IOException Signals an I/O error.
24391: */
24392: private Result pCInJavaExpression(final int yyStart)
24393: throws IOException {
24394: Result yyResult;
24395: Node yyValue;
24396: ParseError yyError = ParseError.DUMMY;
24397:
24398: // Alternative 1.
24399:
24400: yyResult = pCInJava(yyStart);
24401: yyError = yyResult.select(yyError);
24402: if (yyResult.hasValue()) {
24403:
24404: yyResult = pJeannieC$UnaryExpression(yyResult.index);
24405: yyError = yyResult.select(yyError);
24406: if (yyResult.hasValue()) {
24407: final Node v$g$1 = yyResult.semanticValue();
24408:
24409: yyValue = GNode.create("CInJavaExpression", v$g$1);
24410: yyValue.setLocation(location(yyStart));
24411:
24412: return yyResult.createValue(yyValue, yyError);
24413: }
24414: }
24415:
24416: // Done.
24417: return yyError;
24418: }
24419:
24420: // =========================================================================
24421:
24422: /**
24423: * Parse nonterminal
24424: * xtc.lang.jeannie.JeannieJava.ClassOrInterfaceDeclaration.
24425: *
24426: * @param yyStart The index.
24427: * @return The result.
24428: * @throws IOException Signals an I/O error.
24429: */
24430: private Result pClassOrInterfaceDeclaration(final int yyStart)
24431: throws IOException {
24432:
24433: Result yyResult;
24434: int yyBase;
24435: int yyOption1;
24436: Node yyOpValue1;
24437: Node yyValue;
24438: ParseError yyError = ParseError.DUMMY;
24439:
24440: // Alternative 1.
24441:
24442: yyResult = pModifiers(yyStart);
24443: yyError = yyResult.select(yyError);
24444: if (yyResult.hasValue()) {
24445: final Node v$g$1 = yyResult.semanticValue();
24446:
24447: final int yyChoice1 = yyResult.index;
24448:
24449: // Nested alternative 1.
24450:
24451: yyBase = yyChoice1;
24452: yyResult = pJavaIdentifier$Word(yyBase);
24453: yyError = yyResult.select(yyError);
24454: if (yyResult.hasValue("class")) {
24455:
24456: yyResult = pJavaIdentifier$Identifier(yyResult.index);
24457: yyError = yyResult.select(yyError);
24458: if (yyResult.hasValue()) {
24459: final String v$g$2 = yyResult.semanticValue();
24460:
24461: yyOption1 = yyResult.index;
24462: yyOpValue1 = null;
24463:
24464: yyResult = pExtension(yyOption1);
24465: yyError = yyResult.select(yyError);
24466: if (yyResult.hasValue()) {
24467: final Node v$el$1 = yyResult.semanticValue();
24468:
24469: yyOption1 = yyResult.index;
24470: yyOpValue1 = v$el$1;
24471: }
24472: { // Start scope for v$g$4.
24473: final Node v$g$4 = yyOpValue1;
24474:
24475: yyOpValue1 = null;
24476:
24477: yyResult = pImplementation(yyOption1);
24478: yyError = yyResult.select(yyError);
24479: if (yyResult.hasValue()) {
24480: final Node v$el$2 = yyResult
24481: .semanticValue();
24482:
24483: yyOption1 = yyResult.index;
24484: yyOpValue1 = v$el$2;
24485: }
24486: { // Start scope for v$g$5.
24487: final Node v$g$5 = yyOpValue1;
24488:
24489: yyResult = pClassBody(yyOption1);
24490: yyError = yyResult.select(yyError);
24491: if (yyResult.hasValue()) {
24492: final Node v$g$6 = yyResult
24493: .semanticValue();
24494:
24495: yyValue = GNode.create(
24496: "ClassDeclaration", v$g$1,
24497: v$g$2, null, v$g$4, v$g$5,
24498: v$g$6);
24499: yyValue.setLocation(location(yyStart));
24500:
24501: return yyResult.createValue(yyValue,
24502: yyError);
24503: }
24504: } // End scope for v$g$5.
24505: } // End scope for v$g$4.
24506: }
24507: } else {
24508: yyError = yyError.select("\"class\" expected", yyBase);
24509: }
24510:
24511: // Nested alternative 2.
24512:
24513: yyBase = yyChoice1;
24514: yyResult = pJavaIdentifier$Word(yyBase);
24515: yyError = yyResult.select(yyError);
24516: if (yyResult.hasValue("interface")) {
24517:
24518: yyResult = pJavaIdentifier$Identifier(yyResult.index);
24519: yyError = yyResult.select(yyError);
24520: if (yyResult.hasValue()) {
24521: final String v$g$2 = yyResult.semanticValue();
24522:
24523: yyOption1 = yyResult.index;
24524: yyOpValue1 = null;
24525:
24526: yyResult = pExtension(yyOption1);
24527: yyError = yyResult.select(yyError);
24528: if (yyResult.hasValue()) {
24529: final Node v$el$1 = yyResult.semanticValue();
24530:
24531: yyOption1 = yyResult.index;
24532: yyOpValue1 = v$el$1;
24533: }
24534: { // Start scope for v$g$4.
24535: final Node v$g$4 = yyOpValue1;
24536:
24537: yyResult = pClassBody(yyOption1);
24538: yyError = yyResult.select(yyError);
24539: if (yyResult.hasValue()) {
24540: final Node v$g$5 = yyResult.semanticValue();
24541:
24542: yyValue = GNode.create(
24543: "InterfaceDeclaration", v$g$1,
24544: v$g$2, null, v$g$4, v$g$5);
24545: yyValue.setLocation(location(yyStart));
24546:
24547: return yyResult.createValue(yyValue,
24548: yyError);
24549: }
24550: } // End scope for v$g$4.
24551: }
24552: } else {
24553: yyError = yyError.select("\"interface\" expected",
24554: yyBase);
24555: }
24556: }
24557:
24558: // Done.
24559: return yyError;
24560: }
24561:
24562: // =========================================================================
24563:
24564: /**
24565: * Parse nonterminal xtc.lang.jeannie.JeannieJava.CDeclarations.
24566: *
24567: * @param yyStart The index.
24568: * @return The result.
24569: * @throws IOException Signals an I/O error.
24570: */
24571: private Result pCDeclarations(final int yyStart) throws IOException {
24572: Result yyResult;
24573: int yyBase;
24574: int yyRepetition1;
24575: Pair<Node> yyRepValue1;
24576: Node yyValue;
24577: ParseError yyError = ParseError.DUMMY;
24578:
24579: // Alternative 1.
24580:
24581: yyResult = pCInJava(yyStart);
24582: yyError = yyResult.select(yyError);
24583: if (yyResult.hasValue()) {
24584:
24585: yyBase = yyResult.index;
24586: yyResult = pSymbol(yyBase);
24587: yyError = yyResult.select(yyError);
24588: if (yyResult.hasValue("{")) {
24589:
24590: yyRepetition1 = yyResult.index;
24591: yyRepValue1 = Pair.empty();
24592: while (true) {
24593:
24594: yyResult = pExternalDeclaration(yyRepetition1);
24595: yyError = yyResult.select(yyError);
24596: if (yyResult.hasValue()) {
24597: final Node v$el$1 = yyResult.semanticValue();
24598:
24599: yyRepetition1 = yyResult.index;
24600: yyRepValue1 = new Pair<Node>(v$el$1,
24601: yyRepValue1);
24602: continue;
24603: }
24604: break;
24605: }
24606: { // Start scope for v$g$1.
24607: final Pair<Node> v$g$1 = yyRepValue1.reverse();
24608:
24609: yyResult = pAnnotations(yyRepetition1);
24610: yyError = yyResult.select(yyError);
24611: if (yyResult.hasValue()) {
24612: final Node v$g$2 = yyResult.semanticValue();
24613:
24614: yyBase = yyResult.index;
24615: yyResult = pSymbol(yyBase);
24616: yyError = yyResult.select(yyError);
24617: if (yyResult.hasValue("}")) {
24618:
24619: yyValue = GNode.create("CDeclarations",
24620: v$g$1.size() + 1).addAll(v$g$1)
24621: .add(v$g$2);
24622: yyValue.setLocation(location(yyStart));
24623:
24624: return yyResult.createValue(yyValue,
24625: yyError);
24626: } else {
24627: yyError = yyError.select("\"}\" expected",
24628: yyBase);
24629: }
24630: }
24631: } // End scope for v$g$1.
24632: } else {
24633: yyError = yyError.select("\"{\" expected", yyBase);
24634: }
24635: }
24636:
24637: // Done.
24638: return yyError;
24639: }
24640:
24641: // =========================================================================
24642:
24643: static {
24644: add(JAVA_KEYWORDS, new String[] { "abstract", "continue",
24645: "for", "new", "switch", "assert", "default", "if",
24646: "package", "synchronized", "boolean", "do", "goto",
24647: "private", "this", "break", "double", "implements",
24648: "protected", "throw", "byte", "else", "import",
24649: "public", "throws", "case", "instanceof", "return",
24650: "transient", "catch", "extends", "int", "short", "try",
24651: "char", "final", "interface", "static", "void",
24652: "class", "finally", "long", "strictfp", "volatile",
24653: "const", "float", "native", "super", "while" });
24654: }
24655: static {
24656: add(C_KEYWORDS, new String[] { "_cancel", "_commit", "_with" });
24657: }
24658: static {
24659: add(C_KEYWORDS, new String[] { "auto", "break", "case", "char",
24660: "const", "continue", "default", "do", "double", "else",
24661: "enum", "extern", "float", "for", "goto", "if", "int",
24662: "long", "register", "return", "short", "signed",
24663: "sizeof", "static", "struct", "switch", "typedef",
24664: "union", "unsigned", "void", "volatile", "while" });
24665:
24666: if (C99)
24667: add(C_KEYWORDS, new String[] { "_Bool", "_Complex",
24668: "inline", "restrict" });
24669:
24670: if (GCC)
24671: add(C_KEYWORDS, new String[] { "__alignof", "__alignof__",
24672: "asm", "__asm", "__asm__", "__attribute",
24673: "__attribute__", "__builtin_offsetof",
24674: "__builtin_types_compatible_p", "__builtin_va_arg",
24675: "__builtin_va_list", "__complex__", "__const",
24676: "__const__", "__extension__", "__inline",
24677: "__inline__", "__label__", "__restrict",
24678: "__restrict__", "__signed", "__signed__", "typeof",
24679: "__typeof", "__typeof__", "__volatile",
24680: "__volatile__" });
24681:
24682: }
24683:
24684: // =========================================================================
24685:
24686: /**
24687: * Get the specified text.
24688: *
24689: * @param s The text.
24690: * @return The text.
24691: */
24692: protected static final String toText(String s) {
24693: return s;
24694: }
24695:
24696: // =========================================================================
24697:
24698: /**
24699: * Add the specified values to the specified set.
24700: *
24701: * @param set The set.
24702: * @param values The new values.
24703: */
24704: protected static final <T> void add(Set<T> set, T[] values) {
24705: for (T v : values)
24706: set.add(v);
24707: }
24708:
24709: /**
24710: * Check whether the specified set contains the specified value.
24711: *
24712: * @param set The set.
24713: * @param value The value.
24714: * @return <code>true</code> if the set contains the value.
24715: */
24716: protected static final <T> boolean contains(Set<T> set, T value) {
24717: return set.contains(value);
24718: }
24719:
24720: // =========================================================================
24721:
24722: /**
24723: * Parse the specified files.
24724: *
24725: * @param args The file names.
24726: */
24727: public static void main(String[] args) {
24728: if ((null == args) || (0 == args.length)) {
24729: System.err.println("Usage: <file-name>+");
24730:
24731: } else {
24732: for (int i = 0; i < args.length; i++) {
24733: System.err.println("Processing " + args[i] + " ...");
24734:
24735: Reader in = null;
24736: try {
24737: in = new BufferedReader(new FileReader(args[i]));
24738: JeannieParser p = new JeannieParser(in, args[i],
24739: (int) new File(args[i]).length());
24740: Result r = p.pFile(0);
24741:
24742: if (r.hasValue()) {
24743: SemanticValue v = (SemanticValue) r;
24744:
24745: if (v.value instanceof Node) {
24746: Printer ptr = new Printer(
24747: new BufferedWriter(
24748: new OutputStreamWriter(
24749: System.out)));
24750: ptr.format((Node) v.value).pln().flush();
24751: } else {
24752: System.out.println(v.value.toString());
24753: }
24754:
24755: } else {
24756: ParseError err = (ParseError) r;
24757: if (-1 == err.index) {
24758: System.err.println(" Parse error");
24759: } else {
24760: System.err.println(" "
24761: + p.location(err.index) + ": "
24762: + err.msg);
24763: }
24764: }
24765:
24766: } catch (Throwable x) {
24767: while (null != x.getCause()) {
24768: x = x.getCause();
24769: }
24770: x.printStackTrace();
24771: } finally {
24772: try {
24773: in.close();
24774: } catch (Throwable x) {
24775: /* Ignore. */
24776: }
24777: }
24778: }
24779: }
24780: }
24781:
24782: }
|