📄 directives.c
字号:
yyNonterminal = yyLeftHandSide [yyState - yyFirstReduceState]; }#endifswitch (yyState) {case 24:YYACCEPT;case 25:case 13: /* directive : SET SOURCEFORMAT xx_directive_1_3 \string */yyDecrement (4) yySetNT (yyNTdirective) {} break;case 26: /* directive : SET name literal */yyDecrement (3) yySetNT (yyNTdirective) {} break;case 27: /* directive : SET name */yyDecrement (2) yySetNT (yyNTdirective) {} break;case 28:case 14: /* directive : DISPLAY string */yyDecrement (2) yySetNT (yyNTdirective) {} break;case 29:case 15: /* directive : ELSE */yyDecrement (1) yySetNT (yyNTdirective) {} break;case 30:case 16: /* directive : END */yyDecrement (1) yySetNT (yyNTdirective) {} break;case 31: /* directive : IF literal operator literal */yyDecrement (4) yySetNT (yyNTdirective) {} break;case 32: /* directive : IF literal NOT operator literal */yyDecrement (5) yySetNT (yyNTdirective) {} break;case 33:case 17: /* directive : IF literal DEFINED */yyDecrement (3) yySetNT (yyNTdirective) {} break;case 34:case 18: /* directive : IF literal NOT DEFINED */yyDecrement (4) yySetNT (yyNTdirective) {} break;case 35: /* xx_directive_1_3 : */yySetNT (yyNTxx_directive_1_3) {/* line 47 "directives.lrk" */ ;{ char s [256]; StGetString (Attribute.string.Value, s); if (strncmp (s + 1, "FREE", 4) == 0) { free_format = rtrue; MaxColumn = 1024; } else if (strncmp (s + 1, "FIXED", 5) == 0) { free_format = rfalse; MaxColumn = 72; } ; } ;} break;case 36:case 19: /* literal : unsigned_integer */yyDecrement (1) yySetNT (yyNTliteral) {} break;case 37:case 20: /* literal : string */yyDecrement (1) yySetNT (yyNTliteral) {} break;case 38:case 21: /* operator : '<' */yyDecrement (1) yySetNT (yyNToperator) {} break;case 39:case 22: /* operator : '>' */yyDecrement (1) yySetNT (yyNToperator) {} break;case 40:case 23: /* operator : '=' */yyDecrement (1) yySetNT (yyNToperator) {} break;default: switch (yyState) {case 1: goto yyAbort;case 2: goto yyRead;case 3: goto yyReduce;}} /* SPEC State = Next (Top (), Nonterminal); nonterminal transition */#ifdef YYNDefault yyState = * yyStateStackPtr ++; for (;;) { register yytComb * yyNCombPtr = yyNBasePtr [yyState] + (int) yyNonterminal; if (yyNCombPtr->Check == yyState) { yyState = yyNCombPtr->Next; break; } yyState = yyNDefault [yyState]; }#else yyState = yyNBasePtr [* yyStateStackPtr ++] [yyNonterminal];#endif * yyAttrStackPtr ++ = yySynAttribute; if (yyState < yyFirstFinalState) goto yyParseLoop; /* read reduce ? */#ifdef YYDEBUG yyStateStackPtr [0] = yyStateStackPtr [-1];#endif } } else { /* read */ yyRead: yyStateStackPtr ++; yyGetAttribute (yyAttrStackPtr ++, Attribute); yyTerminal = yyGetToken ();#ifdef YYDEBUG if (directives_Debug) { yyPrintState (yyStateStackPtr [-1]); (void) fprintf (yyTrace, "shift %s, lookahead: %s", directives_TokenName [yyPrevTerminal], directives_TokenName [yyTerminal]); yyNl (); yyPrevTerminal = yyTerminal; }#endif yyIsRepairing = rfalse; } } yyAbort:#ifdef YYDEBUG if (directives_Debug) { yyPrintState (* yyStateStackPtr); (void) fprintf (yyTrace, "fail parse started at %ld", yyStartCount); yyNl (); }#endif return ++ yyErrorCount; yyAccept:#ifdef YYDEBUG if (directives_Debug) { yyPrintState (* yyStateStackPtr); (void) fprintf (yyTrace, "accept parse started at %ld", yyStartCount); yyNl (); }#endif return yyErrorCount; }#ifndef NO_RECOVERstatic void yyErrorRecovery#if defined __STDC__ | defined __cplusplus (yySymbolRange * yyTerminal, yyStateRange * yyStateStack, short yyStackPtr)#else (yyTerminal, yyStateStack, yyStackPtr) yySymbolRange * yyTerminal ; yyStateRange * yyStateStack ; short yyStackPtr ;#endif {#define yyContinueSize 5000 rbool yyTokensSkipped ; tSet yyContinueSet ; tSet yyRestartSet ; int yyLength ; char yyContinueString [yyContinueSize + 2]; if (yyControl.yyMessages) { /* 1. report an error */ ErrorMessage (xxSyntaxError, xxError, Attribute.Position); /* 2. report the offending token */ (void) strcpy (yyContinueString, directives_TokenName [* yyTerminal]);#ifdef SPELLING if (strncmp (yyContinueString, TokenPtr, TokenLength)) { yyContinueString [yyLength = strlen (yyContinueString)] = ' '; (void) GetWord (& yyContinueString [++ yyLength]); }#endif ErrorMessageI (xxTokenFound, xxInformation, Attribute.Position, xxString, yyContinueString); /* 3. report the set of expected terminal symbols */ MakeSet (& yyContinueSet, (short) yyLastTerminal); yyComputeContinuation (yyStateStack, yyStackPtr, & yyContinueSet); yyLength = 0; yyContinueString [0] = '\0'; while (! IsEmpty (& yyContinueSet)) { char * yyTokenString = directives_TokenName [Extract (& yyContinueSet)]; int yyl = strlen (yyTokenString); if (yyLength + yyl >= yyContinueSize) break; (void) strcpy (& yyContinueString [yyLength], yyTokenString); yyLength += yyl; yyContinueString [yyLength ++] = ' '; } yyContinueString [-- yyLength] = '\0'; ErrorMessageI (xxExpectedTokens, xxInformation, Attribute.Position, xxString, yyContinueString); ReleaseSet (& yyContinueSet); } /* 4. compute the set of terminal symbols for restart of the parse */ MakeSet (& yyRestartSet, (short) yyLastTerminal); yyComputeRestartPoints (yyStateStack, yyStackPtr, & yyRestartSet); /* 5. skip terminal symbols until a restart point is reached */ yyTokensSkipped = rfalse; while (! IsElement (* yyTerminal, & yyRestartSet)) {#ifdef YYDEBUG yySymbolRange yyPrevTerminal = * yyTerminal;#endif * yyTerminal = yyGetToken (); yyTokensSkipped = rtrue;#ifdef YYDEBUG if (directives_Debug) { yyPrintState (yyStateStack [yyStackPtr]); (void) fprintf (yyTrace, "skip %s, lookahead: %s", directives_TokenName [yyPrevTerminal], directives_TokenName [* yyTerminal]); yyNl (); }#endif } ReleaseSet (& yyRestartSet); /* 6. report the restart point */ if (yyTokensSkipped & yyControl.yyMessages) ErrorMessage (xxRestartPoint, xxInformation, Attribute.Position); }/* compute the set of terminal symbols that can be accepted (read) in a given stack configuration (eventually after reduce actions)*/static void yyComputeContinuation#if defined __STDC__ | defined __cplusplus (yyStateRange * yyStack, short yyStackPtr, tSet * yyContinueSet)#else (yyStack, yyStackPtr, yyContinueSet) yyStateRange * yyStack ; short yyStackPtr ; tSet * yyContinueSet ;#endif { register yySymbolRange yyTerminal; register yyStateRange yyState = yyStack [yyStackPtr]; AssignEmpty (yyContinueSet); for (yyTerminal = yyFirstTerminal; yyTerminal <= yyLastTerminal; yyTerminal ++) { if (yyNext (yyState, yyTerminal) != yyNoState && yyIsContinuation (yyTerminal, yyStack, yyStackPtr)) { Include (yyContinueSet, (short) yyTerminal); } } }/* check whether a given terminal symbol can be accepted (read) in a certain stack configuration (eventually after reduce actions)*/static rbool yyIsContinuation#if defined __STDC__ | defined __cplusplus (yySymbolRange yyTerminal, yyStateRange * yyStateStack, short yyStackPtr)#else (yyTerminal, yyStateStack, yyStackPtr) yySymbolRange yyTerminal ; yyStateRange * yyStateStack ; short yyStackPtr ;#endif { register yyStateRange yState ; register yytNonterminal yyNonterminal ; while (yyStackPtr >= (short) yyIsContStackSize) /* pass Stack by value */ ExtendArray ((char * *) & yyIsContStackPtr, & yyIsContStackSize, (unsigned long) sizeof (yyStateRange));#ifdef BCOPY bcopy ((char *) yyStateStack, (char *) yyIsContStackPtr, (int) sizeof (yyStateRange) * (yyStackPtr + 1));#else (void) memcpy ((char *) yyIsContStackPtr, (char *) yyStateStack, (int) sizeof (yyStateRange) * (yyStackPtr + 1));#endif yState = yyIsContStackPtr [yyStackPtr]; for (;;) { yyIsContStackPtr [yyStackPtr] = yState; yState = yyNext (yState, yyTerminal); if (yState == yyNoState) return rfalse; do { /* reduce */ if (yState > yyLastReduceState) { /* dynamic ? */ yState = yyCondition [yState - yyLastReduceState]; } if (yState <= yyLastStopState) { /* read, read reduce, or accept? */ return rtrue; } else { /* reduce */ yyStackPtr -= yyLength [yState - yyFirstReduceState]; yyNonterminal = yyLeftHandSide [yState - yyFirstReduceState]; } yState = yyNext (yyIsContStackPtr [yyStackPtr], (yySymbolRange) yyNonterminal); if (yyStackPtr >= (short) yyIsContStackSize) ExtendArray ((char * *) & yyIsContStackPtr, & yyIsContStackSize, (unsigned long) sizeof (yyStateRange)); yyStackPtr ++; } while (yState >= yyFirstFinalState); } }/* compute a set of terminal symbols that can be used to restart parsing in a given stack configuration. we simulate parsing until end of file using a suffix program synthesized by the function (array) yyContinuation. All symbols acceptable in the states reached during the simulation can be used to restart parsing.*/static void yyComputeRestartPoints#if defined __STDC__ | defined __cplusplus (yyStateRange * yyStateStack, short yyStackPtr, tSet * yyRestartSet)#else (yyStateStack, yyStackPtr, yyRestartSet) yyStateRange * yyStateStack ; short yyStackPtr ; tSet * yyRestartSet ;#endif { register yyStateRange yState ; register yytNonterminal yyNonterminal ; tSet yyContinueSet ; while (yyStackPtr >= (short) yyCompResStackSize) /* pass Stack by value */ ExtendArray ((char * *) & yyCompResStackPtr, & yyCompResStackSize, (unsigned long) sizeof (yyStateRange));#ifdef BCOPY bcopy ((char *) yyStateStack, (char *) yyCompResStackPtr, (int) sizeof (yyStateRange) * (yyStackPtr + 1));#else (void) memcpy ((char *) yyCompResStackPtr, (char *) yyStateStack, (int) sizeof (yyStateRange) * (yyStackPtr + 1));#endif MakeSet (& yyContinueSet, (short) yyLastTerminal); AssignEmpty (yyRestartSet); yState = yyCompResStackPtr [yyStackPtr]; for (;;) { if (yyStackPtr >= (short) yyCompResStackSize) ExtendArray ((char * *) & yyCompResStackPtr, & yyCompResStackSize, (unsigned long) sizeof (yyStateRange)); yyCompResStackPtr [yyStackPtr] = yState; yyComputeContinuation (yyCompResStackPtr, yyStackPtr, & yyContinueSet); Union (yyRestartSet, & yyContinueSet); yState = yyNext (yState, yyContinuation [yState]); if (yState >= yyFirstFinalState) { /* final state ? */ if (yState <= yyLastReadReduceState) { /* read reduce ? */ yyStackPtr ++; yState = yyFinalToProd [yState - yyFirstReadReduceState];#ifdef YYDCRP yyCompResStackPtr [yyStackPtr] = yyCompResStackPtr [yyStackPtr - 1]; (void) fprintf (yyTrace, "%5d shift %s\n", yyCompResStackPtr [yyStackPtr], directives_TokenName [yyContinuation [yyCompResStackPtr [yyStackPtr]]]);#endif } do { /* reduce */ if (yState > yyLastReduceState) { /* dynamic ? */#ifdef YYDCRP (void) fprintf (yyTrace, "%5d dynamic decision %d\n", yyCompResStackPtr [yyStackPtr], yState - yyLastReduceState);#endif yState = yyCondition [yState - yyLastReduceState]; } if (yyFirstReduceState <= yState && yState <= yyLastStopState) { /* accept */#ifdef YYDCRP (void) fprintf (yyTrace, "%5d accept\n", yyCompResStackPtr [yyStackPtr]);#endif ReleaseSet (& yyContinueSet); return; } else if (yState < yyFirstFinalState) { /* read */ goto yyRead; } else { /* reduce */#ifdef YYDCRP (void) fprintf (yyTrace, "%5d reduce %s\n", yyCompResStackPtr [yyStackPtr], yyRule [yState - yyLastReadReduceState]);#endif yyStackPtr -= yyLength [yState - yyFirstReduceState]; yyNonterminal = yyLeftHandSide [yState - yyFirstReduceState]; } yState = yyNext (yyCompResStackPtr [yyStackPtr], (yySymbolRange) yyNonterminal); yyStackPtr ++; } while (yState >= yyFirstFinalState); } else { /* read */yyRead:#ifdef YYDCRP (void) fprintf (yyTrace, "%5d shift %s\n", yyCompResStackPtr [yyStackPtr], directives_TokenName [yyContinuation [yyCompResStackPtr [yyStackPtr]]]);#endif yyStackPtr ++; } } }/* access the parse table: Next : State x Symbol -> Action */static yyStateRange yyNext#if defined __STDC__ | defined __cplusplus (yyStateRange yyState, yySymbolRange yySymbol)#else (yyState, yySymbol) yyStateRange yyState; yySymbolRange yySymbol;#endif { if (yySymbol <= yyLastTerminal) { for (;;) { register yytComb * yyTCombPtr = yyTBasePtr [yyState] + yySymbol;#if defined YYTDefault & defined YYaccDefault register unsigned long * yylp;#endif if (yyTCombPtr->Check == yyState) return yyTCombPtr->Next;#ifdef YYTDefault#ifdef YYaccDefault return (yylp = yyDefaultLook [yyState]) && (yylp [yySymbol >> 5] >> (yySymbol & 0x1f)) & 1 ? yyTDefault [yyState] : yyNoState;#else if ((yyState = yyTDefault [yyState]) == yyNoState) return yyNoState;#endif#else return yyNoState;#endif } }#ifdef YYNDefault for (;;) { register yytComb * yyNCombPtr = yyNBasePtr [yyState] + yySymbol; if (yyNCombPtr->Check == yyState) return yyNCombPtr->Next; yyState = yyNDefault [yyState]; }#else return yyNBasePtr [yyState] [yySymbol];#endif }#endifvoid Begindirectives ARGS ((void)) {/* line 18 "directives.lrk" */ }void Closedirectives ARGS ((void)) {/* line 21 "directives.lrk" */ }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -