📄 scanner.fs.c
字号:
/* Generated by re2c */#line 1 "scanner.fs.re"/* $Id: scanner.re,v 1.37 2006/02/25 12:41:41 helly Exp $ */#include <stdlib.h>#include <string.h>#include <iostream>#include <sstream>#include "scanner.h"#include "parser.h"#include "y.tab.h"#include "globals.h"#include "dfa.h"extern YYSTYPE yylval;#ifndef MAX#define MAX(a,b) (((a)>(b))?(a):(b))#endif#define BSIZE 8192#define YYCTYPE char#define YYCURSOR cursor#define YYLIMIT lim#define YYMARKER ptr#define YYFILL(n) {cursor = fill(cursor);}#define RETURN(i) {cur = cursor; return i;}namespace re2c{Scanner::Scanner(std::istream& i, std::ostream& o) : in(i) , out(o) , bot(NULL), tok(NULL), ptr(NULL), cur(NULL), pos(NULL), lim(NULL) , top(NULL), eof(NULL), tchar(0), tline(0), cline(1), iscfg(0){ ;}char *Scanner::fill(char *cursor){ if(!eof) { uint cnt = tok - bot; if(cnt) { memcpy(bot, tok, lim - tok); tok = bot; ptr -= cnt; cursor -= cnt; pos -= cnt; lim -= cnt; } if((top - lim) < BSIZE) { char *buf = new char[(lim - bot) + BSIZE]; memcpy(buf, tok, lim - tok); tok = buf; ptr = &buf[ptr - bot]; cursor = &buf[cursor - bot]; pos = &buf[pos - bot]; lim = &buf[lim - bot]; top = &lim[BSIZE]; delete [] bot; bot = buf; } in.read(lim, BSIZE); if ((cnt = in.gcount()) != BSIZE ) { eof = &lim[cnt]; *eof++ = '\0'; } lim += cnt; } return cursor;}#line 95 "scanner.fs.re"int Scanner::echo(){ char *cursor = cur; bool ignore_eoc = false; if (eof && cursor == eof) // Catch EOF { return 0; } tok = cursor;echo:#line 96 "<stdout>"{ switch(YYGETSTATE()) { default: goto yy0; case 0: goto yyFillLabel0; case 1: goto yyFillLabel1; case 2: goto yyFillLabel2; case 3: goto yyFillLabel3; case 4: goto yyFillLabel4; case 5: goto yyFillLabel5; case 6: goto yyFillLabel6; case 7: goto yyFillLabel7; case 8: goto yyFillLabel8; case 9: goto yyFillLabel9; case 10: goto yyFillLabel10; case 11: goto yyFillLabel11; case 12: goto yyFillLabel12; case 13: goto yyFillLabel13; case 14: goto yyFillLabel14; case 15: goto yyFillLabel15; case 16: goto yyFillLabel16; case 17: goto yyFillLabel17; case 18: goto yyFillLabel18; case 19: goto yyFillLabel19; case 20: goto yyFillLabel20; case 21: goto yyFillLabel21; case 22: goto yyFillLabel22; case 23: goto yyFillLabel23; case 24: goto yyFillLabel24; case 25: goto yyFillLabel25; case 26: goto yyFillLabel26; case 27: goto yyFillLabel27; case 28: goto yyFillLabel28; case 29: goto yyFillLabel29; case 30: goto yyFillLabel30; case 31: goto yyFillLabel31; case 32: goto yyFillLabel32; case 33: goto yyFillLabel33; case 34: goto yyFillLabel34; case 35: goto yyFillLabel35; }yy0: YYSETSTATE(0); if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);yyFillLabel0: yych = *YYCURSOR; if(yych <= ')') { if(yych <= 0x00) goto yy7; if(yych == 0x0A) goto yy5; goto yy9; } else { if(yych <= '*') goto yy4; if(yych != '/') goto yy9; } yych = *(YYMARKER = ++YYCURSOR); if(yych == '*') goto yy12;yy3:#line 141 "scanner.fs.re" { goto echo; }#line 158 "<stdout>"yy4: yych = *++YYCURSOR; if(yych == '/') goto yy10; goto yy3;yy5: ++YYCURSOR;#line 130 "scanner.fs.re" { out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok)); tok = pos = cursor; cline++; goto echo; }#line 171 "<stdout>"yy7: ++YYCURSOR;#line 135 "scanner.fs.re" { out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0 if(cursor == eof) { RETURN(0); } }#line 181 "<stdout>"yy9: yych = *++YYCURSOR; goto yy3;yy10: ++YYCURSOR;#line 121 "scanner.fs.re" { if (ignore_eoc) { ignore_eoc = false; } else { out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok)); } tok = pos = cursor; goto echo; }#line 197 "<stdout>"yy12: yych = *++YYCURSOR; if(yych == '!') goto yy14;yy13: YYCURSOR = YYMARKER; goto yy3;yy14: yych = *++YYCURSOR; if(yych == 'm') goto yy15; if(yych == 'r') goto yy16; goto yy13;yy15: yych = *++YYCURSOR; if(yych == 'a') goto yy21; goto yy13;yy16: yych = *++YYCURSOR; if(yych != 'e') goto yy13; yych = *++YYCURSOR; if(yych != '2') goto yy13; yych = *++YYCURSOR; if(yych != 'c') goto yy13; ++YYCURSOR;#line 110 "scanner.fs.re" { out.write((const char*)(tok), (const char*)(&cursor[-7]) - (const char*)(tok)); tok = cursor; RETURN(1); }#line 227 "<stdout>"yy21: yych = *++YYCURSOR; if(yych != 'x') goto yy13; yych = *++YYCURSOR; if(yych != ':') goto yy13; yych = *++YYCURSOR; if(yych != 'r') goto yy13; yych = *++YYCURSOR; if(yych != 'e') goto yy13; yych = *++YYCURSOR; if(yych != '2') goto yy13; yych = *++YYCURSOR; if(yych != 'c') goto yy13; ++YYCURSOR;#line 115 "scanner.fs.re" { out << "#define YYMAXFILL " << maxFill << std::endl; tok = pos = cursor; ignore_eoc = true; goto echo; }#line 249 "<stdout>"}#line 144 "scanner.fs.re"}int Scanner::scan(){ char *cursor = cur; uint depth;scan: tchar = cursor - pos; tline = cline; tok = cursor; if (iscfg == 1) { goto config; } else if (iscfg == 2) { goto value; }#line 274 "<stdout>"{ YYSETSTATE(1); if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);yyFillLabel1: yych = *YYCURSOR; if(yych <= '/') { if(yych <= '!') { if(yych <= 0x0C) { if(yych <= 0x08) goto yy56; if(yych <= 0x09) goto yy50; if(yych <= 0x0A) goto yy52; goto yy56; } else { if(yych <= 0x0D) goto yy54; if(yych == ' ') goto yy50; goto yy56; } } else { if(yych <= ')') { if(yych <= '"') goto yy37; if(yych <= '&') goto yy56; if(yych <= '\'') goto yy39; goto yy43; } else { if(yych <= '+') { if(yych <= '*') goto yy35; goto yy44; } else { if(yych <= '-') goto yy56; if(yych <= '.') goto yy48; goto yy33; } } } } else { if(yych <= 'Z') { if(yych <= '=') { if(yych == ';') goto yy43; if(yych <= '<') goto yy56; goto yy43; } else { if(yych == '?') goto yy44; if(yych <= '@') goto yy56; goto yy47; } } else { if(yych <= 'q') { if(yych <= '[') goto yy41; if(yych <= '\\') goto yy43; if(yych <= '`') goto yy56; goto yy47; } else { if(yych <= 'z') { if(yych <= 'r') goto yy45; goto yy47; } else { if(yych <= '{') goto yy31; if(yych <= '|') goto yy43; goto yy56; } } } }yy31: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych <= '/') { if(yych == ',') goto yy97; } else { if(yych <= '0') goto yy94; if(yych <= '9') goto yy95; }yy32:#line 166 "scanner.fs.re" { depth = 1; goto code; }#line 353 "<stdout>"yy33: ++YYCURSOR; if((yych = *YYCURSOR) == '*') goto yy92;yy34:#line 196 "scanner.fs.re" { RETURN(*tok); }#line 360 "<stdout>"yy35: ++YYCURSOR; if((yych = *YYCURSOR) == '/') goto yy90;yy36:#line 198 "scanner.fs.re" { yylval.op = *tok; RETURN(CLOSE); }#line 368 "<stdout>"yy37: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych != 0x0A) goto yy86;yy38:#line 183 "scanner.fs.re" { fatal("unterminated string constant (missing \")"); }#line 376 "<stdout>"yy39: yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); if(yych != 0x0A) goto yy81;yy40:#line 184 "scanner.fs.re" { fatal("unterminated string constant (missing ')"); }#line 384 "<stdout>"yy41: yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if(yych == 0x0A) goto yy42; if(yych == '^') goto yy72; goto yy71;yy42:#line 194 "scanner.fs.re" { fatal("unterminated range (missing ])"); }#line 394 "<stdout>"yy43: yych = *++YYCURSOR; goto yy34;yy44: yych = *++YYCURSOR; goto yy36;yy45: ++YYCURSOR; if((yych = *YYCURSOR) == 'e') goto yy62; goto yy61;yy46:#line 225 "scanner.fs.re" { cur = cursor; yylval.symbol = Symbol::find(token()); return ID; }#line 410 "<stdout>"yy47: yych = *++YYCURSOR; goto yy61;yy48: ++YYCURSOR;#line 229 "scanner.fs.re" { cur = cursor; yylval.regexp = mkDot(); return RANGE; }#line 421 "<stdout>"yy50: ++YYCURSOR; yych = *YYCURSOR; goto yy59;yy51:#line 234 "scanner.fs.re" { goto scan; }#line 429 "<stdout>"yy52: ++YYCURSOR;yy53:#line 236 "scanner.fs.re" { if(cursor == eof) RETURN(0); pos = cursor; cline++; goto scan; }#line 438 "<stdout>"yy54: ++YYCURSOR; if((yych = *YYCURSOR) == 0x0A) goto yy57;yy55:#line 241 "scanner.fs.re" { std::ostringstream msg; msg << "unexpected character: "; prtChOrHex(msg, *tok); fatal(msg.str().c_str()); goto scan; }#line 450 "<stdout>"yy56: yych = *++YYCURSOR; goto yy55;yy57: yych = *++YYCURSOR; goto yy53;yy58: ++YYCURSOR; YYSETSTATE(2); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel2: yych = *YYCURSOR;yy59: if(yych == 0x09) goto yy58; if(yych == ' ') goto yy58; goto yy51;yy60: ++YYCURSOR; YYSETSTATE(3); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel3: yych = *YYCURSOR;yy61: if(yych <= '@') { if(yych <= '/') goto yy46; if(yych <= '9') goto yy60; goto yy46; } else { if(yych <= 'Z') goto yy60; if(yych <= '`') goto yy46; if(yych <= 'z') goto yy60; goto yy46; }yy62: yych = *++YYCURSOR; if(yych != '2') goto yy61; yych = *++YYCURSOR; if(yych != 'c') goto yy61; yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); if(yych != ':') goto yy61;yy65: ++YYCURSOR; YYSETSTATE(4); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel4: yych = *YYCURSOR; if(yych <= '@') goto yy66; if(yych <= 'Z') goto yy67; if(yych <= '`') goto yy66; if(yych <= 'z') goto yy67;yy66: YYCURSOR = YYMARKER; if(yyaccept <= 3) { if(yyaccept <= 1) { if(yyaccept <= 0) { goto yy32; } else { goto yy38; } } else { if(yyaccept <= 2) { goto yy40; } else { goto yy42; } } } else { if(yyaccept <= 5) { if(yyaccept <= 4) { goto yy46; } else { goto yy69; } } else { goto yy98; } }yy67: yyaccept = 5; YYMARKER = ++YYCURSOR; YYSETSTATE(5); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel5: yych = *YYCURSOR; if(yych <= 'Z') { if(yych <= '9') { if(yych >= '0') goto yy67; } else { if(yych <= ':') goto yy65; if(yych >= 'A') goto yy67; } } else { if(yych <= '_') { if(yych >= '_') goto yy67; } else { if(yych <= '`') goto yy69; if(yych <= 'z') goto yy67; } }yy69:#line 218 "scanner.fs.re" { cur = cursor; tok+= 5; /* skip "re2c:" */ iscfg = 1; yylval.str = new Str(token()); return CONFIG; }#line 559 "<stdout>"yy70: ++YYCURSOR; YYSETSTATE(6); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel6: yych = *YYCURSOR;yy71: if(yych <= '[') { if(yych == 0x0A) goto yy66; goto yy70; } else { if(yych <= '\\') goto yy74; if(yych <= ']') goto yy75; goto yy70; }yy72: ++YYCURSOR; YYSETSTATE(7); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel7: yych = *YYCURSOR; if(yych <= '[') { if(yych == 0x0A) goto yy66; goto yy72; } else { if(yych <= '\\') goto yy77; if(yych <= ']') goto yy78; goto yy72; }yy74: ++YYCURSOR; YYSETSTATE(8); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel8: yych = *YYCURSOR; if(yych == 0x0A) goto yy66; goto yy70;yy75: ++YYCURSOR;#line 190 "scanner.fs.re" { cur = cursor; yylval.regexp = ranToRE(token()); return RANGE; }#line 603 "<stdout>"yy77: ++YYCURSOR; YYSETSTATE(9); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel9: yych = *YYCURSOR; if(yych == 0x0A) goto yy66; goto yy72;yy78: ++YYCURSOR;#line 186 "scanner.fs.re" { cur = cursor; yylval.regexp = invToRE(token()); return RANGE; }#line 618 "<stdout>"yy80: ++YYCURSOR; YYSETSTATE(10); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel10: yych = *YYCURSOR;yy81: if(yych <= '&') { if(yych == 0x0A) goto yy66; goto yy80; } else { if(yych <= '\'') goto yy83; if(yych != '\\') goto yy80; } ++YYCURSOR; YYSETSTATE(11); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel11:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -