/* Generated by re2c 0.13.5 on Thu May 23 16:43:50 2013 */ #line 1 "../snl.re" /*************************************************************************\ Copyright (c) 2010-2011 Helmholtz-Zentrum Berlin f. Materialien und Energie GmbH, Germany (HZB) This file is distributed subject to a Software License Agreement found in the file LICENSE that is included with this distribution. \*************************************************************************/ /*************************************************************************\ Lexer specification/implementation \*************************************************************************/ #include #include #include #include #include #include "snl.h" #include "main.h" #include "parser.h" #define EOI 0 typedef unsigned char uchar; #define BSIZE 8192 #define YYCTYPE uchar #define YYCURSOR cursor #define YYLIMIT s->lim #define YYMARKER s->ptr #define YYFILL(dummy) cursor = fill(s, cursor); #define YYDEBUG(state, current) report("state = %d, current = %c\n", state, current); #define RET(i,r) {\ s->cur = cursor;\ t->str = r;\ return i;\ } #define OPERATOR RET #define LITERAL(t,e,n) RET(t,n) #define KEYWORD RET #define TYPEWORD RET #define IDENTIFIER(t,e,n) RET(t,n) #define DELIMITER RET #define DONE RET(EOI,0) typedef struct Scanner { uchar *bot; /* pointer to bottom (start) of buffer */ uchar *tok; /* pointer to start of current token */ uchar *end; /* pointer to (temporary) end of current token */ uchar *ptr; /* marker for backtracking (always > tok) */ uchar *cur; /* saved scan position between calls to scan() */ uchar *lim; /* pointer to one position after last read char */ uchar *top; /* pointer to (one after) top of allocated buffer */ uchar *eof; /* pointer to (one after) last char in file (or 0) */ const char *file; /* source file name */ int line; /* line number */ } Scanner; static void scan_report(Scanner *s, const char *format, ...) { va_list args; report_loc(s->file, s->line); va_start(args, format); vfprintf(stderr, format, args); va_end(args); } /* From the re2c docs: The generated code "calls" YYFILL(n) when the buffer needs (re)filling: at least n additional characters should be provided. YYFILL(n) should adjust YYCURSOR, YYLIMIT, YYMARKER and YYCTXMARKER as needed. Note that for typical programming languages n will be the length of the longest keyword plus one. We also add a '\n' byte at the end of the file as sentinel. */ static uchar *fill(Scanner *s, uchar *cursor) { /* does not touch s->cur, instead works with argument cursor */ if (!s->eof) { uint read_cnt; /* number of bytes read */ uint garbage = s->tok - s->bot; /* number of garbage bytes */ uint valid = s->lim - s->tok; /* number of still valid bytes to copy */ uchar *token = s->tok; /* start of valid bytes */ uint space = (s->top - s->lim) + garbage; /* remaining space after garbage collection */ int need_alloc = space < BSIZE; /* do we need to allocate a new buffer? */ /* anything below s->tok is garbage, collect it */ if (garbage) { #ifdef DEBUG report("fill: garbage=%u, need_alloc=%d\n", garbage, need_alloc); #endif if (!need_alloc) { /* shift valid buffer content down to bottom of buffer */ memmove(s->bot, token, valid); } /* adjust pointers */ s->tok = s->bot; /* same as s->tok -= garbage */ s->ptr -= garbage; cursor -= garbage; s->lim -= garbage; s->end -= garbage; /* invariant: s->bot, s->top, s->eof, s->lim - s->tok */ } /* increase the buffer size if necessary, ensuring that we have at least BSIZE bytes of free space to fill (after s->lim) */ if (need_alloc) { uchar *buf = (uchar*) malloc((s->lim - s->bot + BSIZE)*sizeof(uchar)); #ifdef DEBUG report("fill: need_alloc, bot: before=%p after=%p\n", s->bot, buf); #endif memcpy(buf, token, valid); s->tok = buf; s->end = &buf[s->end - s->bot]; s->ptr = &buf[s->ptr - s->bot]; cursor = &buf[cursor - s->bot]; s->lim = &buf[s->lim - s->bot]; s->top = s->lim + BSIZE; free(s->bot); s->bot = buf; } /* fill the buffer, starting at s->lim, by reading a chunk of BSIZE bytes (or less if eof is encountered) */ if ((read_cnt = fread(s->lim, sizeof(uchar), BSIZE, stdin)) != BSIZE) { if (ferror(stdin)) { perror("error reading input"); exit(EXIT_FAILURE); } if (feof(stdin)) { s->eof = &s->lim[read_cnt]; /* insert sentinel and increase s->eof */ *(s->eof)++ = '\n'; } } s->lim += read_cnt; /* adjust limit */ } return cursor; } /* alias strdup_from_to: duplicate string from start to (exclusive) stop */ static char *strdupft(uchar *start, uchar *stop) { char *result; size_t n; assert (stop - start >= 0); n = (size_t)(stop - start); result = malloc(n+1); memcpy(result, start, n); result[n] = 0; return result; } /* * Note: Linemarkers differ between compilers. The MS C preprocessor outputs * "#line " directives, while gcc leaves off the "line". */ #line 174 "../snl.re" static int scan(Scanner *s, Token *t) { uchar *cursor = s->cur; int in_c_code = 0; /* Note: Must use a temporary offset for (parts of) line_marker. Normally we use s->tok to remember start positions. But line_markers can appear nested inside c_code block tokens, so using s->tok for line_markers would destroy them. */ int line_marker_part = 0; s->end = 0; snl: if (in_c_code) goto c_code; t->line = s->line; t->file = s->file; s->tok = cursor; #line 188 "lexer.c" { YYCTYPE yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 133, 0, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 133, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 94, 94, 94, 94, 94, 94, 94, 94, 86, 86, 4, 4, 4, 4, 4, 4, 4, 84, 84, 84, 84, 84, 84, 68, 68, 68, 68, 68, 100, 68, 68, 68, 68, 68, 68, 68, 68, 100, 68, 68, 68, 68, 68, 4, 0, 4, 4, 68, 4, 84, 84, 84, 84, 84, 84, 68, 68, 68, 68, 68, 100, 68, 68, 68, 68, 68, 68, 68, 68, 100, 68, 68, 68, 68, 68, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, }; if ((YYLIMIT - YYCURSOR) < 9) YYFILL(9); yych = *YYCURSOR; switch (yych) { case '\t': case ' ': goto yy4; case '\n': goto yy2; case '\v': case '\f': goto yy79; case '!': goto yy55; case '"': goto yy8; case '#': goto yy6; case '%': goto yy12; case '&': goto yy47; case '\'': goto yy34; case '(': goto yy67; case ')': goto yy69; case '*': goto yy45; case '+': goto yy41; case ',': goto yy63; case '-': goto yy43; case '.': goto yy35; case '/': goto yy10; case '0': goto yy31; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy33; case ':': goto yy65; case ';': goto yy57; case '<': goto yy39; case '=': goto yy53; case '>': goto yy37; case '?': goto yy77; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case 'g': case 'h': case 'j': case 'k': case 'n': case 'q': case 'r': case 'v': case 'x': case 'y': case 'z': goto yy30; case '[': goto yy71; case ']': goto yy73; case '^': goto yy49; case 'a': goto yy14; case 'b': goto yy16; case 'c': goto yy17; case 'd': goto yy18; case 'e': goto yy19; case 'f': goto yy20; case 'i': goto yy21; case 'l': goto yy22; case 'm': goto yy23; case 'o': goto yy24; case 'p': goto yy25; case 's': goto yy26; case 't': goto yy27; case 'u': goto yy28; case 'w': goto yy29; case '{': goto yy59; case '|': goto yy51; case '}': goto yy61; case '~': goto yy75; default: goto yy80; } yy2: ++YYCURSOR; #line 197 "../snl.re" { if(cursor == s->eof) DONE; s->line++; goto snl; } #line 335 "lexer.c" yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy359; yy5: #line 313 "../snl.re" { goto snl; } #line 343 "lexer.c" yy6: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { if (yych == '\t') goto yy349; } else { if (yych <= ' ') goto yy349; if (yych == 'l') goto yy352; } yy7: #line 314 "../snl.re" { scan_report(s, "invalid character\n"); DONE; } #line 356 "lexer.c" yy8: ++YYCURSOR; #line 206 "../snl.re" { s->tok = s->end = cursor; goto string_const; } #line 364 "lexer.c" yy10: ++YYCURSOR; if ((yych = *YYCURSOR) == '*') goto yy347; if (yych == '=') goto yy345; #line 306 "../snl.re" { OPERATOR(SLASH, "/"); } #line 371 "lexer.c" yy12: ++YYCURSOR; if ((yych = *YYCURSOR) <= '<') { if (yych == '%') goto yy340; } else { if (yych <= '=') goto yy338; if (yych == '{') goto yy343; } #line 307 "../snl.re" { OPERATOR(MOD, "%"); } #line 382 "lexer.c" yy14: ++YYCURSOR; if ((yych = *YYCURSOR) == 's') goto yy332; goto yy168; yy15: #line 261 "../snl.re" { IDENTIFIER(NAME, identifier, strdupft(s->tok, cursor)); } #line 390 "lexer.c" yy16: yych = *++YYCURSOR; if (yych == 'r') goto yy327; goto yy168; yy17: yych = *++YYCURSOR; if (yych == 'h') goto yy310; if (yych == 'o') goto yy311; goto yy168; yy18: yych = *++YYCURSOR; if (yych == 'o') goto yy304; goto yy168; yy19: yych = *++YYCURSOR; switch (yych) { case 'l': goto yy285; case 'n': goto yy286; case 'v': goto yy287; case 'x': goto yy288; default: goto yy168; } yy20: yych = *++YYCURSOR; if (yych == 'l') goto yy272; if (yych == 'o') goto yy273; goto yy168; yy21: yych = *++YYCURSOR; if (yych == 'f') goto yy253; if (yych == 'n') goto yy255; goto yy168; yy22: yych = *++YYCURSOR; if (yych == 'o') goto yy249; goto yy168; yy23: yych = *++YYCURSOR; if (yych == 'o') goto yy242; goto yy168; yy24: yych = *++YYCURSOR; if (yych == 'p') goto yy236; goto yy168; yy25: yych = *++YYCURSOR; if (yych == 'r') goto yy229; goto yy168; yy26: yych = *++YYCURSOR; if (yych <= 's') { if (yych == 'h') goto yy204; if (yych <= 'r') goto yy168; goto yy205; } else { if (yych <= 't') goto yy207; if (yych == 'y') goto yy208; goto yy168; } yy27: yych = *++YYCURSOR; if (yych == 'o') goto yy202; goto yy168; yy28: yych = *++YYCURSOR; if (yych == 'i') goto yy177; if (yych == 'n') goto yy178; goto yy168; yy29: yych = *++YYCURSOR; if (yych == 'h') goto yy169; goto yy168; yy30: yych = *++YYCURSOR; goto yy168; yy31: yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 32) { goto yy143; } if (yych == 'X') goto yy160; if (yych == 'x') goto yy160; goto yy159; yy32: #line 263 "../snl.re" { LITERAL(INTCON, integer_literal, strdupft(s->tok, cursor)); } #line 478 "lexer.c" yy33: yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); goto yy141; yy34: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych == '\n') goto yy7; goto yy131; yy35: ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 2) { goto yy121; } #line 299 "../snl.re" { OPERATOR(PERIOD, "."); } #line 495 "lexer.c" yy37: ++YYCURSOR; if ((yych = *YYCURSOR) <= '<') goto yy38; if (yych <= '=') goto yy115; if (yych <= '>') goto yy117; yy38: #line 309 "../snl.re" { OPERATOR(GT, ">"); } #line 504 "lexer.c" yy39: ++YYCURSOR; if ((yych = *YYCURSOR) <= ';') goto yy40; if (yych <= '<') goto yy111; if (yych <= '=') goto yy109; yy40: #line 308 "../snl.re" { OPERATOR(LT, "<"); } #line 513 "lexer.c" yy41: ++YYCURSOR; if ((yych = *YYCURSOR) == '+') goto yy105; if (yych == '=') goto yy107; #line 304 "../snl.re" { OPERATOR(ADD, "+"); } #line 520 "lexer.c" yy43: ++YYCURSOR; if ((yych = *YYCURSOR) <= '<') { if (yych == '-') goto yy101; } else { if (yych <= '=') goto yy103; if (yych <= '>') goto yy99; } #line 303 "../snl.re" { OPERATOR(SUB, "-"); } #line 531 "lexer.c" yy45: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy97; #line 305 "../snl.re" { OPERATOR(ASTERISK, "*"); } #line 537 "lexer.c" yy47: ++YYCURSOR; if ((yych = *YYCURSOR) == '&') goto yy93; if (yych == '=') goto yy95; #line 300 "../snl.re" { OPERATOR(AMPERSAND, "&"); } #line 544 "lexer.c" yy49: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy91; #line 310 "../snl.re" { OPERATOR(CARET, "^"); } #line 550 "lexer.c" yy51: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy89; if (yych == '|') goto yy87; #line 311 "../snl.re" { OPERATOR(VBAR, "|"); } #line 557 "lexer.c" yy53: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy85; #line 294 "../snl.re" { OPERATOR(EQUAL, "="); } #line 563 "lexer.c" yy55: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy83; #line 301 "../snl.re" { OPERATOR(NOT, "!"); } #line 569 "lexer.c" yy57: ++YYCURSOR; #line 289 "../snl.re" { DELIMITER(SEMICOLON, ";"); } #line 574 "lexer.c" yy59: ++YYCURSOR; #line 290 "../snl.re" { DELIMITER(LBRACE, "{"); } #line 579 "lexer.c" yy61: ++YYCURSOR; #line 291 "../snl.re" { DELIMITER(RBRACE, "}"); } #line 584 "lexer.c" yy63: ++YYCURSOR; #line 292 "../snl.re" { DELIMITER(COMMA, ","); } #line 589 "lexer.c" yy65: ++YYCURSOR; #line 293 "../snl.re" { OPERATOR(COLON, ":"); } #line 594 "lexer.c" yy67: ++YYCURSOR; #line 295 "../snl.re" { DELIMITER(LPAREN, "("); } #line 599 "lexer.c" yy69: ++YYCURSOR; #line 296 "../snl.re" { DELIMITER(RPAREN, ")"); } #line 604 "lexer.c" yy71: ++YYCURSOR; #line 297 "../snl.re" { DELIMITER(LBRACKET, "["); } #line 609 "lexer.c" yy73: ++YYCURSOR; #line 298 "../snl.re" { DELIMITER(RBRACKET, "]"); } #line 614 "lexer.c" yy75: ++YYCURSOR; #line 302 "../snl.re" { OPERATOR(TILDE, "~"); } #line 619 "lexer.c" yy77: ++YYCURSOR; #line 312 "../snl.re" { OPERATOR(QUESTION, "?"); } #line 624 "lexer.c" yy79: yych = *++YYCURSOR; goto yy82; yy80: yych = *++YYCURSOR; goto yy7; yy81: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy82: if (yybm[0+yych] & 1) { goto yy81; } goto yy5; yy83: ++YYCURSOR; #line 288 "../snl.re" { OPERATOR(NE, "!="); } #line 644 "lexer.c" yy85: ++YYCURSOR; #line 287 "../snl.re" { OPERATOR(EQ, "=="); } #line 649 "lexer.c" yy87: ++YYCURSOR; #line 284 "../snl.re" { OPERATOR(OROR, "||"); } #line 654 "lexer.c" yy89: ++YYCURSOR; #line 277 "../snl.re" { OPERATOR(OREQ, "|="); } #line 659 "lexer.c" yy91: ++YYCURSOR; #line 276 "../snl.re" { OPERATOR(XOREQ, "^="); } #line 664 "lexer.c" yy93: ++YYCURSOR; #line 283 "../snl.re" { OPERATOR(ANDAND, "&&"); } #line 669 "lexer.c" yy95: ++YYCURSOR; #line 275 "../snl.re" { OPERATOR(ANDEQ, "&="); } #line 674 "lexer.c" yy97: ++YYCURSOR; #line 272 "../snl.re" { OPERATOR(MULEQ, "*="); } #line 679 "lexer.c" yy99: ++YYCURSOR; #line 282 "../snl.re" { OPERATOR(POINTER, "->"); } #line 684 "lexer.c" yy101: ++YYCURSOR; #line 281 "../snl.re" { OPERATOR(DECR, "--"); } #line 689 "lexer.c" yy103: ++YYCURSOR; #line 271 "../snl.re" { OPERATOR(SUBEQ, "-="); } #line 694 "lexer.c" yy105: ++YYCURSOR; #line 280 "../snl.re" { OPERATOR(INCR, "++"); } #line 699 "lexer.c" yy107: ++YYCURSOR; #line 270 "../snl.re" { OPERATOR(ADDEQ, "+="); } #line 704 "lexer.c" yy109: ++YYCURSOR; #line 285 "../snl.re" { OPERATOR(LE, "<="); } #line 709 "lexer.c" yy111: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy113; #line 279 "../snl.re" { OPERATOR(LSHIFT, "<<"); } #line 715 "lexer.c" yy113: ++YYCURSOR; #line 269 "../snl.re" { OPERATOR(LSHEQ, "<<="); } #line 720 "lexer.c" yy115: ++YYCURSOR; #line 286 "../snl.re" { OPERATOR(GE, ">="); } #line 725 "lexer.c" yy117: ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy119; #line 278 "../snl.re" { OPERATOR(RSHIFT, ">>"); } #line 731 "lexer.c" yy119: ++YYCURSOR; #line 268 "../snl.re" { OPERATOR(RSHEQ, ">>="); } #line 736 "lexer.c" yy121: yyaccept = 3; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; if (yybm[0+yych] & 2) { goto yy121; } if (yych <= 'L') { if (yych <= 'E') { if (yych >= 'E') goto yy124; } else { if (yych <= 'F') goto yy126; if (yych >= 'L') goto yy126; } } else { if (yych <= 'f') { if (yych <= 'd') goto yy123; if (yych <= 'e') goto yy124; goto yy126; } else { if (yych == 'l') goto yy126; } } yy123: #line 266 "../snl.re" { LITERAL(FPCON, floating_point_literal, strdupft(s->tok, cursor)); } #line 764 "lexer.c" yy124: yych = *++YYCURSOR; if (yych <= ',') { if (yych == '+') goto yy127; } else { if (yych <= '-') goto yy127; if (yych <= '/') goto yy125; if (yych <= '9') goto yy128; } yy125: YYCURSOR = YYMARKER; if (yyaccept <= 2) { if (yyaccept <= 1) { if (yyaccept <= 0) { goto yy5; } else { goto yy7; } } else { goto yy32; } } else { if (yyaccept <= 3) { goto yy123; } else { goto yy351; } } yy126: yych = *++YYCURSOR; goto yy123; yy127: yych = *++YYCURSOR; if (yych <= '/') goto yy125; if (yych >= ':') goto yy125; yy128: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'K') { if (yych <= '9') { if (yych <= '/') goto yy123; goto yy128; } else { if (yych == 'F') goto yy126; goto yy123; } } else { if (yych <= 'f') { if (yych <= 'L') goto yy126; if (yych <= 'e') goto yy123; goto yy126; } else { if (yych == 'l') goto yy126; goto yy123; } } yy130: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy131: if (yybm[0+yych] & 4) { goto yy130; } if (yych <= '&') goto yy125; if (yych <= '\'') goto yy133; yy132: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 8) { goto yy135; } if (yych <= 'e') { if (yych <= '>') { if (yych <= '"') { if (yych <= '!') goto yy125; goto yy130; } else { if (yych == '\'') goto yy130; goto yy125; } } else { if (yych <= '\\') { if (yych <= '?') goto yy130; if (yych <= '[') goto yy125; goto yy130; } else { if (yych <= '`') goto yy125; if (yych <= 'b') goto yy130; goto yy125; } } } else { if (yych <= 's') { if (yych <= 'n') { if (yych <= 'f') goto yy130; if (yych <= 'm') goto yy125; goto yy130; } else { if (yych == 'r') goto yy130; goto yy125; } } else { if (yych <= 'v') { if (yych == 'u') goto yy125; goto yy130; } else { if (yych == 'x') goto yy134; goto yy125; } } } yy133: yych = *++YYCURSOR; goto yy32; yy134: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 16) { goto yy137; } goto yy125; yy135: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 8) { goto yy135; } if (yych <= '&') { if (yych == '\n') goto yy125; goto yy130; } else { if (yych <= '\'') goto yy133; if (yych == '\\') goto yy132; goto yy130; } yy137: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 16) { goto yy137; } if (yych <= '&') { if (yych == '\n') goto yy125; goto yy130; } else { if (yych <= '\'') goto yy133; if (yych == '\\') goto yy132; goto yy130; } yy139: yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); if (yych == 'E') goto yy150; if (yych == 'e') goto yy150; goto yy149; yy140: yyaccept = 2; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; yy141: if (yybm[0+yych] & 32) { goto yy143; } if (yych <= '9') { if (yych == '.') goto yy139; if (yych <= '/') goto yy32; goto yy140; } else { if (yych <= 'E') { if (yych <= 'D') goto yy32; } else { if (yych != 'e') goto yy32; } } yy142: yych = *++YYCURSOR; if (yych <= ',') { if (yych == '+') goto yy145; goto yy125; } else { if (yych <= '-') goto yy145; if (yych <= '/') goto yy125; if (yych <= '9') goto yy146; goto yy125; } yy143: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 32) { goto yy143; } goto yy32; yy145: yych = *++YYCURSOR; if (yych <= '/') goto yy125; if (yych >= ':') goto yy125; yy146: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'K') { if (yych <= '9') { if (yych <= '/') goto yy123; goto yy146; } else { if (yych == 'F') goto yy126; goto yy123; } } else { if (yych <= 'f') { if (yych <= 'L') goto yy126; if (yych <= 'e') goto yy123; goto yy126; } else { if (yych == 'l') goto yy126; goto yy123; } } yy148: yyaccept = 3; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; yy149: if (yych <= 'K') { if (yych <= 'D') { if (yych <= '/') goto yy123; if (yych <= '9') goto yy148; goto yy123; } else { if (yych <= 'E') goto yy154; if (yych <= 'F') goto yy126; goto yy123; } } else { if (yych <= 'e') { if (yych <= 'L') goto yy126; if (yych <= 'd') goto yy123; goto yy154; } else { if (yych <= 'f') goto yy126; if (yych == 'l') goto yy126; goto yy123; } } yy150: yych = *++YYCURSOR; if (yych <= ',') { if (yych != '+') goto yy125; } else { if (yych <= '-') goto yy151; if (yych <= '/') goto yy125; if (yych <= '9') goto yy152; goto yy125; } yy151: yych = *++YYCURSOR; if (yych <= '/') goto yy125; if (yych >= ':') goto yy125; yy152: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'K') { if (yych <= '9') { if (yych <= '/') goto yy123; goto yy152; } else { if (yych == 'F') goto yy126; goto yy123; } } else { if (yych <= 'f') { if (yych <= 'L') goto yy126; if (yych <= 'e') goto yy123; goto yy126; } else { if (yych == 'l') goto yy126; goto yy123; } } yy154: yych = *++YYCURSOR; if (yych <= ',') { if (yych != '+') goto yy125; } else { if (yych <= '-') goto yy155; if (yych <= '/') goto yy125; if (yych <= '9') goto yy156; goto yy125; } yy155: yych = *++YYCURSOR; if (yych <= '/') goto yy125; if (yych >= ':') goto yy125; yy156: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'K') { if (yych <= '9') { if (yych <= '/') goto yy123; goto yy156; } else { if (yych == 'F') goto yy126; goto yy123; } } else { if (yych <= 'f') { if (yych <= 'L') goto yy126; if (yych <= 'e') goto yy123; goto yy126; } else { if (yych == 'l') goto yy126; goto yy123; } } yy158: yyaccept = 2; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; yy159: if (yych <= 'L') { if (yych <= '7') { if (yych == '.') goto yy139; if (yych <= '/') goto yy32; goto yy158; } else { if (yych <= 'D') { if (yych <= '9') goto yy140; goto yy32; } else { if (yych <= 'E') goto yy142; if (yych <= 'K') goto yy32; goto yy165; } } } else { if (yych <= 'e') { if (yych == 'U') goto yy165; if (yych <= 'd') goto yy32; goto yy142; } else { if (yych <= 'l') { if (yych <= 'k') goto yy32; goto yy165; } else { if (yych == 'u') goto yy165; goto yy32; } } } yy160: yych = *++YYCURSOR; if (yych <= '@') { if (yych <= '/') goto yy125; if (yych >= ':') goto yy125; } else { if (yych <= 'F') goto yy161; if (yych <= '`') goto yy125; if (yych >= 'g') goto yy125; } yy161: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'T') { if (yych <= '@') { if (yych <= '/') goto yy32; if (yych <= '9') goto yy161; goto yy32; } else { if (yych <= 'F') goto yy161; if (yych != 'L') goto yy32; } } else { if (yych <= 'k') { if (yych <= 'U') goto yy163; if (yych <= '`') goto yy32; if (yych <= 'f') goto yy161; goto yy32; } else { if (yych <= 'l') goto yy163; if (yych != 'u') goto yy32; } } yy163: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'U') { if (yych == 'L') goto yy163; if (yych <= 'T') goto yy32; goto yy163; } else { if (yych <= 'l') { if (yych <= 'k') goto yy32; goto yy163; } else { if (yych == 'u') goto yy163; goto yy32; } } yy165: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 'U') { if (yych == 'L') goto yy165; if (yych <= 'T') goto yy32; goto yy165; } else { if (yych <= 'l') { if (yych <= 'k') goto yy32; goto yy165; } else { if (yych == 'u') goto yy165; goto yy32; } } yy167: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy168: if (yybm[0+yych] & 64) { goto yy167; } goto yy15; yy169: yych = *++YYCURSOR; if (yych == 'e') goto yy170; if (yych == 'i') goto yy171; goto yy168; yy170: yych = *++YYCURSOR; if (yych == 'n') goto yy175; goto yy168; yy171: yych = *++YYCURSOR; if (yych != 'l') goto yy168; yych = *++YYCURSOR; if (yych != 'e') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 252 "../snl.re" { KEYWORD(WHILE, "while"); } #line 1223 "lexer.c" yy175: ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 251 "../snl.re" { KEYWORD(WHEN, "when"); } #line 1231 "lexer.c" yy177: yych = *++YYCURSOR; if (yych == 'n') goto yy186; goto yy168; yy178: yych = *++YYCURSOR; if (yych != 's') goto yy168; yych = *++YYCURSOR; if (yych != 'i') goto yy168; yych = *++YYCURSOR; if (yych != 'g') goto yy168; yych = *++YYCURSOR; if (yych != 'n') goto yy168; yych = *++YYCURSOR; if (yych != 'e') goto yy168; yych = *++YYCURSOR; if (yych != 'd') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 250 "../snl.re" { TYPEWORD(UNSIGNED, "unsigned"); } #line 1255 "lexer.c" yy186: yych = *++YYCURSOR; if (yych != 't') goto yy168; yych = *++YYCURSOR; if (yych <= '2') { if (yych == '1') goto yy189; goto yy168; } else { if (yych <= '3') goto yy190; if (yych != '8') goto yy168; } yych = *++YYCURSOR; if (yych == '_') goto yy199; goto yy168; yy189: yych = *++YYCURSOR; if (yych == '6') goto yy195; goto yy168; yy190: yych = *++YYCURSOR; if (yych != '2') goto yy168; yych = *++YYCURSOR; if (yych != '_') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 259 "../snl.re" { TYPEWORD(UINT32T, "uint32_t"); } #line 1287 "lexer.c" yy195: yych = *++YYCURSOR; if (yych != '_') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 257 "../snl.re" { TYPEWORD(UINT16T, "uint16_t"); } #line 1299 "lexer.c" yy199: yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 255 "../snl.re" { TYPEWORD(UINT8T, "uint8_t"); } #line 1309 "lexer.c" yy202: ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 249 "../snl.re" { KEYWORD(TO, "to"); } #line 1317 "lexer.c" yy204: yych = *++YYCURSOR; if (yych == 'o') goto yy225; goto yy168; yy205: ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 243 "../snl.re" { KEYWORD(SS, "ss"); } #line 1329 "lexer.c" yy207: yych = *++YYCURSOR; if (yych == 'a') goto yy216; if (yych == 'r') goto yy217; goto yy168; yy208: yych = *++YYCURSOR; if (yych != 'n') goto yy168; yych = *++YYCURSOR; if (yych != 'c') goto yy168; ++YYCURSOR; if ((yych = *YYCURSOR) <= 'Z') { if (yych <= '@') { if (yych <= '/') goto yy211; if (yych <= '9') goto yy167; } else { if (yych == 'Q') goto yy212; goto yy167; } } else { if (yych <= '`') { if (yych == '_') goto yy167; } else { if (yych == 'q') goto yy214; if (yych <= 'z') goto yy167; } } yy211: #line 248 "../snl.re" { KEYWORD(SYNC, "sync"); } #line 1360 "lexer.c" yy212: ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 246 "../snl.re" { KEYWORD(SYNCQ, "syncQ"); } #line 1368 "lexer.c" yy214: ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 247 "../snl.re" { KEYWORD(SYNCQ, "syncq"); } #line 1376 "lexer.c" yy216: yych = *++YYCURSOR; if (yych == 't') goto yy222; goto yy168; yy217: yych = *++YYCURSOR; if (yych != 'i') goto yy168; yych = *++YYCURSOR; if (yych != 'n') goto yy168; yych = *++YYCURSOR; if (yych != 'g') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 245 "../snl.re" { KEYWORD(STRING, "string"); } #line 1394 "lexer.c" yy222: yych = *++YYCURSOR; if (yych != 'e') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 244 "../snl.re" { KEYWORD(STATE, "state"); } #line 1404 "lexer.c" yy225: yych = *++YYCURSOR; if (yych != 'r') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 242 "../snl.re" { TYPEWORD(SHORT, "short"); } #line 1416 "lexer.c" yy229: yych = *++YYCURSOR; if (yych != 'o') goto yy168; yych = *++YYCURSOR; if (yych != 'g') goto yy168; yych = *++YYCURSOR; if (yych != 'r') goto yy168; yych = *++YYCURSOR; if (yych != 'a') goto yy168; yych = *++YYCURSOR; if (yych != 'm') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 241 "../snl.re" { KEYWORD(PROGRAM, "program"); } #line 1434 "lexer.c" yy236: yych = *++YYCURSOR; if (yych != 't') goto yy168; yych = *++YYCURSOR; if (yych != 'i') goto yy168; yych = *++YYCURSOR; if (yych != 'o') goto yy168; yych = *++YYCURSOR; if (yych != 'n') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 240 "../snl.re" { KEYWORD(OPTION, "option"); } #line 1450 "lexer.c" yy242: yych = *++YYCURSOR; if (yych != 'n') goto yy168; yych = *++YYCURSOR; if (yych != 'i') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; yych = *++YYCURSOR; if (yych != 'o') goto yy168; yych = *++YYCURSOR; if (yych != 'r') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 239 "../snl.re" { KEYWORD(MONITOR, "monitor"); } #line 1468 "lexer.c" yy249: yych = *++YYCURSOR; if (yych != 'n') goto yy168; yych = *++YYCURSOR; if (yych != 'g') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 238 "../snl.re" { TYPEWORD(LONG, "long"); } #line 1480 "lexer.c" yy253: ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 236 "../snl.re" { KEYWORD(IF, "if"); } #line 1488 "lexer.c" yy255: yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if ((yych = *YYCURSOR) <= '8') { if (yych <= '1') { if (yych <= '/') goto yy257; if (yych <= '0') goto yy167; goto yy258; } else { if (yych == '3') goto yy259; if (yych <= '7') goto yy167; goto yy260; } } else { if (yych <= '^') { if (yych <= '9') goto yy167; if (yych <= '@') goto yy257; if (yych <= 'Z') goto yy167; } else { if (yych == '`') goto yy257; if (yych <= 'z') goto yy167; } } yy257: #line 237 "../snl.re" { TYPEWORD(INT, "int"); } #line 1516 "lexer.c" yy258: yych = *++YYCURSOR; if (yych == '6') goto yy268; goto yy168; yy259: yych = *++YYCURSOR; if (yych == '2') goto yy264; goto yy168; yy260: yych = *++YYCURSOR; if (yych != '_') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 254 "../snl.re" { TYPEWORD(INT8T, "int8_t"); } #line 1536 "lexer.c" yy264: yych = *++YYCURSOR; if (yych != '_') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 258 "../snl.re" { TYPEWORD(INT32T, "int32_t"); } #line 1548 "lexer.c" yy268: yych = *++YYCURSOR; if (yych != '_') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 256 "../snl.re" { TYPEWORD(INT16T, "int16_t"); } #line 1560 "lexer.c" yy272: yych = *++YYCURSOR; if (yych == 'o') goto yy281; goto yy168; yy273: yych = *++YYCURSOR; if (yych != 'r') goto yy168; ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '9') { if (yych >= '0') goto yy167; } else { if (yych <= '@') goto yy275; if (yych <= 'Z') goto yy167; } } else { if (yych <= 'd') { if (yych != '`') goto yy167; } else { if (yych <= 'e') goto yy276; if (yych <= 'z') goto yy167; } } yy275: #line 234 "../snl.re" { KEYWORD(FOR, "for"); } #line 1587 "lexer.c" yy276: yych = *++YYCURSOR; if (yych != 'i') goto yy168; yych = *++YYCURSOR; if (yych != 'g') goto yy168; yych = *++YYCURSOR; if (yych != 'n') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 235 "../snl.re" { TYPEWORD(FOREIGN, "foreign"); } #line 1601 "lexer.c" yy281: yych = *++YYCURSOR; if (yych != 'a') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 233 "../snl.re" { TYPEWORD(FLOAT, "float"); } #line 1613 "lexer.c" yy285: yych = *++YYCURSOR; if (yych == 's') goto yy301; goto yy168; yy286: yych = *++YYCURSOR; if (yych == 't') goto yy297; goto yy168; yy287: yych = *++YYCURSOR; if (yych == 'f') goto yy292; goto yy168; yy288: yych = *++YYCURSOR; if (yych != 'i') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 232 "../snl.re" { KEYWORD(EXIT, "exit"); } #line 1637 "lexer.c" yy292: yych = *++YYCURSOR; if (yych != 'l') goto yy168; yych = *++YYCURSOR; if (yych != 'a') goto yy168; yych = *++YYCURSOR; if (yych != 'g') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 231 "../snl.re" { TYPEWORD(EVFLAG, "evflag"); } #line 1651 "lexer.c" yy297: yych = *++YYCURSOR; if (yych != 'r') goto yy168; yych = *++YYCURSOR; if (yych != 'y') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 230 "../snl.re" { KEYWORD(ENTRY, "entry"); } #line 1663 "lexer.c" yy301: yych = *++YYCURSOR; if (yych != 'e') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 229 "../snl.re" { KEYWORD(ELSE, "else"); } #line 1673 "lexer.c" yy304: yych = *++YYCURSOR; if (yych != 'u') goto yy168; yych = *++YYCURSOR; if (yych != 'b') goto yy168; yych = *++YYCURSOR; if (yych != 'l') goto yy168; yych = *++YYCURSOR; if (yych != 'e') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 228 "../snl.re" { TYPEWORD(DOUBLE, "double"); } #line 1689 "lexer.c" yy310: yych = *++YYCURSOR; if (yych == 'a') goto yy324; goto yy168; yy311: yych = *++YYCURSOR; if (yych != 'n') goto yy168; yych = *++YYCURSOR; if (yych == 'n') goto yy313; if (yych == 't') goto yy314; goto yy168; yy313: yych = *++YYCURSOR; if (yych == 'e') goto yy320; goto yy168; yy314: yych = *++YYCURSOR; if (yych != 'i') goto yy168; yych = *++YYCURSOR; if (yych != 'n') goto yy168; yych = *++YYCURSOR; if (yych != 'u') goto yy168; yych = *++YYCURSOR; if (yych != 'e') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 227 "../snl.re" { KEYWORD(CONTINUE, "continue"); } #line 1720 "lexer.c" yy320: yych = *++YYCURSOR; if (yych != 'c') goto yy168; yych = *++YYCURSOR; if (yych != 't') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 226 "../snl.re" { KEYWORD(CONNECT, "connect"); } #line 1732 "lexer.c" yy324: yych = *++YYCURSOR; if (yych != 'r') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 225 "../snl.re" { TYPEWORD(CHAR, "char"); } #line 1742 "lexer.c" yy327: yych = *++YYCURSOR; if (yych != 'e') goto yy168; yych = *++YYCURSOR; if (yych != 'a') goto yy168; yych = *++YYCURSOR; if (yych != 'k') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 224 "../snl.re" { KEYWORD(BREAK, "break"); } #line 1756 "lexer.c" yy332: yych = *++YYCURSOR; if (yych != 's') goto yy168; yych = *++YYCURSOR; if (yych != 'i') goto yy168; yych = *++YYCURSOR; if (yych != 'g') goto yy168; yych = *++YYCURSOR; if (yych != 'n') goto yy168; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 64) { goto yy167; } #line 223 "../snl.re" { KEYWORD(ASSIGN, "assign"); } #line 1772 "lexer.c" yy338: ++YYCURSOR; #line 274 "../snl.re" { OPERATOR(MODEQ, "%="); } #line 1777 "lexer.c" yy340: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { goto yy340; } #line 219 "../snl.re" { s->tok = s->end = cursor; goto c_code_line; } #line 1790 "lexer.c" yy343: ++YYCURSOR; #line 211 "../snl.re" { s->tok = cursor; in_c_code = 1; #ifdef DEBUG report("in_c_code: cursor=%p, tok=%p\n", cursor, s->tok); #endif goto c_code; } #line 1802 "lexer.c" yy345: ++YYCURSOR; #line 273 "../snl.re" { OPERATOR(DIVEQ, "/="); } #line 1807 "lexer.c" yy347: ++YYCURSOR; #line 210 "../snl.re" { goto comment; } #line 1812 "lexer.c" yy349: yyaccept = 4; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; if (yych <= 0x1F) { if (yych == '\t') goto yy349; } else { if (yych <= ' ') goto yy349; if (yych == 'l') goto yy352; } yy351: #line 202 "../snl.re" { line_marker_part = cursor - s->tok; goto line_marker; } #line 1830 "lexer.c" yy352: yych = *++YYCURSOR; if (yych != 'i') goto yy125; yych = *++YYCURSOR; if (yych != 'n') goto yy125; yych = *++YYCURSOR; if (yych != 'e') goto yy125; yych = *++YYCURSOR; if (yych == '\t') goto yy356; if (yych != ' ') goto yy125; yy356: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych == '\t') goto yy356; if (yych == ' ') goto yy356; goto yy351; yy358: yyaccept = 0; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 6) YYFILL(6); yych = *YYCURSOR; yy359: if (yych <= '\f') { if (yych == '\t') goto yy358; if (yych <= '\n') goto yy5; goto yy81; } else { if (yych <= ' ') { if (yych <= 0x1F) goto yy5; goto yy358; } else { if (yych != '#') goto yy5; } } ++YYCURSOR; if ((yych = *YYCURSOR) <= 0x1F) { if (yych == '\t') goto yy349; goto yy125; } else { if (yych <= ' ') goto yy349; if (yych == 'l') goto yy352; goto yy125; } } #line 315 "../snl.re" string_const: #line 1881 "lexer.c" { YYCTYPE yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 224, 224, 224, 224, 224, 224, 224, 224, 160, 160, 32, 32, 32, 32, 32, 32, 32, 160, 160, 160, 160, 160, 160, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 160, 160, 160, 160, 160, 160, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, }; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= '!') { if (yych == '\n') goto yy369; goto yy364; } else { if (yych <= '"') goto yy367; if (yych == '\\') goto yy365; goto yy364; } yy363: #line 320 "../snl.re" { goto string_const; } #line 1932 "lexer.c" yy364: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy371; yy365: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 64) { goto yy374; } if (yych <= 'e') { if (yych <= '>') { if (yych <= '"') { if (yych >= '"') goto yy370; } else { if (yych == '\'') goto yy370; } } else { if (yych <= '\\') { if (yych <= '?') goto yy370; if (yych >= '\\') goto yy370; } else { if (yych <= '`') goto yy366; if (yych <= 'b') goto yy370; } } } else { if (yych <= 's') { if (yych <= 'n') { if (yych <= 'f') goto yy370; if (yych >= 'n') goto yy370; } else { if (yych == 'r') goto yy370; } } else { if (yych <= 'v') { if (yych != 'u') goto yy370; } else { if (yych == 'x') goto yy372; } } } yy366: #line 325 "../snl.re" { scan_report(s, "invalid character in string constant\n"); DONE; } #line 1978 "lexer.c" yy367: ++YYCURSOR; #line 321 "../snl.re" { s->end = cursor - 1; goto string_cat; } #line 1986 "lexer.c" yy369: yych = *++YYCURSOR; goto yy366; yy370: yyaccept = 0; YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy371: if (yybm[0+yych] & 32) { goto yy370; } if (yych <= '[') goto yy363; goto yy376; yy372: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { goto yy377; } yy373: YYCURSOR = YYMARKER; if (yyaccept <= 0) { goto yy363; } else { goto yy366; } yy374: yyaccept = 0; YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 64) { goto yy374; } if (yych <= '!') { if (yych == '\n') goto yy363; goto yy370; } else { if (yych <= '"') goto yy363; if (yych != '\\') goto yy370; } yy376: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 64) { goto yy374; } if (yych <= 'e') { if (yych <= '>') { if (yych <= '"') { if (yych <= '!') goto yy373; goto yy370; } else { if (yych == '\'') goto yy370; goto yy373; } } else { if (yych <= '\\') { if (yych <= '?') goto yy370; if (yych <= '[') goto yy373; goto yy370; } else { if (yych <= '`') goto yy373; if (yych <= 'b') goto yy370; goto yy373; } } } else { if (yych <= 's') { if (yych <= 'n') { if (yych <= 'f') goto yy370; if (yych <= 'm') goto yy373; goto yy370; } else { if (yych == 'r') goto yy370; goto yy373; } } else { if (yych <= 'v') { if (yych == 'u') goto yy373; goto yy370; } else { if (yych == 'x') goto yy372; goto yy373; } } } yy377: yyaccept = 0; YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { goto yy377; } if (yych <= '!') { if (yych == '\n') goto yy363; goto yy370; } else { if (yych <= '"') goto yy363; if (yych == '\\') goto yy376; goto yy370; } } #line 326 "../snl.re" string_cat: #line 2099 "lexer.c" { YYCTYPE yych; static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= 0x1F) { if (yych <= 0x08) goto yy387; if (yych <= '\t') goto yy381; if (yych <= '\n') goto yy383; goto yy387; } else { if (yych <= ' ') goto yy381; if (yych == '"') goto yy385; goto yy387; } yy381: ++YYCURSOR; yych = *YYCURSOR; goto yy390; yy382: #line 330 "../snl.re" { goto string_cat; } #line 2155 "lexer.c" yy383: ++YYCURSOR; #line 331 "../snl.re" { if (cursor == s->eof) { cursor -= 1; LITERAL(STRCON, string_literal, strdupft(s->tok, s->end)); } s->line++; goto string_cat; } #line 2167 "lexer.c" yy385: ++YYCURSOR; #line 339 "../snl.re" { uint len = s->end - s->tok; memmove(cursor - len, s->tok, len); s->tok = cursor - len; goto string_const; } #line 2177 "lexer.c" yy387: ++YYCURSOR; #line 345 "../snl.re" { cursor -= 1; LITERAL(STRCON, string_literal, strdupft(s->tok, s->end)); } #line 2185 "lexer.c" yy389: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy390: if (yybm[0+yych] & 128) { goto yy389; } goto yy382; } #line 349 "../snl.re" line_marker: #line 2201 "lexer.c" { YYCTYPE yych; static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= '/') goto yy395; if (yych >= ':') goto yy395; ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 128) { goto yy399; } goto yy398; yy394: #line 353 "../snl.re" { s->line = atoi((char*)(s->tok + line_marker_part)) - 1; line_marker_part = cursor - s->tok; goto line_marker_str; } #line 2254 "lexer.c" yy395: ++YYCURSOR; #line 358 "../snl.re" { goto line_marker_skip; } #line 2259 "lexer.c" yy397: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy398: if (yybm[0+yych] & 64) { goto yy397; } goto yy394; yy399: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 64) { goto yy397; } if (yych <= '/') goto yy394; if (yych <= '9') goto yy399; goto yy394; } #line 359 "../snl.re" line_marker_str: #line 2285 "lexer.c" { YYCTYPE yych; static const unsigned char yybm[] = { 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 224, 224, 224, 224, 224, 224, 224, 224, 160, 160, 32, 32, 32, 32, 32, 32, 32, 160, 160, 160, 160, 160, 160, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 160, 160, 160, 160, 160, 160, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, }; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych == '\n') goto yy405; if (yych != '"') goto yy407; yych = *(YYMARKER = ++YYCURSOR); if (yych != '\n') goto yy409; yy404: #line 372 "../snl.re" { goto line_marker_skip; } #line 2331 "lexer.c" yy405: ++YYCURSOR; #line 368 "../snl.re" { cursor -= 1; goto line_marker_skip; } #line 2339 "lexer.c" yy407: yych = *++YYCURSOR; goto yy404; yy408: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy409: if (yybm[0+yych] & 32) { goto yy408; } if (yych <= '!') goto yy410; if (yych <= '"') goto yy412; goto yy411; yy410: YYCURSOR = YYMARKER; goto yy404; yy411: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 64) { goto yy415; } if (yych <= 'e') { if (yych <= '>') { if (yych <= '"') { if (yych <= '!') goto yy410; goto yy408; } else { if (yych == '\'') goto yy408; goto yy410; } } else { if (yych <= '\\') { if (yych <= '?') goto yy408; if (yych <= '[') goto yy410; goto yy408; } else { if (yych <= '`') goto yy410; if (yych <= 'b') goto yy408; goto yy410; } } } else { if (yych <= 's') { if (yych <= 'n') { if (yych <= 'f') goto yy408; if (yych <= 'm') goto yy410; goto yy408; } else { if (yych == 'r') goto yy408; goto yy410; } } else { if (yych <= 'v') { if (yych == 'u') goto yy410; goto yy408; } else { if (yych == 'x') goto yy414; goto yy410; } } } yy412: ++YYCURSOR; #line 364 "../snl.re" { s->file = strdupft(s->tok + line_marker_part + 1, cursor-1); goto line_marker_skip; } #line 2411 "lexer.c" yy414: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { goto yy417; } goto yy410; yy415: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 64) { goto yy415; } if (yych <= '!') { if (yych == '\n') goto yy410; goto yy408; } else { if (yych <= '"') goto yy412; if (yych == '\\') goto yy411; goto yy408; } yy417: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { goto yy417; } if (yych <= '!') { if (yych == '\n') goto yy410; goto yy408; } else { if (yych <= '"') goto yy412; if (yych == '\\') goto yy411; goto yy408; } } #line 373 "../snl.re" line_marker_skip: #line 2456 "lexer.c" { YYCTYPE yych; static const unsigned char yybm[] = { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { goto yy422; } goto yy424; yy421: #line 377 "../snl.re" { goto snl; } #line 2502 "lexer.c" yy422: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yybm[0+yych] & 128) { goto yy422; } goto yy421; yy424: ++YYCURSOR; #line 378 "../snl.re" { cursor -= 1; goto snl; } #line 2515 "lexer.c" } #line 379 "../snl.re" comment: #line 2522 "lexer.c" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych == '\n') goto yy431; if (yych != '*') goto yy430; ++YYCURSOR; if ((yych = *YYCURSOR) == '/') goto yy433; yy429: #line 384 "../snl.re" { goto comment; } #line 2534 "lexer.c" yy430: yych = *++YYCURSOR; goto yy429; yy431: ++YYCURSOR; #line 385 "../snl.re" { if (cursor == s->eof) { scan_report(s, "at eof: unterminated comment\n"); DONE; } s->tok = cursor; s->line++; goto comment; } #line 2550 "lexer.c" yy433: ++YYCURSOR; #line 383 "../snl.re" { goto snl; } #line 2555 "lexer.c" } #line 394 "../snl.re" c_code: #line 2562 "lexer.c" { YYCTYPE yych; unsigned int yyaccept = 0; static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7); yych = *YYCURSOR; if (yych <= ' ') { if (yych <= '\t') { if (yych <= 0x08) goto yy439; goto yy440; } else { if (yych <= '\n') goto yy442; if (yych <= 0x1F) goto yy439; goto yy440; } } else { if (yych <= '#') { if (yych <= '"') goto yy439; goto yy441; } else { if (yych != '}') goto yy439; } } ++YYCURSOR; if ((yych = *YYCURSOR) == '%') goto yy457; yy438: #line 404 "../snl.re" { goto c_code; } #line 2624 "lexer.c" yy439: yych = *++YYCURSOR; goto yy438; yy440: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { if (yych == '\t') goto yy455; goto yy438; } else { if (yych <= ' ') goto yy455; if (yych == '#') goto yy454; goto yy438; } yy441: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 128) { goto yy444; } if (yych == 'l') goto yy447; goto yy438; yy442: ++YYCURSOR; #line 409 "../snl.re" { if (cursor == s->eof) { scan_report(s, "at eof: unterminated literal c-code section\n"); DONE; } s->line++; goto c_code; } #line 2658 "lexer.c" yy444: yyaccept = 1; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; if (yybm[0+yych] & 128) { goto yy444; } if (yych == 'l') goto yy447; yy446: #line 405 "../snl.re" { line_marker_part = cursor - s->tok; goto line_marker; } #line 2674 "lexer.c" yy447: yych = *++YYCURSOR; if (yych == 'i') goto yy449; yy448: YYCURSOR = YYMARKER; if (yyaccept <= 0) { goto yy438; } else { goto yy446; } yy449: yych = *++YYCURSOR; if (yych != 'n') goto yy448; yych = *++YYCURSOR; if (yych != 'e') goto yy448; yych = *++YYCURSOR; if (yych == '\t') goto yy452; if (yych != ' ') goto yy448; yy452: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych == '\t') goto yy452; if (yych == ' ') goto yy452; goto yy446; yy454: yych = *++YYCURSOR; if (yybm[0+yych] & 128) { goto yy444; } if (yych == 'l') goto yy447; goto yy448; yy455: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 6) YYFILL(6); yych = *YYCURSOR; if (yych <= 0x1F) { if (yych == '\t') goto yy455; goto yy448; } else { if (yych <= ' ') goto yy455; if (yych == '#') goto yy454; goto yy448; } yy457: ++YYCURSOR; #line 398 "../snl.re" { #ifdef DEBUG report("c_code: tok=%p", s->tok); #endif LITERAL(CCODE, embedded_c_code, strdupft(s->tok, cursor - 2)); } #line 2728 "lexer.c" } #line 417 "../snl.re" c_code_line: #line 2735 "lexer.c" { YYCTYPE yych; static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= '\n') { if (yych <= 0x08) goto yy461; if (yych <= '\t') goto yy463; goto yy464; } else { if (yych == ' ') goto yy463; } yy461: ++YYCURSOR; yy462: #line 421 "../snl.re" { s->end = cursor; goto c_code_line; } #line 2789 "lexer.c" yy463: yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x08) goto yy462; if (yych <= '\n') goto yy467; if (yych == ' ') goto yy467; goto yy462; yy464: ++YYCURSOR; #line 425 "../snl.re" { if (cursor == s->eof) { cursor -= 1; } s->line++; if (s->end > s->tok) { LITERAL(CCODE, embedded_c_code, strdupft(s->tok, s->end)); } goto snl; } #line 2809 "lexer.c" yy466: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy467: if (yybm[0+yych] & 128) { goto yy466; } if (yych == '\n') goto yy464; YYCURSOR = YYMARKER; goto yy462; } #line 435 "../snl.re" DONE; /* dead code, only here to make compiler warning go away */ } #ifdef TEST_LEXER void report_loc(const char *f, int l) { fprintf(stderr, "%s:%d: ", f, l); } int main() { Scanner s; int tt; /* token type */ Token tv; /* token value */ memset(&s, 0, sizeof(s)); s.cur = fill(&s, s.cur); s.line = 1; while( (tt = scan(&s, &tv)) != EOI) { printf("%s:%d: %2d\t$%s$\n", tv.file, tv.line, tt, tv.str); } return 0; } #else Expr *parse_program(const char *src_file) { Scanner s; int tt; /* token type */ Token tv; /* token value */ Expr *result; /* result of parsing */ void *parser; /* the (lemon generated) parser */ memset(&s, 0, sizeof(s)); s.file = src_file; s.line = 1; parser = snlParserAlloc(malloc); do { tt = scan(&s, &tv); #ifdef DEBUG report_at(tv.file, tv.line, "%2d\t$%s$\n", tt, tv.str); #endif snlParser(parser, tt, tv, &result); } while (tt); snlParserFree(parser, free); return result; } #endif /* TEST_LEXER */