int Scanner::scan()
{
    const char *p, *x, *y;
scan:
    tok = cur;
    location = cur_loc();

#line 1706 "src/parse/lex.cc"
{
	unsigned char yych;
	unsigned int yyaccept = 0;
	static const unsigned char yybm[] = {
		  0, 128, 128, 128, 128, 128, 128, 128, 
		128, 144,   0, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		144, 128,   0, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		224, 224, 224, 224, 224, 224, 224, 224, 
		224, 224, 128, 128, 128, 128, 128, 128, 
		128, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 128,   0, 128, 128, 160, 
		128, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 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 ((lim - cur) < 9) { if (!fill(9)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 16) {
		goto yy226;
	}
	if (yych <= '9') {
		if (yych <= '$') {
			if (yych <= '\r') {
				if (yych <= 0x08) goto yy224;
				if (yych <= '\n') goto yy227;
				if (yych >= '\r') goto yy229;
			} else {
				if (yych <= '!') {
					if (yych >= ' ') goto yy230;
				} else {
					if (yych <= '"') goto yy231;
					if (yych <= '#') goto yy232;
					goto yy233;
				}
			}
		} else {
			if (yych <= '*') {
				if (yych <= '&') {
					if (yych <= '%') goto yy235;
				} else {
					if (yych <= '\'') goto yy236;
					if (yych <= ')') goto yy233;
					goto yy237;
				}
			} else {
				if (yych <= '-') {
					if (yych <= '+') goto yy233;
				} else {
					if (yych <= '.') goto yy238;
					if (yych <= '/') goto yy239;
				}
			}
		}
	} else {
		if (yych <= '[') {
			if (yych <= '=') {
				if (yych <= ':') goto yy240;
				if (yych <= ';') goto yy233;
				if (yych <= '<') goto yy241;
				goto yy242;
			} else {
				if (yych <= '?') {
					if (yych >= '?') goto yy233;
				} else {
					if (yych <= '@') goto yy232;
					if (yych <= 'Z') goto yy243;
					goto yy245;
				}
			}
		} else {
			if (yych <= 'q') {
				if (yych <= '^') {
					if (yych <= '\\') goto yy233;
				} else {
					if (yych != '`') goto yy243;
				}
			} else {
				if (yych <= 'z') {
					if (yych <= 'r') goto yy246;
					goto yy243;
				} else {
					if (yych <= '{') goto yy247;
					if (yych <= '|') goto yy233;
				}
			}
		}
	}
yy224:
	++cur;
yy225:
#line 571 "../src/parse/lex.re"
	{
        msg.error(tok_loc(), "unexpected character: '%c'", *tok);
        exit(1);
    }
#line 1824 "src/parse/lex.cc"
yy226:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 16) {
		goto yy226;
	}
#line 553 "../src/parse/lex.re"
	{ goto scan; }
#line 1834 "src/parse/lex.cc"
yy227:
	yyaccept = 0;
	yych = (unsigned char)*(mar = ++cur);
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy249;
	} else {
		if (yych <= ' ') goto yy249;
		if (yych == '#') goto yy251;
	}
yy228:
#line 560 "../src/parse/lex.re"
	{
        next_line();
        if (lexer_state == LEX_FLEX_NAME) {
            lexer_state = LEX_NORMAL;
            return TOKEN_FID_END;
        }
        else {
            goto scan;
        }
    }
#line 1856 "src/parse/lex.cc"
yy229:
	yych = (unsigned char)*++cur;
	if (yych == '\n') goto yy227;
	goto yy225;
yy230:
	yyaccept = 1;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == 'i') goto yy252;
	if (yych == 'u') goto yy253;
	goto yy225;
yy231:
	++cur;
#line 443 "../src/parse/lex.re"
	{ yylval.regexp = lex_str('"'); return TOKEN_REGEXP; }
#line 1871 "src/parse/lex.cc"
yy232:
	yych = (unsigned char)*++cur;
	if (yych <= '^') {
		if (yych <= '@') goto yy225;
		if (yych <= 'Z') goto yy254;
		goto yy225;
	} else {
		if (yych == '`') goto yy225;
		if (yych <= 'z') goto yy254;
		goto yy225;
	}
yy233:
	++cur;
yy234:
#line 452 "../src/parse/lex.re"
	{ return *tok; }
#line 1888 "src/parse/lex.cc"
yy235:
	yych = (unsigned char)*++cur;
	if (yych == '}') goto yy256;
	goto yy225;
yy236:
	++cur;
#line 442 "../src/parse/lex.re"
	{ yylval.regexp = lex_str('\''); return TOKEN_REGEXP; }
#line 1897 "src/parse/lex.cc"
yy237:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy256;
	goto yy234;
yy238:
	++cur;
#line 548 "../src/parse/lex.re"
	{
        yylval.regexp = ast_dot(tok_loc());
        return TOKEN_REGEXP;
    }
#line 1909 "src/parse/lex.cc"
yy239:
	yych = (unsigned char)*++cur;
	if (yych == '*') goto yy257;
	if (yych == '/') goto yy258;
	goto yy234;
yy240:
	yych = (unsigned char)*++cur;
	if (yych == '=') goto yy259;
	goto yy225;
yy241:
	++cur;
#line 435 "../src/parse/lex.re"
	{ return lex_clist(); }
#line 1923 "src/parse/lex.cc"
yy242:
	yyaccept = 2;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == '>') goto yy261;
	goto yy234;
yy243:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
yy244:
	if (yybm[0+yych] & 32) {
		goto yy243;
	}
#line 503 "../src/parse/lex.re"
	{
        if (!globopts->FFlag || lex_namedef_context_re2c()) {
            yylval.str = newstr(tok, cur);
            return TOKEN_ID;
        }
        else if (lex_namedef_context_flex()) {
            yylval.str = newstr(tok, cur);
            lexer_state = LEX_FLEX_NAME;
            return TOKEN_FID;
        }
        else {
            // consume one character, otherwise we risk breaking operator
            // precedence in cases like ab*: it should be a(b)*, not (ab)*
            cur = tok + 1;

            ASTChar c = {static_cast<uint8_t>(tok[0]), tok_loc()};
            std::vector<ASTChar> *str = new std::vector<ASTChar>;
            str->push_back(c);
            yylval.regexp = ast_str(tok_loc(), str, false);
            return TOKEN_REGEXP;
        }
    }
#line 1960 "src/parse/lex.cc"
yy245:
	yych = (unsigned char)*++cur;
	if (yych == '^') goto yy262;
#line 444 "../src/parse/lex.re"
	{ yylval.regexp = lex_cls(false); return TOKEN_REGEXP; }
#line 1966 "src/parse/lex.cc"
yy246:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy263;
	goto yy244;
yy247:
	yyaccept = 3;
	yych = (unsigned char)*(mar = ++cur);
	if (yybm[0+yych] & 64) {
		goto yy266;
	}
	if (yych <= 'Z') {
		if (yych == ',') goto yy264;
		if (yych >= 'A') goto yy267;
	} else {
		if (yych <= '_') {
			if (yych >= '_') goto yy267;
		} else {
			if (yych <= '`') goto yy248;
			if (yych <= 'z') goto yy267;
		}
	}
yy248:
#line 427 "../src/parse/lex.re"
	{ lex_code_in_braces(); return TOKEN_CODE; }
#line 1991 "src/parse/lex.cc"
yy249:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy249;
	} else {
		if (yych <= ' ') goto yy249;
		if (yych == '#') goto yy251;
	}
yy250:
	cur = mar;
	if (yyaccept <= 3) {
		if (yyaccept <= 1) {
			if (yyaccept == 0) {
				goto yy228;
			} else {
				goto yy225;
			}
		} else {
			if (yyaccept == 2) {
				goto yy234;
			} else {
				goto yy248;
			}
		}
	} else {
		if (yyaccept <= 5) {
			if (yyaccept == 4) {
				goto yy260;
			} else {
				goto yy265;
			}
		} else {
			if (yyaccept == 6) {
				goto yy280;
			} else {
				goto yy299;
			}
		}
	}
yy251:
	++cur;
	if ((lim - cur) < 5) { if (!fill(5)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy251;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy251;
		if (yych == 'l') goto yy268;
		goto yy250;
	}
yy252:
	yych = (unsigned char)*++cur;
	if (yych == 'n') goto yy269;
	goto yy250;
yy253:
	yych = (unsigned char)*++cur;
	if (yych == 's') goto yy270;
	goto yy250;
yy254:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 'Z') {
		if (yych <= '/') goto yy255;
		if (yych <= '9') goto yy254;
		if (yych >= 'A') goto yy254;
	} else {
		if (yych <= '_') {
			if (yych >= '_') goto yy254;
		} else {
			if (yych <= '`') goto yy255;
			if (yych <= 'z') goto yy254;
		}
	}
yy255:
#line 447 "../src/parse/lex.re"
	{
        yylval.regexp = ast_tag(tok_loc(), newstr(tok + 1, cur), tok[0] == '#');
        return TOKEN_REGEXP;
    }
#line 2075 "src/parse/lex.cc"
yy256:
	++cur;
#line 440 "../src/parse/lex.re"
	{ tok = cur; return 0; }
#line 2080 "src/parse/lex.cc"
yy257:
	++cur;
#line 438 "../src/parse/lex.re"
	{ lex_c_comment(); goto scan; }
#line 2085 "src/parse/lex.cc"
yy258:
	++cur;
#line 437 "../src/parse/lex.re"
	{ lex_cpp_comment(); goto scan; }
#line 2090 "src/parse/lex.cc"
yy259:
	yyaccept = 4;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == '>') goto yy261;
yy260:
#line 428 "../src/parse/lex.re"
	{ lex_code_indented(); return TOKEN_CODE; }
#line 2098 "src/parse/lex.cc"
yy261:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '@') {
		if (yych <= '\t') {
			if (yych <= 0x08) goto yy250;
			goto yy261;
		} else {
			if (yych == ' ') goto yy261;
			goto yy250;
		}
	} else {
		if (yych <= '_') {
			if (yych <= 'Z') {
				yyt1 = cur;
				goto yy271;
			}
			if (yych <= '^') goto yy250;
			yyt1 = cur;
			goto yy271;
		} else {
			if (yych <= '`') goto yy250;
			if (yych <= 'z') {
				yyt1 = cur;
				goto yy271;
			}
			goto yy250;
		}
	}
yy262:
	++cur;
#line 445 "../src/parse/lex.re"
	{ yylval.regexp = lex_cls(true);  return TOKEN_REGEXP; }
#line 2133 "src/parse/lex.cc"
yy263:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy273;
	goto yy244;
yy264:
	++cur;
yy265:
#line 486 "../src/parse/lex.re"
	{
        msg.error(tok_loc(), "illegal closure form, use '{n}', '{n,}', '{n,m}' "
            "where n and m are numbers");
        exit(1);
    }
#line 2147 "src/parse/lex.cc"
yy266:
	++cur;
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 64) {
		goto yy266;
	}
	if (yych == ',') {
		yyt1 = cur;
		goto yy274;
	}
	if (yych == '}') goto yy275;
	goto yy250;
yy267:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '^') {
		if (yych <= '9') {
			if (yych <= '/') goto yy250;
			goto yy267;
		} else {
			if (yych <= '@') goto yy250;
			if (yych <= 'Z') goto yy267;
			goto yy250;
		}
	} else {
		if (yych <= 'z') {
			if (yych == '`') goto yy250;
			goto yy267;
		} else {
			if (yych == '}') goto yy276;
			goto yy250;
		}
	}
yy268:
	yych = (unsigned char)*++cur;
	if (yych == 'i') goto yy277;
	goto yy250;
yy269:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy278;
	goto yy250;
yy270:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy279;
	goto yy250;
yy271:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 'Z') {
		if (yych <= '/') goto yy272;
		if (yych <= '9') goto yy271;
		if (yych >= 'A') goto yy271;
	} else {
		if (yych <= '_') {
			if (yych >= '_') goto yy271;
		} else {
			if (yych <= '`') goto yy272;
			if (yych <= 'z') goto yy271;
		}
	}
yy272:
	p = yyt1;
#line 430 "../src/parse/lex.re"
	{
        yylval.str = newstr(p, cur);
        return tok[0] == ':' ? TOKEN_CJUMP : TOKEN_CNEXT;
    }
#line 2218 "src/parse/lex.cc"
yy273:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy281;
	goto yy244;
yy274:
	yyaccept = 5;
	yych = (unsigned char)*(mar = ++cur);
	if (yych <= '/') goto yy265;
	if (yych <= '9') goto yy282;
	if (yych == '}') goto yy283;
	goto yy265;
yy275:
	++cur;
#line 454 "../src/parse/lex.re"
	{
        if (!s_to_u32_unsafe (tok + 1, cur - 1, yylval.bounds.min)) {
            msg.error(tok_loc(), "repetition count overflow");
            exit(1);
        }
        yylval.bounds.max = yylval.bounds.min;
        return TOKEN_CLOSESIZE;
    }
#line 2241 "src/parse/lex.cc"
yy276:
	++cur;
#line 492 "../src/parse/lex.re"
	{
        if (!globopts->FFlag) {
            msg.error(tok_loc(), "curly braces for names only allowed with -F switch");
            exit(1);
        }
        yylval.str = newstr(tok + 1, cur - 1);
        return TOKEN_ID;
    }
#line 2253 "src/parse/lex.cc"
yy277:
	yych = (unsigned char)*++cur;
	if (yych == 'n') goto yy284;
	goto yy250;
yy278:
	yych = (unsigned char)*++cur;
	if (yych == 'l') goto yy285;
	goto yy250;
yy279:
	yyaccept = 6;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == ':') goto yy286;
yy280:
#line 541 "../src/parse/lex.re"
	{
        msg.error(tok_loc(), "ill-formed use directive: expected `!use`"
            " followed by a colon, a block name, optional spaces, a semicolon,"
            " and finally a space, a newline, or the end of block");
        exit(1);
    }
#line 2274 "src/parse/lex.cc"
yy281:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy287;
	goto yy244;
yy282:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '/') goto yy250;
	if (yych <= '9') goto yy282;
	if (yych == '}') goto yy288;
	goto yy250;
yy283:
	++cur;
#line 477 "../src/parse/lex.re"
	{
        if (!s_to_u32_unsafe (tok + 1, cur - 2, yylval.bounds.min)) {
            msg.error(tok_loc(), "repetition lower bound overflow");
            exit(1);
        }
        yylval.bounds.max = std::numeric_limits<uint32_t>::max();
        return TOKEN_CLOSESIZE;
    }
#line 2298 "src/parse/lex.cc"
yy284:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy289;
	goto yy250;
yy285:
	yych = (unsigned char)*++cur;
	if (yych == 'u') goto yy290;
	goto yy250;
yy286:
	yych = (unsigned char)*++cur;
	if (yych <= '^') {
		if (yych <= '@') goto yy250;
		if (yych <= 'Z') {
			yyt1 = cur;
			goto yy291;
		}
		goto yy250;
	} else {
		if (yych == '`') goto yy250;
		if (yych <= 'z') {
			yyt1 = cur;
			goto yy291;
		}
		goto yy250;
	}
yy287:
	++cur;
#line 501 "../src/parse/lex.re"
	{ return TOKEN_CONF; }
#line 2328 "src/parse/lex.cc"
yy288:
	++cur;
	p = yyt1;
#line 463 "../src/parse/lex.re"
	{
        if (!s_to_u32_unsafe(tok + 1, p, yylval.bounds.min)) {
            msg.error(tok_loc(), "repetition lower bound overflow");
            exit(1);
        } else if (!s_to_u32_unsafe(p + 1, cur - 1, yylval.bounds.max)) {
            msg.error(tok_loc(), "repetition upper bound overflow");
            exit(1);
        } else if (yylval.bounds.min > yylval.bounds.max) {
            msg.error(tok_loc(), "repetition lower bound exceeds upper bound");
            exit(1);
        }
        return TOKEN_CLOSESIZE;
    }
#line 2346 "src/parse/lex.cc"
yy289:
	yych = (unsigned char)*++cur;
	if (yych <= '0') goto yy293;
	if (yych <= '9') goto yy250;
	goto yy293;
yy290:
	yych = (unsigned char)*++cur;
	if (yych == 'd') goto yy294;
	goto yy250;
yy291:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= ':') {
		if (yych <= 0x1F) {
			if (yych == '\t') {
				yyt2 = cur;
				goto yy295;
			}
			goto yy250;
		} else {
			if (yych <= ' ') {
				yyt2 = cur;
				goto yy295;
			}
			if (yych <= '/') goto yy250;
			if (yych <= '9') goto yy291;
			goto yy250;
		}
	} else {
		if (yych <= '^') {
			if (yych <= ';') {
				yyt2 = cur;
				goto yy296;
			}
			if (yych <= '@') goto yy250;
			if (yych <= 'Z') goto yy291;
			goto yy250;
		} else {
			if (yych == '`') goto yy250;
			if (yych <= 'z') goto yy291;
			goto yy250;
		}
	}
yy292:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
yy293:
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy292;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy292;
		if (yych <= '0') goto yy250;
		if (yych <= '9') {
			yyt1 = cur;
			goto yy297;
		}
		goto yy250;
	}
yy294:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy298;
	goto yy250;
yy295:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy295;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy295;
		if (yych != ';') goto yy250;
	}
yy296:
	yych = (unsigned char)*++cur;
	if (yych <= '\r') {
		if (yych <= 0x08) goto yy250;
		if (yych <= '\n') {
			yyt3 = cur;
			goto yy300;
		}
		if (yych <= '\f') goto yy250;
		yyt3 = cur;
		goto yy300;
	} else {
		if (yych <= ' ') {
			if (yych <= 0x1F) goto yy250;
			yyt3 = cur;
			goto yy300;
		} else {
			if (yych == '*') {
				yyt3 = cur;
				goto yy301;
			}
			goto yy250;
		}
	}
yy297:
	++cur;
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '\r') {
		if (yych <= '\t') {
			if (yych <= 0x08) goto yy250;
			goto yy302;
		} else {
			if (yych <= '\n') goto yy303;
			if (yych <= '\f') goto yy250;
			goto yy304;
		}
	} else {
		if (yych <= ' ') {
			if (yych <= 0x1F) goto yy250;
			goto yy302;
		} else {
			if (yych <= '/') goto yy250;
			if (yych <= '9') goto yy297;
			goto yy250;
		}
	}
yy298:
	yyaccept = 7;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == '\t') goto yy305;
	if (yych == ' ') goto yy305;
yy299:
#line 530 "../src/parse/lex.re"
	{
        msg.error(tok_loc(), "ill-formed include directive: expected `!include`"
            " followed by spaces, a double-quoted file path, optional spaces, a"
            " semicolon, and finally a space, a newline, or the end of block");
        exit(1);
    }
#line 2483 "src/parse/lex.cc"
yy300:
	++cur;
	x = yyt1;
	y = yyt2;
	cur = yyt3;
#line 537 "../src/parse/lex.re"
	{
        yylval.str = newstr(x, y); // save the name of the used block
        return TOKEN_BLOCK;
    }
#line 2494 "src/parse/lex.cc"
yy301:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy300;
	goto yy250;
yy302:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy302;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy302;
		if (yych == '"') goto yy306;
		goto yy250;
	}
yy303:
	++cur;
	cur = yyt1;
#line 555 "../src/parse/lex.re"
	{
        set_sourceline ();
        return TOKEN_LINE_INFO;
    }
#line 2519 "src/parse/lex.cc"
yy304:
	yych = (unsigned char)*++cur;
	if (yych == '\n') goto yy303;
	goto yy250;
yy305:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy305;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy305;
		if (yych == '"') {
			yyt1 = cur;
			goto yy307;
		}
		goto yy250;
	}
yy306:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 128) {
		goto yy306;
	}
	if (yych <= '\n') goto yy250;
	if (yych <= '"') goto yy308;
	goto yy309;
yy307:
	++cur;
	if ((lim - cur) < 4) { if (!fill(4)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '!') {
		if (yych <= 0x00) goto yy250;
		if (yych == '\n') goto yy250;
		goto yy307;
	} else {
		if (yych <= '"') goto yy310;
		if (yych == '\\') goto yy311;
		goto yy307;
	}
yy308:
	yych = (unsigned char)*++cur;
	if (yych == '\n') goto yy303;
	if (yych == '\r') goto yy304;
	goto yy250;
yy309:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x00) goto yy250;
	if (yych == '\n') goto yy250;
	goto yy306;
yy310:
	yych = (unsigned char)*++cur;
	if (yych <= 0x1F) {
		if (yych == '\t') {
			yyt2 = cur;
			goto yy312;
		}
		goto yy250;
	} else {
		if (yych <= ' ') {
			yyt2 = cur;
			goto yy312;
		}
		if (yych == ';') {
			yyt2 = cur;
			goto yy313;
		}
		goto yy250;
	}
yy311:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x00) goto yy250;
	if (yych == '\n') goto yy250;
	goto yy307;
yy312:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy312;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy312;
		if (yych != ';') goto yy250;
	}
yy313:
	yych = (unsigned char)*++cur;
	if (yych <= '\r') {
		if (yych <= 0x08) goto yy250;
		if (yych <= '\n') {
			yyt3 = cur;
			goto yy314;
		}
		if (yych <= '\f') goto yy250;
		yyt3 = cur;
	} else {
		if (yych <= ' ') {
			if (yych <= 0x1F) goto yy250;
			yyt3 = cur;
		} else {
			if (yych == '*') {
				yyt3 = cur;
				goto yy315;
			}
			goto yy250;
		}
	}
yy314:
	++cur;
	x = yyt1;
	y = yyt2;
	cur = yyt3;
#line 526 "../src/parse/lex.re"
	{
        include(getstr(x + 1, y - 1), tok);
        goto scan;
    }
#line 2643 "src/parse/lex.cc"
yy315:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy314;
	goto yy250;
}
#line 575 "../src/parse/lex.re"

}
int Scanner::scan()
{
    const char *p, *x, *y;
scan:
    tok = cur;
    location = cur_loc();

#line 1706 "src/parse/lex.cc"
{
	unsigned char yych;
	unsigned int yyaccept = 0;
	static const unsigned char yybm[] = {
		  0, 128, 128, 128, 128, 128, 128, 128, 
		128, 144,   0, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		144, 128,   0, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		224, 224, 224, 224, 224, 224, 224, 224, 
		224, 224, 128, 128, 128, 128, 128, 128, 
		128, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 128,   0, 128, 128, 160, 
		128, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 160, 160, 160, 160, 160, 
		160, 160, 160, 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 ((lim - cur) < 9) { if (!fill(9)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 16) {
		goto yy226;
	}
	if (yych <= '9') {
		if (yych <= '$') {
			if (yych <= '\r') {
				if (yych <= 0x08) goto yy224;
				if (yych <= '\n') goto yy227;
				if (yych >= '\r') goto yy229;
			} else {
				if (yych <= '!') {
					if (yych >= ' ') goto yy230;
				} else {
					if (yych <= '"') goto yy231;
					if (yych <= '#') goto yy232;
					goto yy233;
				}
			}
		} else {
			if (yych <= '*') {
				if (yych <= '&') {
					if (yych <= '%') goto yy235;
				} else {
					if (yych <= '\'') goto yy236;
					if (yych <= ')') goto yy233;
					goto yy237;
				}
			} else {
				if (yych <= '-') {
					if (yych <= '+') goto yy233;
				} else {
					if (yych <= '.') goto yy238;
					if (yych <= '/') goto yy239;
				}
			}
		}
	} else {
		if (yych <= '[') {
			if (yych <= '=') {
				if (yych <= ':') goto yy240;
				if (yych <= ';') goto yy233;
				if (yych <= '<') goto yy241;
				goto yy242;
			} else {
				if (yych <= '?') {
					if (yych >= '?') goto yy233;
				} else {
					if (yych <= '@') goto yy232;
					if (yych <= 'Z') goto yy243;
					goto yy245;
				}
			}
		} else {
			if (yych <= 'q') {
				if (yych <= '^') {
					if (yych <= '\\') goto yy233;
				} else {
					if (yych != '`') goto yy243;
				}
			} else {
				if (yych <= 'z') {
					if (yych <= 'r') goto yy246;
					goto yy243;
				} else {
					if (yych <= '{') goto yy247;
					if (yych <= '|') goto yy233;
				}
			}
		}
	}
yy224:
	++cur;
yy225:
#line 571 "../src/parse/lex.re"
	{
        msg.error(tok_loc(), "unexpected character: '%c'", *tok);
        exit(1);
    }
#line 1824 "src/parse/lex.cc"
yy226:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 16) {
		goto yy226;
	}
#line 553 "../src/parse/lex.re"
	{ goto scan; }
#line 1834 "src/parse/lex.cc"
yy227:
	yyaccept = 0;
	yych = (unsigned char)*(mar = ++cur);
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy249;
	} else {
		if (yych <= ' ') goto yy249;
		if (yych == '#') goto yy251;
	}
yy228:
#line 560 "../src/parse/lex.re"
	{
        next_line();
        if (lexer_state == LEX_FLEX_NAME) {
            lexer_state = LEX_NORMAL;
            return TOKEN_FID_END;
        }
        else {
            goto scan;
        }
    }
#line 1856 "src/parse/lex.cc"
yy229:
	yych = (unsigned char)*++cur;
	if (yych == '\n') goto yy227;
	goto yy225;
yy230:
	yyaccept = 1;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == 'i') goto yy252;
	if (yych == 'u') goto yy253;
	goto yy225;
yy231:
	++cur;
#line 443 "../src/parse/lex.re"
	{ yylval.regexp = lex_str('"'); return TOKEN_REGEXP; }
#line 1871 "src/parse/lex.cc"
yy232:
	yych = (unsigned char)*++cur;
	if (yych <= '^') {
		if (yych <= '@') goto yy225;
		if (yych <= 'Z') goto yy254;
		goto yy225;
	} else {
		if (yych == '`') goto yy225;
		if (yych <= 'z') goto yy254;
		goto yy225;
	}
yy233:
	++cur;
yy234:
#line 452 "../src/parse/lex.re"
	{ return *tok; }
#line 1888 "src/parse/lex.cc"
yy235:
	yych = (unsigned char)*++cur;
	if (yych == '}') goto yy256;
	goto yy225;
yy236:
	++cur;
#line 442 "../src/parse/lex.re"
	{ yylval.regexp = lex_str('\''); return TOKEN_REGEXP; }
#line 1897 "src/parse/lex.cc"
yy237:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy256;
	goto yy234;
yy238:
	++cur;
#line 548 "../src/parse/lex.re"
	{
        yylval.regexp = ast_dot(tok_loc());
        return TOKEN_REGEXP;
    }
#line 1909 "src/parse/lex.cc"
yy239:
	yych = (unsigned char)*++cur;
	if (yych == '*') goto yy257;
	if (yych == '/') goto yy258;
	goto yy234;
yy240:
	yych = (unsigned char)*++cur;
	if (yych == '=') goto yy259;
	goto yy225;
yy241:
	++cur;
#line 435 "../src/parse/lex.re"
	{ return lex_clist(); }
#line 1923 "src/parse/lex.cc"
yy242:
	yyaccept = 2;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == '>') goto yy261;
	goto yy234;
yy243:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
yy244:
	if (yybm[0+yych] & 32) {
		goto yy243;
	}
#line 503 "../src/parse/lex.re"
	{
        if (!globopts->FFlag || lex_namedef_context_re2c()) {
            yylval.str = newstr(tok, cur);
            return TOKEN_ID;
        }
        else if (lex_namedef_context_flex()) {
            yylval.str = newstr(tok, cur);
            lexer_state = LEX_FLEX_NAME;
            return TOKEN_FID;
        }
        else {
             
             
            cur = tok + 1;

            ASTChar c = {static_cast<uint8_t>(tok[0]), tok_loc()};
            std::vector<ASTChar> *str = new std::vector<ASTChar>;
            str->push_back(c);
            yylval.regexp = ast_str(tok_loc(), str, false);
            return TOKEN_REGEXP;
        }
    }
#line 1960 "src/parse/lex.cc"
yy245:
	yych = (unsigned char)*++cur;
	if (yych == '^') goto yy262;
#line 444 "../src/parse/lex.re"
	{ yylval.regexp = lex_cls(false); return TOKEN_REGEXP; }
#line 1966 "src/parse/lex.cc"
yy246:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy263;
	goto yy244;
yy247:
	yyaccept = 3;
	yych = (unsigned char)*(mar = ++cur);
	if (yybm[0+yych] & 64) {
		goto yy266;
	}
	if (yych <= 'Z') {
		if (yych == ',') goto yy264;
		if (yych >= 'A') goto yy267;
	} else {
		if (yych <= '_') {
			if (yych >= '_') goto yy267;
		} else {
			if (yych <= '`') goto yy248;
			if (yych <= 'z') goto yy267;
		}
	}
yy248:
#line 427 "../src/parse/lex.re"
	{ lex_code_in_braces(); return TOKEN_CODE; }
#line 1991 "src/parse/lex.cc"
yy249:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy249;
	} else {
		if (yych <= ' ') goto yy249;
		if (yych == '#') goto yy251;
	}
yy250:
	cur = mar;
	if (yyaccept <= 3) {
		if (yyaccept <= 1) {
			if (yyaccept == 0) {
				goto yy228;
			} else {
				goto yy225;
			}
		} else {
			if (yyaccept == 2) {
				goto yy234;
			} else {
				goto yy248;
			}
		}
	} else {
		if (yyaccept <= 5) {
			if (yyaccept == 4) {
				goto yy260;
			} else {
				goto yy265;
			}
		} else {
			if (yyaccept == 6) {
				goto yy280;
			} else {
				goto yy299;
			}
		}
	}
yy251:
	++cur;
	if ((lim - cur) < 5) { if (!fill(5)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy251;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy251;
		if (yych == 'l') goto yy268;
		goto yy250;
	}
yy252:
	yych = (unsigned char)*++cur;
	if (yych == 'n') goto yy269;
	goto yy250;
yy253:
	yych = (unsigned char)*++cur;
	if (yych == 's') goto yy270;
	goto yy250;
yy254:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 'Z') {
		if (yych <= '/') goto yy255;
		if (yych <= '9') goto yy254;
		if (yych >= 'A') goto yy254;
	} else {
		if (yych <= '_') {
			if (yych >= '_') goto yy254;
		} else {
			if (yych <= '`') goto yy255;
			if (yych <= 'z') goto yy254;
		}
	}
yy255:
#line 447 "../src/parse/lex.re"
	{
        yylval.regexp = ast_tag(tok_loc(), newstr(tok + 1, cur), tok[0] == '#');
        return TOKEN_REGEXP;
    }
#line 2075 "src/parse/lex.cc"
yy256:
	++cur;
#line 440 "../src/parse/lex.re"
	{ tok = cur; return 0; }
#line 2080 "src/parse/lex.cc"
yy257:
	++cur;
#line 438 "../src/parse/lex.re"
	{ lex_c_comment(); goto scan; }
#line 2085 "src/parse/lex.cc"
yy258:
	++cur;
#line 437 "../src/parse/lex.re"
	{ lex_cpp_comment(); goto scan; }
#line 2090 "src/parse/lex.cc"
yy259:
	yyaccept = 4;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == '>') goto yy261;
yy260:
#line 428 "../src/parse/lex.re"
	{ lex_code_indented(); return TOKEN_CODE; }
#line 2098 "src/parse/lex.cc"
yy261:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '@') {
		if (yych <= '\t') {
			if (yych <= 0x08) goto yy250;
			goto yy261;
		} else {
			if (yych == ' ') goto yy261;
			goto yy250;
		}
	} else {
		if (yych <= '_') {
			if (yych <= 'Z') {
				yyt1 = cur;
				goto yy271;
			}
			if (yych <= '^') goto yy250;
			yyt1 = cur;
			goto yy271;
		} else {
			if (yych <= '`') goto yy250;
			if (yych <= 'z') {
				yyt1 = cur;
				goto yy271;
			}
			goto yy250;
		}
	}
yy262:
	++cur;
#line 445 "../src/parse/lex.re"
	{ yylval.regexp = lex_cls(true);  return TOKEN_REGEXP; }
#line 2133 "src/parse/lex.cc"
yy263:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy273;
	goto yy244;
yy264:
	++cur;
yy265:
#line 486 "../src/parse/lex.re"
	{
        msg.error(tok_loc(), "illegal closure form, use '{n}', '{n,}', '{n,m}' "
            "where n and m are numbers");
        exit(1);
    }
#line 2147 "src/parse/lex.cc"
yy266:
	++cur;
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 64) {
		goto yy266;
	}
	if (yych == ',') {
		yyt1 = cur;
		goto yy274;
	}
	if (yych == '}') goto yy275;
	goto yy250;
yy267:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '^') {
		if (yych <= '9') {
			if (yych <= '/') goto yy250;
			goto yy267;
		} else {
			if (yych <= '@') goto yy250;
			if (yych <= 'Z') goto yy267;
			goto yy250;
		}
	} else {
		if (yych <= 'z') {
			if (yych == '`') goto yy250;
			goto yy267;
		} else {
			if (yych == '}') goto yy276;
			goto yy250;
		}
	}
yy268:
	yych = (unsigned char)*++cur;
	if (yych == 'i') goto yy277;
	goto yy250;
yy269:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy278;
	goto yy250;
yy270:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy279;
	goto yy250;
yy271:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 'Z') {
		if (yych <= '/') goto yy272;
		if (yych <= '9') goto yy271;
		if (yych >= 'A') goto yy271;
	} else {
		if (yych <= '_') {
			if (yych >= '_') goto yy271;
		} else {
			if (yych <= '`') goto yy272;
			if (yych <= 'z') goto yy271;
		}
	}
yy272:
	p = yyt1;
#line 430 "../src/parse/lex.re"
	{
        yylval.str = newstr(p, cur);
        return tok[0] == ':' ? TOKEN_CJUMP : TOKEN_CNEXT;
    }
#line 2218 "src/parse/lex.cc"
yy273:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy281;
	goto yy244;
yy274:
	yyaccept = 5;
	yych = (unsigned char)*(mar = ++cur);
	if (yych <= '/') goto yy265;
	if (yych <= '9') goto yy282;
	if (yych == '}') goto yy283;
	goto yy265;
yy275:
	++cur;
#line 454 "../src/parse/lex.re"
	{
        if (!s_to_u32_unsafe (tok + 1, cur - 1, yylval.bounds.min)) {
            msg.error(tok_loc(), "repetition count overflow");
            exit(1);
        }
        yylval.bounds.max = yylval.bounds.min;
        return TOKEN_CLOSESIZE;
    }
#line 2241 "src/parse/lex.cc"
yy276:
	++cur;
#line 492 "../src/parse/lex.re"
	{
        if (!globopts->FFlag) {
            msg.error(tok_loc(), "curly braces for names only allowed with -F switch");
            exit(1);
        }
        yylval.str = newstr(tok + 1, cur - 1);
        return TOKEN_ID;
    }
#line 2253 "src/parse/lex.cc"
yy277:
	yych = (unsigned char)*++cur;
	if (yych == 'n') goto yy284;
	goto yy250;
yy278:
	yych = (unsigned char)*++cur;
	if (yych == 'l') goto yy285;
	goto yy250;
yy279:
	yyaccept = 6;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == ':') goto yy286;
yy280:
#line 541 "../src/parse/lex.re"
	{
        msg.error(tok_loc(), "ill-formed use directive: expected `!use`"
            " followed by a colon, a block name, optional spaces, a semicolon,"
            " and finally a space, a newline, or the end of block");
        exit(1);
    }
#line 2274 "src/parse/lex.cc"
yy281:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy287;
	goto yy244;
yy282:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '/') goto yy250;
	if (yych <= '9') goto yy282;
	if (yych == '}') goto yy288;
	goto yy250;
yy283:
	++cur;
#line 477 "../src/parse/lex.re"
	{
        if (!s_to_u32_unsafe (tok + 1, cur - 2, yylval.bounds.min)) {
            msg.error(tok_loc(), "repetition lower bound overflow");
            exit(1);
        }
        yylval.bounds.max = std::numeric_limits<uint32_t>::max();
        return TOKEN_CLOSESIZE;
    }
#line 2298 "src/parse/lex.cc"
yy284:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy289;
	goto yy250;
yy285:
	yych = (unsigned char)*++cur;
	if (yych == 'u') goto yy290;
	goto yy250;
yy286:
	yych = (unsigned char)*++cur;
	if (yych <= '^') {
		if (yych <= '@') goto yy250;
		if (yych <= 'Z') {
			yyt1 = cur;
			goto yy291;
		}
		goto yy250;
	} else {
		if (yych == '`') goto yy250;
		if (yych <= 'z') {
			yyt1 = cur;
			goto yy291;
		}
		goto yy250;
	}
yy287:
	++cur;
#line 501 "../src/parse/lex.re"
	{ return TOKEN_CONF; }
#line 2328 "src/parse/lex.cc"
yy288:
	++cur;
	p = yyt1;
#line 463 "../src/parse/lex.re"
	{
        if (!s_to_u32_unsafe(tok + 1, p, yylval.bounds.min)) {
            msg.error(tok_loc(), "repetition lower bound overflow");
            exit(1);
        } else if (!s_to_u32_unsafe(p + 1, cur - 1, yylval.bounds.max)) {
            msg.error(tok_loc(), "repetition upper bound overflow");
            exit(1);
        } else if (yylval.bounds.min > yylval.bounds.max) {
            msg.error(tok_loc(), "repetition lower bound exceeds upper bound");
            exit(1);
        }
        return TOKEN_CLOSESIZE;
    }
#line 2346 "src/parse/lex.cc"
yy289:
	yych = (unsigned char)*++cur;
	if (yych <= '0') goto yy293;
	if (yych <= '9') goto yy250;
	goto yy293;
yy290:
	yych = (unsigned char)*++cur;
	if (yych == 'd') goto yy294;
	goto yy250;
yy291:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= ':') {
		if (yych <= 0x1F) {
			if (yych == '\t') {
				yyt2 = cur;
				goto yy295;
			}
			goto yy250;
		} else {
			if (yych <= ' ') {
				yyt2 = cur;
				goto yy295;
			}
			if (yych <= '/') goto yy250;
			if (yych <= '9') goto yy291;
			goto yy250;
		}
	} else {
		if (yych <= '^') {
			if (yych <= ';') {
				yyt2 = cur;
				goto yy296;
			}
			if (yych <= '@') goto yy250;
			if (yych <= 'Z') goto yy291;
			goto yy250;
		} else {
			if (yych == '`') goto yy250;
			if (yych <= 'z') goto yy291;
			goto yy250;
		}
	}
yy292:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
yy293:
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy292;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy292;
		if (yych <= '0') goto yy250;
		if (yych <= '9') {
			yyt1 = cur;
			goto yy297;
		}
		goto yy250;
	}
yy294:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy298;
	goto yy250;
yy295:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy295;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy295;
		if (yych != ';') goto yy250;
	}
yy296:
	yych = (unsigned char)*++cur;
	if (yych <= '\r') {
		if (yych <= 0x08) goto yy250;
		if (yych <= '\n') {
			yyt3 = cur;
			goto yy300;
		}
		if (yych <= '\f') goto yy250;
		yyt3 = cur;
		goto yy300;
	} else {
		if (yych <= ' ') {
			if (yych <= 0x1F) goto yy250;
			yyt3 = cur;
			goto yy300;
		} else {
			if (yych == '*') {
				yyt3 = cur;
				goto yy301;
			}
			goto yy250;
		}
	}
yy297:
	++cur;
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '\r') {
		if (yych <= '\t') {
			if (yych <= 0x08) goto yy250;
			goto yy302;
		} else {
			if (yych <= '\n') goto yy303;
			if (yych <= '\f') goto yy250;
			goto yy304;
		}
	} else {
		if (yych <= ' ') {
			if (yych <= 0x1F) goto yy250;
			goto yy302;
		} else {
			if (yych <= '/') goto yy250;
			if (yych <= '9') goto yy297;
			goto yy250;
		}
	}
yy298:
	yyaccept = 7;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == '\t') goto yy305;
	if (yych == ' ') goto yy305;
yy299:
#line 530 "../src/parse/lex.re"
	{
        msg.error(tok_loc(), "ill-formed include directive: expected `!include`"
            " followed by spaces, a double-quoted file path, optional spaces, a"
            " semicolon, and finally a space, a newline, or the end of block");
        exit(1);
    }
#line 2483 "src/parse/lex.cc"
yy300:
	++cur;
	x = yyt1;
	y = yyt2;
	cur = yyt3;
#line 537 "../src/parse/lex.re"
	{
        yylval.str = newstr(x, y);  
        return TOKEN_BLOCK;
    }
#line 2494 "src/parse/lex.cc"
yy301:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy300;
	goto yy250;
yy302:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy302;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy302;
		if (yych == '"') goto yy306;
		goto yy250;
	}
yy303:
	++cur;
	cur = yyt1;
#line 555 "../src/parse/lex.re"
	{
        set_sourceline ();
        return TOKEN_LINE_INFO;
    }
#line 2519 "src/parse/lex.cc"
yy304:
	yych = (unsigned char)*++cur;
	if (yych == '\n') goto yy303;
	goto yy250;
yy305:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy305;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy305;
		if (yych == '"') {
			yyt1 = cur;
			goto yy307;
		}
		goto yy250;
	}
yy306:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 128) {
		goto yy306;
	}
	if (yych <= '\n') goto yy250;
	if (yych <= '"') goto yy308;
	goto yy309;
yy307:
	++cur;
	if ((lim - cur) < 4) { if (!fill(4)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '!') {
		if (yych <= 0x00) goto yy250;
		if (yych == '\n') goto yy250;
		goto yy307;
	} else {
		if (yych <= '"') goto yy310;
		if (yych == '\\') goto yy311;
		goto yy307;
	}
yy308:
	yych = (unsigned char)*++cur;
	if (yych == '\n') goto yy303;
	if (yych == '\r') goto yy304;
	goto yy250;
yy309:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x00) goto yy250;
	if (yych == '\n') goto yy250;
	goto yy306;
yy310:
	yych = (unsigned char)*++cur;
	if (yych <= 0x1F) {
		if (yych == '\t') {
			yyt2 = cur;
			goto yy312;
		}
		goto yy250;
	} else {
		if (yych <= ' ') {
			yyt2 = cur;
			goto yy312;
		}
		if (yych == ';') {
			yyt2 = cur;
			goto yy313;
		}
		goto yy250;
	}
yy311:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x00) goto yy250;
	if (yych == '\n') goto yy250;
	goto yy307;
yy312:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy312;
		goto yy250;
	} else {
		if (yych <= ' ') goto yy312;
		if (yych != ';') goto yy250;
	}
yy313:
	yych = (unsigned char)*++cur;
	if (yych <= '\r') {
		if (yych <= 0x08) goto yy250;
		if (yych <= '\n') {
			yyt3 = cur;
			goto yy314;
		}
		if (yych <= '\f') goto yy250;
		yyt3 = cur;
	} else {
		if (yych <= ' ') {
			if (yych <= 0x1F) goto yy250;
			yyt3 = cur;
		} else {
			if (yych == '*') {
				yyt3 = cur;
				goto yy315;
			}
			goto yy250;
		}
	}
yy314:
	++cur;
	x = yyt1;
	y = yyt2;
	cur = yyt3;
#line 526 "../src/parse/lex.re"
	{
        include(getstr(x + 1, y - 1), tok);
        goto scan;
    }
#line 2643 "src/parse/lex.cc"
yy315:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy314;
	goto yy250;
}
#line 575 "../src/parse/lex.re"

}