/* Generated by re2c */ #line 1 "bug1297658.re" #include #include #include struct Scanner { Scanner(char *_inp) : inp(_inp), buf(NULL), ptr(NULL), len(0), siz(strlen(_inp)), line(0) { fill(0); cur = buf; } void fill(size_t n) { n++; buf = (char*)realloc(buf, len + n + 1); if ((len += n) > siz) { len = siz; } memcpy(buf, inp, len); buf[len] = '\0'; lim = buf + len; eof = buf + siz - 1; } char *inp; char *cur; char *buf; char *ptr; char *lim; char *eof; size_t len; size_t siz; size_t line; }; enum What { UNEXPECTED, FCON, EOI }; #define YYCTYPE char #define YYCURSOR s.cur #define YYLIMIT s.lim #define YYMARKER s.ptr #define YYFILL(n) s.fill(n) #define RET(n) return (n) int scan(Scanner &s) { std: #line 61 "bug1297658.c" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; switch (yych) { case '\n': goto yy4; case '.': goto yy6; case '0': goto yy8; default: goto yy2; } yy2: ++YYCURSOR; yy3: #line 74 "bug1297658.re" { RET(UNEXPECTED); } #line 79 "bug1297658.c" yy4: ++YYCURSOR; #line 66 "bug1297658.re" { s.line++; if(1||s.cur == s.eof) RET(EOI); goto std; } #line 88 "bug1297658.c" yy6: yych = *++YYCURSOR; switch (yych) { case 'L': goto yy9; case 'e': goto yy10; default: goto yy7; } yy7: #line 61 "bug1297658.re" { RET(FCON); } #line 101 "bug1297658.c" yy8: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '.': goto yy6; case '0': goto yy11; default: goto yy3; } yy9: ++YYCURSOR; goto yy7; yy10: yych = *++YYCURSOR; switch (yych) { case 'L': goto yy9; default: goto yy7; } yy11: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; switch (yych) { case '.': goto yy6; case '0': goto yy11; default: goto yy13; } yy13: YYCURSOR = YYMARKER; goto yy3; } #line 77 "bug1297658.re" } int main(int,char**) { Scanner s("\n0.eL\n00.eL\n"); std::cout << "RES(2): " << scan(s) << std::endl; std::cout << "RES(1): " << scan(s) << std::endl; std::cout << "RES(2): " << scan(s) << std::endl; std::cout << "RES(1): " << scan(s) << std::endl; std::cout << "RES(2): " << scan(s) << std::endl; std::cout << "RES(0): " << scan(s) << std::endl; }