📄 scanner.c
字号:
unsigned int yyLineCount ; unsigned char * yyLineStart ; } yytFileStack ;static yytFileStack * yyFileStack ;static unsigned long yyFileStackSize = 0;static yytFileStack * yyFileStackPtr ;int GetToken ARGS ((void)){ register yyStateRange yyState; register yyStateRange * yyStatePtr; register unsigned char * yyChBufferIndexReg; register yyCombType * * yyBasePtrReg = yyBasePtr;/* line 95 "tcl.rex" */ char word [256];/* * Abbau des Stacks ge鰂fneter Klammern bis zur n鋍hsten passenden Klammerebene. * d.h. ggf werden im Source nicht vorhandene Klammerzu-Zeichen zur點kgeliefert. * aus {[} --> {[end_of_command]end_of_command} * der Parser kann bei Bedarf die 'unechten' Tokens an einem Attribut erkennen. */ if (KPop != 'X') { L_KlPop: switch (KlStack [KlLvl]) { case '"' : KlStack [KlLvl] = 'A'; first_word = rtrue; return 15; case '{' : KlStack [KlLvl] = '}'; first_word = rtrue; return 15; case '[' : KlStack [KlLvl] = ']'; first_word = rtrue; return 15; case 'A' : if (KlStack [KlLvl --] == KPop) { KPop = 'X'; } first_word = rfalse; return 5; case '}' : if (KlStack [KlLvl --] == KPop) { KPop = 'X'; } first_word = rfalse; return 9; case ']' : if (KlStack [KlLvl --] == KPop) { KPop = 'X'; } first_word = rfalse; return 7; } } if (EOF_reached) return EofToken;yyBegin: yyState = yyStartState; /* initialize */ yyStatePtr = & yyStateStack [1]; yyChBufferIndexReg = yyChBufferIndex; TokenPtr = (char *) yyChBufferIndexReg; /* ASSERT yyChBuffer [yyChBufferIndex] == first character */yyContinue: /* continue after sentinel or skipping blanks */ for (;;) { /* execute as many state transitions as possible */ /* determine next state and get next character */ register yyCombType * yyTablePtr = (yyBasePtrReg [yyState] + * yyChBufferIndexReg ++); if (yyTablePtr->yyCheck == yyState) { yyState = yyTablePtr->yyNext; * yyStatePtr ++ = yyState; /* push state */ goto yyContinue; } yyChBufferIndexReg --; /* reconsider character */ if ((yyState = yyDefault [yyState]) == yyDNoState) break; } for (;;) { /* search for last final state */ TokenLength = (int) (yyChBufferIndexReg - (unsigned char *) TokenPtr); yyChBufferIndex = yyChBufferIndexReg;switch (* -- yyStatePtr) {case 5:;case 31:;case 33:;case 43:;/* line 155 "tcl.rex" */{ yyPrevious; } yyy1: goto yyBegin;case 29:;yySetPosition/* line 157 "tcl.rex" */{ yyPrevious; yyEol (0); first_word = rtrue; return 15; } yyy2: goto yyBegin;case 12:;yySetPosition/* line 160 "tcl.rex" */{ char * p = strchr (TokenPtr, '\n'); yyEol (TokenPtr + TokenLength - p - 1); return 13; } yyy3: goto yyBegin;case 46:;yySetPosition/* line 165 "tcl.rex" */{ if (first_word && ! is_open (r_brace)) { yyStart (Comment); } else { Attribute.character.text = '#'; first_word = rfalse; return 2; } } yyy4: goto yyBegin;case 45:;yySetPosition/* line 173 "tcl.rex" */{ if (is_open ('"')) { KPop = 'A'; goto L_KlPop; } else { push ('"'); first_word = rfalse; return 4; } } yyy5: goto yyBegin;case 44:;yySetPosition/* line 180 "tcl.rex" */{ if (is_open (* TokenPtr)) { KPop = * TokenPtr; goto L_KlPop; } else { Attribute.character.text = * TokenPtr; first_word = rfalse; return 2; } } yyy6: goto yyBegin;case 42:;yySetPosition/* line 180 "tcl.rex" */{ if (is_open (* TokenPtr)) { KPop = * TokenPtr; goto L_KlPop; } else { Attribute.character.text = * TokenPtr; first_word = rfalse; return 2; } } yyy7: goto yyBegin;case 41:;yySetPosition/* line 188 "tcl.rex" */{ first_word = rtrue; return 15; } yyy8: goto yyBegin;case 9:;case 28:;yySetPosition/* line 190 "tcl.rex" */{ yyEol (0); first_word = rtrue; return 15; } yyy9: goto yyBegin;case 8:;case 17:;case 30:;case 32:;yySetPosition/* line 192 "tcl.rex" */{ return 13; } yyy10: goto yyBegin;case 40:;yySetPosition/* line 194 "tcl.rex" */{ push ('{'); first_word = rfalse; return 8; } yyy11: goto yyBegin;case 39:;yySetPosition/* line 195 "tcl.rex" */{ push ('['); first_word = rfalse; return 6; } yyy12: goto yyBegin;case 38:;yySetPosition/* line 196 "tcl.rex" */{ first_word = rfalse; return 11; } yyy13: goto yyBegin;case 37:;yySetPosition/* line 197 "tcl.rex" */{ first_word = rfalse; return 12; } yyy14: goto yyBegin;case 36:;yySetPosition/* line 198 "tcl.rex" */{ first_word = rfalse; return 3; } yyy15: goto yyBegin;case 14:;yySetPosition/* line 199 "tcl.rex" */{ first_word = rfalse; return 10; } yyy16: goto yyBegin;case 35:;yySetPosition/* line 200 "tcl.rex" */{ first_word = rfalse; return 10; } yyy17: goto yyBegin;case 7:;yySetPosition/* line 202 "tcl.rex" */{ Attribute.ident.ident = MakeIdent (TokenPtr, TokenLength); first_word = rfalse; return 1; } yyy18: goto yyBegin;case 11:;case 19:;case 24:;yySetPosition/* line 207 "tcl.rex" */{ unsigned int i; GetWord (word); sscanf (word + 1, "%o", & i); Attribute.character.text = i; first_word = rfalse; return 2; } yyy19: goto yyBegin;case 13:;case 20:;yySetPosition/* line 215 "tcl.rex" */{ unsigned int i; GetWord (word); sscanf (word + 2, "%x", & i); Attribute.character.text = i; first_word = rfalse; return 2; } yyy20: goto yyBegin;case 10:;case 18:;case 23:;yySetPosition/* line 222 "tcl.rex" */{ Attribute.character.text = TokenPtr [1]; first_word = rfalse; return 2; } yyy21: goto yyBegin;case 6:;case 16:;case 22:;case 34:;yySetPosition/* line 226 "tcl.rex" */{ Attribute.character.text = * TokenPtr; first_word = rfalse; return 2; } yyy22: goto yyBegin;case 1:;case 2:;case 3:;case 4:;case 15:;case 21:;case 25:; /* non final states */ yyChBufferIndexReg --; /* return character */ break;case 27: yySetPosition /* TokenLength = 1; */ yyChBufferIndex = ++ yyChBufferIndexReg; {/* line 138 "tcl.rex" */ MessageI ("illegal character", xxError, Attribute.Position, xxCharacter, TokenPtr); } goto yyBegin; case yyDNoState: goto yyBegin;case 26: yyChBufferIndex = -- yyChBufferIndexReg; /* undo last state transit */ if (-- TokenLength == 0) { /* get previous state */ yyState = yyStartState; } else { yyState = * (yyStatePtr - 1); } if (yyChBufferIndex != & yyChBufferStart [yyBytesRead]) { /* end of buffer sentinel in buffer */ if ((yyState = yyEobTrans [yyState]) == yyDNoState) continue; yyChBufferIndexReg ++; * yyStatePtr ++ = yyState; /* push state */ goto yyContinue; } /* end of buffer reached */ if (! yyEof) { register char * yySource; register char * yyTarget; unsigned long yyChBufferFree; if (yyChBufferSize == 0) { yyInitialize (); yyChBufferIndexReg = yyChBufferIndex; } yySource = TokenPtr - 1; yyTarget = (char *) & yyChBufferPtr [(yyMaxAlign - 1 - TokenLength) & (yyMaxAlign - 1)]; yyChBufferFree = Exp2 (Log2 (yyChBufferSize - 4 - yyMaxAlign - TokenLength)); /* copy initial part of token in front of the input buffer */ if (yySource > yyTarget) { TokenPtr = yyTarget + 1; do * yyTarget ++ = * yySource ++; while (yySource < (char *) yyChBufferIndexReg); yyLineStart += (unsigned char *) yyTarget - yyChBufferStart - yyBytesRead; yyChBufferStart = (unsigned char *) yyTarget;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -