📄 scanner.c
字号:
} else { yyChBufferStart = yyChBufferIndexReg; } yyChBufferStart2 = (char *) yyChBufferStart; /* extend buffer if necessary */ if (yyChBufferFree < yyChBufferSize >> 3 /* / 8 */ ) { register unsigned long yyDelta; register unsigned char * yyOldChBufferPtr = yyChBufferPtr; ExtendArray ((char * *) & yyChBufferPtr, & yyChBufferSize, (unsigned long) sizeof (char)); if (yyChBufferPtr == NULL) yyErrorMessage (1); yyDelta = yyChBufferPtr - yyOldChBufferPtr; yyChBufferStart += yyDelta; yyLineStart += yyDelta; TokenPtr += yyDelta; yyChBufferStart2 = (char *) yyChBufferStart; yyChBufferFree = Exp2 (Log2 (yyChBufferSize - 4 - yyMaxAlign - TokenLength)); if (yyStateStackSize < yyChBufferSize) { yyStateRange * yyOldStateStack = yyStateStack; ExtendArray ((char * *) & yyStateStack, & yyStateStackSize, (unsigned long) sizeof (yyStateRange)); if (yyStateStack == NULL) yyErrorMessage (1); yyStatePtr += yyStateStack - yyOldStateStack; } } /* read buffer and restart */ yyChBufferIndex = yyChBufferIndexReg = yyChBufferStart; yyFileOffset += yyBytesRead; yyBytesRead = GetLine (yySourceFile, (char *) yyChBufferIndex, (int) yyChBufferFree); if (yyBytesRead <= 0) { yyBytesRead = 0; yyEof = rtrue; } yyChBufferStart [yyBytesRead ] = yyEobCh; yyChBufferStart [yyBytesRead + 1] = '\0'; goto yyContinue; } if (TokenLength == 0) { /* end of file reached */ yySetPosition CloseFile (); if (yyFileStackPtr == yyFileStack) {/* line 126 "tcl.rex" */ EOF_reached = rtrue; return 14; } if (yyFileStackPtr == yyFileStack) return EofToken; goto yyBegin; } break; default: yyErrorMessage (0); } }}static void yyInitialize ARGS ((void)) { if (yyFileStackSize == 0) { yyStateStackSize = yyInitBufferSize; MakeArray ((char * *) & yyStateStack, & yyStateStackSize, (unsigned long) sizeof (yyStateRange)); if (yyStateStack == NULL) yyErrorMessage (1); yyStateStack [0] = yyDefaultState; yyFileStackSize = yyInitFileStackSize; MakeArray ((char * *) & yyFileStack, & yyFileStackSize, (unsigned long) sizeof (yytFileStack)); if (yyFileStack == NULL) yyErrorMessage (1); yyFileStackPtr = yyFileStack; } if (yyFileStackPtr >= yyFileStack + yyFileStackSize - 1) { unsigned long yyyFileStackPtr = yyFileStackPtr - yyFileStack; ExtendArray ((char * *) & yyFileStack, & yyFileStackSize, (unsigned long) sizeof (yytFileStack)); if (yyFileStack == NULL) yyErrorMessage (1); yyFileStackPtr = yyFileStack + yyyFileStackPtr; } yyFileStackPtr ++; /* push file */ yyFileStackPtr->yySourceFile = yySourceFile ; yyFileStackPtr->yyEof = yyEof ; yyFileStackPtr->yyChBufferPtr = yyChBufferPtr ; yyFileStackPtr->yyChBufferStart = yyChBufferStart ; yyFileStackPtr->yyChBufferSize = yyChBufferSize ; yyFileStackPtr->yyChBufferIndex = yyChBufferIndex ; yyFileStackPtr->yyBytesRead = yyBytesRead ; yyFileStackPtr->yyFileOffset = yyFileOffset ; yyFileStackPtr->yyLineCount = yyLineCount ; yyFileStackPtr->yyLineStart = yyLineStart ; /* initialize file state */ yyChBufferSize = yyInitBufferSize; MakeArray ((char * *) & yyChBufferPtr, & yyChBufferSize, (unsigned long) sizeof (char)); if (yyChBufferPtr == NULL) yyErrorMessage (1); yyChBufferStart = & yyChBufferPtr [yyMaxAlign]; yyChBufferStart2 = (char *) yyChBufferStart; yyChBufferStart [-1] = yyEolCh; /* begin of line indicator */ yyChBufferStart [ 0] = yyEobCh; /* end of buffer sentinel */ yyChBufferStart [ 1] = '\0'; yyChBufferIndex = yyChBufferStart; TokenPtr = (char *) yyChBufferStart; yyEof = rfalse; yyBytesRead = 0; yyFileOffset = 0; yyLineCount = 1; yyLineStart = & yyChBufferStart [-1]; }void BeginFile#if defined __STDC__ | defined __cplusplus (char * yyFileName)#else (yyFileName) char * yyFileName;#endif { yyInitialize (); yySourceFile = yyFileName == NULL ? StdIn : BeginSource (yyFileName); if (yySourceFile < 0) yyErrorMessage (3); }void CloseFile ARGS ((void)) { if (yyFileStackPtr == yyFileStack) yyErrorMessage (2); CloseSource (yySourceFile); ReleaseArray ((char * *) & yyChBufferPtr, & yyChBufferSize, (unsigned long) sizeof (char)); /* pop file */ yySourceFile = yyFileStackPtr->yySourceFile ; yyEof = yyFileStackPtr->yyEof ; yyChBufferPtr = yyFileStackPtr->yyChBufferPtr ; yyChBufferStart = yyFileStackPtr->yyChBufferStart ; yyChBufferStart2 = (char *) yyChBufferStart ; yyChBufferSize = yyFileStackPtr->yyChBufferSize ; yyChBufferIndex = yyFileStackPtr->yyChBufferIndex ; yyBytesRead = yyFileStackPtr->yyBytesRead ; yyFileOffset = yyFileStackPtr->yyFileOffset ; yyLineCount = yyFileStackPtr->yyLineCount ; yyLineStart = yyFileStackPtr->yyLineStart ; yyFileStackPtr --; if (yyFileStackPtr == yyFileStack) ResetScanner (); }#ifdef xxGetWordint GetWord#if defined __STDC__ | defined __cplusplus (char * yyWord)#else (yyWord) char * yyWord;#endif { register char * yySource = TokenPtr; register char * yyTarget = yyWord; register char * yyChBufferIndexReg = (char *) yyChBufferIndex; while (yySource < yyChBufferIndexReg) * yyTarget ++ = * yySource ++; * yyTarget = '\0'; return (int) (yyChBufferIndexReg - TokenPtr); }#endif#ifdef xxGetLowerint GetLower#if defined __STDC__ | defined __cplusplus (char * yyWord)#else (yyWord) char * yyWord;#endif { register unsigned char * yySource = (unsigned char *) TokenPtr; register unsigned char * yyTarget = (unsigned char *) yyWord; register unsigned char * yyChBufferIndexReg = yyChBufferIndex; while (yySource < yyChBufferIndexReg) * yyTarget ++ = yyToLower [* yySource ++]; * yyTarget = '\0'; return (int) (yyChBufferIndexReg - (unsigned char *) TokenPtr); }#endif#ifdef xxGetUpperint GetUpper#if defined __STDC__ | defined __cplusplus (char * yyWord)#else (yyWord) char * yyWord;#endif { register unsigned char * yySource = (unsigned char *) TokenPtr; register unsigned char * yyTarget = (unsigned char *) yyWord; register unsigned char * yyChBufferIndexReg = yyChBufferIndex; while (yySource < yyChBufferIndexReg) * yyTarget ++ = yyToUpper [* yySource ++]; * yyTarget = '\0'; return (int) (yyChBufferIndexReg - (unsigned char *) TokenPtr); }#endif#ifdef xxinputstatic char input ARGS ((void)) { if (yyChBufferIndex == & yyChBufferStart [yyBytesRead]) { if (! yyEof) { yyLineStart -= yyBytesRead; yyChBufferIndex = yyChBufferStart = yyChBufferPtr; yyChBufferStart2 = (char *) yyChBufferStart; yyFileOffset += yyBytesRead; yyBytesRead = GetLine (yySourceFile, (char *) yyChBufferIndex, (int) Exp2 (Log2 (yyChBufferSize))); if (yyBytesRead <= 0) { yyBytesRead = 0; yyEof = rtrue; } yyChBufferStart [yyBytesRead ] = yyEobCh; yyChBufferStart [yyBytesRead + 1] = '\0'; } } if (yyChBufferIndex == & yyChBufferStart [yyBytesRead]) return '\0'; else return * yyChBufferIndex ++; }#endifstatic void unput#if defined __STDC__ | defined __cplusplus (char yyc)#else (yyc) char yyc;#endif { * (-- yyChBufferIndex) = yyc; }static void yyLess#if defined __STDC__ | defined __cplusplus (int yyn)#else (yyn) int yyn;#endif { yyChBufferIndex -= TokenLength - yyn; TokenLength = yyn; }void BeginScanner ARGS ((void)) {/* line 128 "tcl.rex" */ EOF_reached = rfalse; first_word = rtrue; KlLvl = 0; KPop = 'X'; KlStack [0] = 'X'; yyStart (STD); }void CloseScanner ARGS ((void)) { }void ResetScanner ARGS ((void)) { yyChBufferPtr = yyInitChBuffer; yyChBufferSize = 0; if (yyStateStackSize != 0) ReleaseArray ((char * *) & yyStateStack, & yyStateStackSize, (unsigned long) sizeof (yyStateRange)); yyStateStack = yyInitStateStack; yyStateStackSize = 0; if (yyFileStackSize != 0) ReleaseArray ((char * *) & yyFileStack, & yyFileStackSize, (unsigned long) sizeof (yytFileStack)); yyFileStackSize = 0;#if defined xxyyPush | defined xxyyPop if (yyStStStackSize != 0) ReleaseArray ((char * *) & yyStStStackPtr, & yyStStStackSize, (unsigned long) sizeof (yyStateRange)); yyStStStackSize = 0; yyStStStackIdx = 0;#endif yyStartState = STD; yyPreviousStart = STD; yySourceFile = StdIn; }static void yyErrorMessage#if defined __STDC__ | defined __cplusplus (int yyErrorCode)#else (yyErrorCode) int yyErrorCode;#endif { WritePosition (stderr, Attribute.Position); switch (yyErrorCode) { case 0: (void) fprintf (stderr, ": Scanner: internal error\n"); break; case 1: (void) fprintf (stderr, ": Scanner: out of memory\n"); break; case 2: (void) fprintf (stderr, ": Scanner: file stack underflow (too many calls of CloseFile)\n"); break; case 3: (void) fprintf (stderr, ": Scanner: cannot open input file\n"); break; case 4: (void) fprintf (stderr, ": Scanner: start stack underflow (too many calls of yyPop)\n"); break; } Scanner_Exit (); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -