/* Generated by re2c 4.5 */
#line 1 "../src/options/parse_opts.re"
#include <stddef.h>
#include <algorithm>
#include <string>
#include <vector>

#include "src/dfa/dfa.h"
#include "src/encoding/enc.h"
#include "src/msg/location.h"
#include "src/msg/msg.h"
#include "src/msg/warn.h"
#include "src/options/opt.h"
#include "src/parse/input.h"

namespace re2c {

static inline bool next(char*& arg, char**& argv) {
    arg = *++argv;
    return arg != nullptr;
}

LOCAL_NODISCARD(inline Ret set_source_file(conopt_t& global, const char* source)) {
    if (!global.source_file.empty()) {
        RET_FAIL(error("multiple source files: %s, %s", global.source_file.c_str(), source));
    }
    global.set_source_file(source);
    return Ret::OK;
}

#define NEXT_ARG(option, label) \
    do { if (!next(YYCURSOR, argv)) RET_FAIL(error_arg(option)); goto label; } while(0)

#define ERRARG(opt, exp, arg) \
    RET_FAIL(error("bad argument `%s` to option %s (expected <%s>)", arg, opt, exp))

LOCAL_NODISCARD(Ret parse_opts(Opt& opts, conopt_t& global, char** argv, Msg& msg, Lang* lang)) {
    char* YYCURSOR, *YYMARKER;
    Warn::option_t option;

#line 45 "../src/options/parse_opts.re"


opt:
    if (!next (YYCURSOR, argv)) goto end;

#line 48 "src/options/parse_opts.cc"
{
	char yych;
	unsigned int yyaccept = 0;
	static const unsigned char yybm[256] = {
		  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, 128, 128,
		128, 128, 128, 128, 128, 128, 128, 128
	};
	yych = *YYCURSOR;
	if (yych <= 0x00) goto yy1;
	if (yych == '-') goto yy3;
	goto yy2;
yy1:
	++YYCURSOR;
#line 50 "../src/options/parse_opts.re"
	{ RET_FAIL(error("bad option: %s", *argv)); }
#line 94 "src/options/parse_opts.cc"
yy2:
	yych = *++YYCURSOR;
	if (yybm[0+yych] & 128) goto yy2;
	goto yy4;
yy3:
	yych = *++YYCURSOR;
	if (yych <= '-') {
		if (yych <= 0x00) goto yy5;
		if (yych >= '-') goto yy6;
	} else {
		if (yych == 'W') goto yy7;
	}
#line 64 "../src/options/parse_opts.re"
	{ goto opt_short; }
#line 109 "src/options/parse_opts.cc"
yy4:
	++YYCURSOR;
#line 62 "../src/options/parse_opts.re"
	{ CHECK_RET(set_source_file(global, *argv));     goto opt; }
#line 114 "src/options/parse_opts.cc"
yy5:
	++YYCURSOR;
#line 61 "../src/options/parse_opts.re"
	{ CHECK_RET(set_source_file(global, "<stdin>")); goto opt; }
#line 119 "src/options/parse_opts.cc"
yy6:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy9;
#line 65 "../src/options/parse_opts.re"
	{ goto opt_long; }
#line 125 "src/options/parse_opts.cc"
yy7:
	yyaccept = 0;
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych <= 'e') {
		if (yych <= 0x00) goto yy10;
		if (yych >= 'e') goto yy11;
	} else {
		if (yych == 'n') goto yy13;
	}
yy8:
#line 69 "../src/options/parse_opts.re"
	{ option = Warn::W;        goto opt_warn; }
#line 138 "src/options/parse_opts.cc"
yy9:
	++YYCURSOR;
#line 52 "../src/options/parse_opts.re"
	{
        // the remaining args are non-options, so they must be input files (re2c expects exactly
        // one input file)
        for (char *f; next(f, argv); ) {
            CHECK_RET(set_source_file(global, f));
        }
        goto end;
    }
#line 150 "src/options/parse_opts.cc"
yy10:
	++YYCURSOR;
#line 67 "../src/options/parse_opts.re"
	{ msg.warn.set_all();       goto opt; }
#line 155 "src/options/parse_opts.cc"
yy11:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy14;
yy12:
	YYCURSOR = YYMARKER;
	if (yyaccept == 0) goto yy8;
	else goto yy18;
yy13:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy15;
	goto yy12;
yy14:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy16;
	goto yy12;
yy15:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy17;
	goto yy12;
yy16:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy19;
	goto yy12;
yy17:
	yyaccept = 1;
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy20;
yy18:
#line 70 "../src/options/parse_opts.re"
	{ option = Warn::WNO;      goto opt_warn; }
#line 186 "src/options/parse_opts.cc"
yy19:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy21;
	goto yy12;
yy20:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy22;
	goto yy12;
yy21:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy23;
	if (yych == '-') goto yy24;
	goto yy12;
yy22:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy25;
	goto yy12;
yy23:
	++YYCURSOR;
#line 68 "../src/options/parse_opts.re"
	{ msg.warn.set_all_error(); goto opt; }
#line 208 "src/options/parse_opts.cc"
yy24:
	++YYCURSOR;
#line 71 "../src/options/parse_opts.re"
	{ option = Warn::WERROR;   goto opt_warn; }
#line 213 "src/options/parse_opts.cc"
yy25:
	yych = *++YYCURSOR;
	if (yych != 'o') goto yy12;
	yych = *++YYCURSOR;
	if (yych != 'r') goto yy12;
	yych = *++YYCURSOR;
	if (yych != '-') goto yy12;
	++YYCURSOR;
#line 72 "../src/options/parse_opts.re"
	{ option = Warn::WNOERROR; goto opt_warn; }
#line 224 "src/options/parse_opts.cc"
}
#line 73 "../src/options/parse_opts.re"


opt_warn: 
#line 230 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	switch (yych) {
		case 'c': goto yy29;
		case 'd': goto yy30;
		case 'e': goto yy31;
		case 'm': goto yy32;
		case 'n': goto yy33;
		case 's': goto yy34;
		case 'u': goto yy35;
		default: goto yy27;
	}
yy27:
	++YYCURSOR;
yy28:
#line 76 "../src/options/parse_opts.re"
	{ RET_FAIL(error("bad warning: %s", *argv)); }
#line 249 "src/options/parse_opts.cc"
yy29:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy36;
	goto yy28;
yy30:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy38;
	goto yy28;
yy31:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'm') goto yy39;
	goto yy28;
yy32:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'a') goto yy40;
	goto yy28;
yy33:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy41;
	goto yy28;
yy34:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy42;
	if (yych == 'w') goto yy43;
	goto yy28;
yy35:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'n') goto yy44;
	if (yych == 's') goto yy45;
	goto yy28;
yy36:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy46;
yy37:
	YYCURSOR = YYMARKER;
	goto yy28;
yy38:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy47;
	goto yy37;
yy39:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy48;
	goto yy37;
yy40:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy49;
	goto yy37;
yy41:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy50;
	goto yy37;
yy42:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy51;
	goto yy37;
yy43:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy52;
	goto yy37;
yy44:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy53;
	if (yych == 'r') goto yy54;
	goto yy37;
yy45:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy55;
	goto yy37;
yy46:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy56;
	goto yy37;
yy47:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy57;
	goto yy37;
yy48:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy58;
	goto yy37;
yy49:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy59;
	goto yy37;
yy50:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy60;
	goto yy37;
yy51:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy61;
	goto yy37;
yy52:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy62;
	goto yy37;
yy53:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy63;
	goto yy37;
yy54:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy64;
	goto yy37;
yy55:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy65;
	goto yy37;
yy56:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy66;
	goto yy37;
yy57:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy67;
	goto yy37;
yy58:
	yych = *++YYCURSOR;
	if (yych == 'y') goto yy68;
	goto yy37;
yy59:
	yych = *++YYCURSOR;
	if (yych == 'h') goto yy69;
	goto yy37;
yy60:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy70;
	goto yy37;
yy61:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy71;
	goto yy37;
yy62:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy72;
	goto yy37;
yy63:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy73;
	goto yy37;
yy64:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy74;
	goto yy37;
yy65:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy75;
	goto yy37;
yy66:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy76;
	goto yy37;
yy67:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy77;
	goto yy37;
yy68:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy78;
	goto yy37;
yy69:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy79;
	goto yy37;
yy70:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy80;
	goto yy37;
yy71:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy81;
	goto yy37;
yy72:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy82;
	goto yy37;
yy73:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy83;
	goto yy37;
yy74:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy84;
	goto yy37;
yy75:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy85;
	goto yy37;
yy76:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy86;
	goto yy37;
yy77:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy87;
	goto yy37;
yy78:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy88;
	goto yy37;
yy79:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy89;
	goto yy37;
yy80:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy90;
	goto yy37;
yy81:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy91;
	goto yy37;
yy82:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy92;
	goto yy37;
yy83:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy93;
	goto yy37;
yy84:
	yych = *++YYCURSOR;
	if (yych == 'h') goto yy94;
	goto yy37;
yy85:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy95;
	goto yy37;
yy86:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy96;
	goto yy37;
yy87:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy97;
	goto yy37;
yy88:
	yych = *++YYCURSOR;
	if (yych == 'h') goto yy98;
	goto yy37;
yy89:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy99;
	goto yy37;
yy90:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy100;
	goto yy37;
yy91:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy101;
	goto yy37;
yy92:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy102;
	goto yy37;
yy93:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy103;
	goto yy37;
yy94:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy104;
	goto yy37;
yy95:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy105;
	goto yy37;
yy96:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy106;
	goto yy37;
yy97:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy107;
	goto yy37;
yy98:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy108;
	goto yy37;
yy99:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy109;
	goto yy37;
yy100:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy110;
	goto yy37;
yy101:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy111;
	goto yy37;
yy102:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy112;
	goto yy37;
yy103:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy113;
	goto yy37;
yy104:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy114;
	goto yy37;
yy105:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy115;
	goto yy37;
yy106:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy116;
	goto yy37;
yy107:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy117;
	goto yy37;
yy108:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy118;
	goto yy37;
yy109:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy119;
	goto yy37;
yy110:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy120;
	goto yy37;
yy111:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy121;
	goto yy37;
yy112:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy122;
	goto yy37;
yy113:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy123;
	goto yy37;
yy114:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy124;
	goto yy37;
yy115:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy125;
	goto yy37;
yy116:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy126;
	goto yy37;
yy117:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy127;
	goto yy37;
yy118:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy128;
	goto yy37;
yy119:
	yych = *++YYCURSOR;
	if (yych == 'y') goto yy129;
	goto yy37;
yy120:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy130;
	goto yy37;
yy121:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy131;
	goto yy37;
yy122:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy132;
	goto yy37;
yy123:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy133;
	goto yy37;
yy124:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy134;
	goto yy37;
yy125:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy135;
	goto yy37;
yy126:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy136;
	goto yy37;
yy127:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy137;
	goto yy37;
yy128:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy138;
	goto yy37;
yy129:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy139;
	goto yy37;
yy130:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy140;
	goto yy37;
yy131:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy141;
	goto yy37;
yy132:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy142;
	goto yy37;
yy133:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy143;
	goto yy37;
yy134:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy144;
	goto yy37;
yy135:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy145;
	goto yy37;
yy136:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy146;
	goto yy37;
yy137:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy147;
	goto yy37;
yy138:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy148;
	goto yy37;
yy139:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy149;
	goto yy37;
yy140:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy150;
	goto yy37;
yy141:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy151;
	goto yy37;
yy142:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy152;
	goto yy37;
yy143:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy153;
	goto yy37;
yy144:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy154;
	goto yy37;
yy145:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy155;
	goto yy37;
yy146:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy156;
	goto yy37;
yy147:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy157;
	goto yy37;
yy148:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy158;
	goto yy37;
yy149:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy159;
	goto yy37;
yy150:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy160;
	goto yy37;
yy151:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy161;
	goto yy37;
yy152:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy162;
	goto yy37;
yy153:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy163;
	goto yy37;
yy154:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy164;
	goto yy37;
yy155:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy165;
	goto yy37;
yy156:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy166;
	goto yy37;
yy157:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy167;
	goto yy37;
yy158:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy168;
	goto yy37;
yy159:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy169;
	goto yy37;
yy160:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy170;
	goto yy37;
yy161:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy171;
	goto yy37;
yy162:
	++YYCURSOR;
#line 82 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::SWAPPED_RANGE,          option); goto opt; }
#line 787 "src/options/parse_opts.cc"
yy163:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy172;
	goto yy37;
yy164:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy173;
	goto yy37;
yy165:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy174;
	goto yy37;
yy166:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy175;
	goto yy37;
yy167:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy176;
	goto yy37;
yy168:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy177;
	goto yy37;
yy169:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy178;
	goto yy37;
yy170:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy179;
	goto yy37;
yy171:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy180;
	goto yy37;
yy172:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy181;
	goto yy37;
yy173:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy182;
	goto yy37;
yy174:
	++YYCURSOR;
#line 86 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::USELESS_ESCAPE,         option); goto opt; }
#line 836 "src/options/parse_opts.cc"
yy175:
	++YYCURSOR;
#line 78 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::CONDITION_ORDER,        option); goto opt; }
#line 841 "src/options/parse_opts.cc"
yy176:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy183;
	goto yy37;
yy177:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy184;
	goto yy37;
yy178:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy185;
	goto yy37;
yy179:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy186;
	goto yy37;
yy180:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy187;
	goto yy37;
yy181:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy188;
	goto yy37;
yy182:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy189;
	goto yy37;
yy183:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy190;
	goto yy37;
yy184:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy191;
	goto yy37;
yy185:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy192;
	goto yy37;
yy186:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy193;
	goto yy37;
yy187:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy194;
	goto yy37;
yy188:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy195;
	goto yy37;
yy189:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy196;
	goto yy37;
yy190:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy197;
	goto yy37;
yy191:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy198;
	goto yy37;
yy192:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy199;
	goto yy37;
yy193:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy200;
	goto yy37;
yy194:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy201;
	goto yy37;
yy195:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy202;
	goto yy37;
yy196:
	++YYCURSOR;
#line 84 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::UNREACHABLE_RULES,      option); goto opt; }
#line 926 "src/options/parse_opts.cc"
yy197:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy203;
	goto yy37;
yy198:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy204;
	goto yy37;
yy199:
	++YYCURSOR;
#line 80 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::MATCH_EMPTY_STRING,     option); goto opt; }
#line 939 "src/options/parse_opts.cc"
yy200:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy205;
	goto yy37;
yy201:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy206;
	goto yy37;
yy202:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy207;
	goto yy37;
yy203:
	++YYCURSOR;
#line 85 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::DEPRECATED_EOF_RULE,    option); goto opt; }
#line 956 "src/options/parse_opts.cc"
yy204:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy208;
	goto yy37;
yy205:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy209;
	goto yy37;
yy206:
	++YYCURSOR;
#line 87 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::SENTINEL_IN_MIDRULE,    option); goto opt; }
#line 969 "src/options/parse_opts.cc"
yy207:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy210;
	goto yy37;
yy208:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy211;
	goto yy37;
yy209:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy212;
	goto yy37;
yy210:
	yych = *++YYCURSOR;
	if (yych == 'w') goto yy213;
	goto yy37;
yy211:
	++YYCURSOR;
#line 79 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::EMPTY_CHARACTER_CLASS,  option); goto opt; }
#line 990 "src/options/parse_opts.cc"
yy212:
	++YYCURSOR;
#line 81 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::NONDETERMINISTIC_TAGS,  option); goto opt; }
#line 995 "src/options/parse_opts.cc"
yy213:
	yych = *++YYCURSOR;
	if (yych >= 0x01) goto yy37;
	++YYCURSOR;
#line 83 "../src/options/parse_opts.re"
	{ msg.warn.set(Warn::UNDEFINED_CONTROL_FLOW, option); goto opt; }
#line 1002 "src/options/parse_opts.cc"
}
#line 88 "../src/options/parse_opts.re"


opt_short: 
#line 1008 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	if (yych <= 'V') {
		if (yych <= 'E') {
			if (yych <= '8') {
				if (yych <= '0') {
					if (yych >= 0x01) goto yy215;
				} else {
					if (yych <= '1') goto yy216;
					if (yych <= '7') goto yy215;
					goto yy217;
				}
			} else {
				if (yych <= '?') {
					if (yych <= '>') goto yy215;
					goto yy218;
				} else {
					if (yych == 'D') goto yy219;
					goto yy215;
				}
			}
		} else {
			if (yych <= 'P') {
				if (yych <= 'H') {
					if (yych <= 'F') goto yy220;
					goto yy215;
				} else {
					if (yych <= 'I') goto yy221;
					if (yych <= 'O') goto yy215;
					goto yy222;
				}
			} else {
				if (yych <= 'S') {
					if (yych <= 'R') goto yy215;
					goto yy223;
				} else {
					if (yych <= 'T') goto yy224;
					if (yych <= 'U') goto yy215;
					goto yy225;
				}
			}
		}
	} else {
		if (yych <= 'n') {
			if (yych <= 'e') {
				if (yych <= 'b') {
					if (yych <= 'a') goto yy215;
					goto yy226;
				} else {
					if (yych <= 'c') goto yy227;
					if (yych <= 'd') goto yy228;
					goto yy229;
				}
			} else {
				if (yych <= 'g') {
					if (yych <= 'f') goto yy230;
					goto yy231;
				} else {
					if (yych <= 'h') goto yy218;
					if (yych <= 'i') goto yy232;
					goto yy215;
				}
			}
		} else {
			if (yych <= 't') {
				if (yych <= 'q') {
					if (yych <= 'o') goto yy233;
					goto yy215;
				} else {
					if (yych <= 'r') goto yy234;
					if (yych <= 's') goto yy235;
					goto yy236;
				}
			} else {
				if (yych <= 'v') {
					if (yych <= 'u') goto yy237;
					goto yy238;
				} else {
					if (yych <= 'w') goto yy239;
					if (yych <= 'x') goto yy240;
					goto yy215;
				}
			}
		}
	}
	++YYCURSOR;
#line 93 "../src/options/parse_opts.re"
	{ goto opt; }
#line 1098 "src/options/parse_opts.cc"
yy215:
	++YYCURSOR;
#line 91 "../src/options/parse_opts.re"
	{ RET_FAIL(error("bad short option: %s", *argv)); }
#line 1103 "src/options/parse_opts.cc"
yy216:
	++YYCURSOR;
#line 134 "../src/options/parse_opts.re"
	{ goto opt_short; }
#line 1108 "src/options/parse_opts.cc"
yy217:
	++YYCURSOR;
#line 115 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::UTF8, true);   goto opt_short; }
#line 1113 "src/options/parse_opts.cc"
yy218:
	++YYCURSOR;
#line 94 "../src/options/parse_opts.re"
	{ return usage(); }
#line 1118 "src/options/parse_opts.cc"
yy219:
	++YYCURSOR;
#line 99 "../src/options/parse_opts.re"
	{ global.set_target(Target::DOT);      goto opt_short; }
#line 1123 "src/options/parse_opts.cc"
yy220:
	++YYCURSOR;
#line 101 "../src/options/parse_opts.re"
	{ global.set_flex_syntax(true);        goto opt_short; }
#line 1128 "src/options/parse_opts.cc"
yy221:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy241;
#line 125 "../src/options/parse_opts.re"
	{ *argv = YYCURSOR; goto opt_incpath; }
#line 1134 "src/options/parse_opts.cc"
yy222:
	++YYCURSOR;
#line 117 "../src/options/parse_opts.re"
	{
        opts.set_captures(true);
        opts.set_captures_posix(true);
        opts.set_captures_array(true);
        goto opt_short;
    }
#line 1144 "src/options/parse_opts.cc"
yy223:
	++YYCURSOR;
#line 103 "../src/options/parse_opts.re"
	{ global.set_target(Target::SKELETON); goto opt_short; }
#line 1149 "src/options/parse_opts.cc"
yy224:
	++YYCURSOR;
#line 109 "../src/options/parse_opts.re"
	{ opts.set_tags(true);            goto opt_short; }
#line 1154 "src/options/parse_opts.cc"
yy225:
	++YYCURSOR;
#line 96 "../src/options/parse_opts.re"
	{ return vernum(); }
#line 1159 "src/options/parse_opts.cc"
yy226:
	++YYCURSOR;
#line 105 "../src/options/parse_opts.re"
	{ opts.set_bitmaps(true);         goto opt_short; }
#line 1164 "src/options/parse_opts.cc"
yy227:
	++YYCURSOR;
#line 98 "../src/options/parse_opts.re"
	{ global.set_start_conditions(true);   goto opt_short; }
#line 1169 "src/options/parse_opts.cc"
yy228:
	++YYCURSOR;
#line 106 "../src/options/parse_opts.re"
	{ opts.set_debug(true);           goto opt_short; }
#line 1174 "src/options/parse_opts.cc"
yy229:
	++YYCURSOR;
#line 111 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::EBCDIC, true); goto opt_short; }
#line 1179 "src/options/parse_opts.cc"
yy230:
	++YYCURSOR;
#line 100 "../src/options/parse_opts.re"
	{ global.set_storable_state(true);     goto opt_short; }
#line 1184 "src/options/parse_opts.cc"
yy231:
	++YYCURSOR;
#line 107 "../src/options/parse_opts.re"
	{ opts.set_computed_gotos(true);  goto opt_short; }
#line 1189 "src/options/parse_opts.cc"
yy232:
	++YYCURSOR;
#line 102 "../src/options/parse_opts.re"
	{ global.set_line_dirs(false);         goto opt_short; }
#line 1194 "src/options/parse_opts.cc"
yy233:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy242;
#line 128 "../src/options/parse_opts.re"
	{ *argv = YYCURSOR; goto opt_output; }
#line 1200 "src/options/parse_opts.cc"
yy234:
	++YYCURSOR;
#line 135 "../src/options/parse_opts.re"
	{ goto opt_short; }
#line 1205 "src/options/parse_opts.cc"
yy235:
	++YYCURSOR;
#line 108 "../src/options/parse_opts.re"
	{ opts.set_nested_ifs(true);      goto opt_short; }
#line 1210 "src/options/parse_opts.cc"
yy236:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy243;
#line 131 "../src/options/parse_opts.re"
	{ *argv = YYCURSOR; goto opt_header; }
#line 1216 "src/options/parse_opts.cc"
yy237:
	++YYCURSOR;
#line 112 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::UTF32, true);  goto opt_short; }
#line 1221 "src/options/parse_opts.cc"
yy238:
	++YYCURSOR;
#line 95 "../src/options/parse_opts.re"
	{ return version(); }
#line 1226 "src/options/parse_opts.cc"
yy239:
	++YYCURSOR;
#line 113 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::UCS2, true);   goto opt_short; }
#line 1231 "src/options/parse_opts.cc"
yy240:
	++YYCURSOR;
#line 114 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::UTF16, true);  goto opt_short; }
#line 1236 "src/options/parse_opts.cc"
yy241:
	++YYCURSOR;
#line 124 "../src/options/parse_opts.re"
	{ NEXT_ARG("-I", opt_incpath); }
#line 1241 "src/options/parse_opts.cc"
yy242:
	++YYCURSOR;
#line 127 "../src/options/parse_opts.re"
	{ NEXT_ARG("-o, --output", opt_output); }
#line 1246 "src/options/parse_opts.cc"
yy243:
	++YYCURSOR;
#line 130 "../src/options/parse_opts.re"
	{ NEXT_ARG("-t, --type-header", opt_header); }
#line 1251 "src/options/parse_opts.cc"
}
#line 136 "../src/options/parse_opts.re"


opt_long: 
#line 1257 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	switch (yych) {
		case 'a': goto yy247;
		case 'b': goto yy248;
		case 'c': goto yy249;
		case 'd': goto yy250;
		case 'e': goto yy251;
		case 'f': goto yy252;
		case 'g': goto yy253;
		case 'h': goto yy254;
		case 'i': goto yy255;
		case 'l': goto yy256;
		case 'n': goto yy257;
		case 'o': goto yy258;
		case 'p': goto yy259;
		case 'r': goto yy260;
		case 's': goto yy261;
		case 't': goto yy262;
		case 'u': goto yy263;
		case 'v': goto yy264;
		case 'w': goto yy265;
		default: goto yy245;
	}
yy245:
	++YYCURSOR;
yy246:
#line 139 "../src/options/parse_opts.re"
	{ RET_FAIL(error("bad long option: %s", *argv)); }
#line 1288 "src/options/parse_opts.cc"
yy247:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'p') goto yy266;
	goto yy246;
yy248:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'i') goto yy268;
	goto yy246;
yy249:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'a') goto yy269;
	if (yych == 'o') goto yy270;
	goto yy246;
yy250:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych <= 'f') {
		if (yych <= 'd') goto yy246;
		if (yych <= 'e') goto yy271;
		goto yy272;
	} else {
		if (yych == 'u') goto yy273;
		goto yy246;
	}
yy251:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych <= 'c') {
		if (yych <= '`') goto yy246;
		if (yych <= 'a') goto yy274;
		if (yych <= 'b') goto yy275;
		goto yy276;
	} else {
		if (yych <= 'l') goto yy246;
		if (yych <= 'm') goto yy277;
		if (yych <= 'n') goto yy278;
		goto yy246;
	}
yy252:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'i') goto yy279;
	if (yych == 'l') goto yy280;
	goto yy246;
yy253:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy281;
	goto yy246;
yy254:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy282;
	goto yy246;
yy255:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'n') goto yy283;
	goto yy246;
yy256:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych <= 'd') {
		if (yych == 'a') goto yy284;
		goto yy246;
	} else {
		if (yych <= 'e') goto yy285;
		if (yych == 'o') goto yy286;
		goto yy246;
	}
yy257:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy287;
	if (yych == 'o') goto yy288;
	goto yy246;
yy258:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'u') goto yy289;
	goto yy246;
yy259:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy290;
	goto yy246;
yy260:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy291;
	goto yy246;
yy261:
	yych = *(YYMARKER = ++YYCURSOR);
	switch (yych) {
		case 'i': goto yy292;
		case 'k': goto yy293;
		case 't': goto yy294;
		case 'y': goto yy295;
		default: goto yy246;
	}
yy262:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'a') goto yy296;
	if (yych == 'y') goto yy297;
	goto yy246;
yy263:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych <= 'm') {
		if (yych == 'c') goto yy298;
		goto yy246;
	} else {
		if (yych <= 'n') goto yy299;
		if (yych == 't') goto yy300;
		goto yy246;
	}
yy264:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy301;
	goto yy246;
yy265:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'i') goto yy302;
	goto yy246;
yy266:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy303;
yy267:
	YYCURSOR = YYMARKER;
	goto yy246;
yy268:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy304;
	goto yy267;
yy269:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy305;
	if (yych == 's') goto yy306;
	goto yy267;
yy270:
	yych = *++YYCURSOR;
	if (yych <= 'l') goto yy267;
	if (yych <= 'm') goto yy307;
	if (yych <= 'n') goto yy308;
	goto yy267;
yy271:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy309;
	if (yych == 'p') goto yy310;
	goto yy267;
yy272:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy311;
	goto yy267;
yy273:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy312;
	goto yy267;
yy274:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy313;
	goto yy267;
yy275:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy314;
	goto yy267;
yy276:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy315;
	goto yy267;
yy277:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy316;
	if (yych == 'p') goto yy317;
	goto yy267;
yy278:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy318;
	goto yy267;
yy279:
	yych = *++YYCURSOR;
	if (yych == 'x') goto yy319;
	goto yy267;
yy280:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy320;
	goto yy267;
yy281:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy321;
	goto yy267;
yy282:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy322;
	if (yych == 'l') goto yy323;
	goto yy267;
yy283:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy324;
	if (yych == 'v') goto yy325;
	goto yy267;
yy284:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy326;
	goto yy267;
yy285:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy327;
	goto yy267;
yy286:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy328;
	if (yych == 'o') goto yy329;
	goto yy267;
yy287:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy330;
	goto yy267;
yy288:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy331;
	goto yy267;
yy289:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy332;
	goto yy267;
yy290:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy333;
	goto yy267;
yy291:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy334;
	if (yych == 'u') goto yy335;
	goto yy267;
yy292:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy336;
	goto yy267;
yy293:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy337;
	goto yy267;
yy294:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy338;
	if (yych == 'o') goto yy339;
	goto yy267;
yy295:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy340;
	goto yy267;
yy296:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy341;
	goto yy267;
yy297:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy342;
	goto yy267;
yy298:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy343;
	goto yy267;
yy299:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy344;
	goto yy267;
yy300:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy345;
	goto yy267;
yy301:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy346;
	goto yy267;
yy302:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy347;
	goto yy267;
yy303:
	++YYCURSOR;
#line 206 "../src/options/parse_opts.re"
	{ NEXT_ARG("--api, --input",     opt_input); }
#line 1561 "src/options/parse_opts.cc"
yy304:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy348;
	goto yy267;
yy305:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy349;
	goto yy267;
yy306:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy350;
	goto yy267;
yy307:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy351;
	goto yy267;
yy308:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy352;
	goto yy267;
yy309:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy353;
	goto yy267;
yy310:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy354;
	goto yy267;
yy311:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy355;
	goto yy267;
yy312:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy356;
	goto yy267;
yy313:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy357;
	goto yy267;
yy314:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy358;
	goto yy267;
yy315:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy359;
	goto yy267;
yy316:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy360;
	goto yy267;
yy317:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy361;
	goto yy267;
yy318:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy362;
	goto yy267;
yy319:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy363;
	goto yy267;
yy320:
	yych = *++YYCURSOR;
	if (yych == 'x') goto yy364;
	goto yy267;
yy321:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy365;
	goto yy267;
yy322:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy366;
	goto yy267;
yy323:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy367;
	goto yy267;
yy324:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy368;
	goto yy267;
yy325:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy369;
	goto yy267;
yy326:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy370;
	goto yy267;
yy327:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy371;
	goto yy267;
yy328:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy372;
	goto yy267;
yy329:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy373;
	goto yy267;
yy330:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy374;
	goto yy267;
yy331:
	yych = *++YYCURSOR;
	switch (yych) {
		case 'd': goto yy375;
		case 'g': goto yy376;
		case 'l': goto yy377;
		case 'o': goto yy378;
		case 'u': goto yy379;
		case 'v': goto yy380;
		default: goto yy267;
	}
yy332:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy381;
	goto yy267;
yy333:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy382;
	goto yy267;
yy334:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy383;
	goto yy267;
yy335:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy384;
	goto yy267;
yy336:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy385;
	goto yy267;
yy337:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy386;
	goto yy267;
yy338:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy387;
	if (yych == 'r') goto yy388;
	goto yy267;
yy339:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy389;
	goto yy267;
yy340:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy390;
	goto yy267;
yy341:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy391;
	goto yy267;
yy342:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy392;
	goto yy267;
yy343:
	yych = *++YYCURSOR;
	if (yych == '2') goto yy393;
	goto yy267;
yy344:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy394;
	goto yy267;
yy345:
	yych = *++YYCURSOR;
	switch (yych) {
		case '-': goto yy395;
		case '1': goto yy396;
		case '3': goto yy397;
		case '8': goto yy398;
		default: goto yy267;
	}
yy346:
	yych = *++YYCURSOR;
	if (yych <= 'm') {
		if (yych == 'b') goto yy399;
		goto yy267;
	} else {
		if (yych <= 'n') goto yy400;
		if (yych == 's') goto yy401;
		goto yy267;
	}
yy347:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy402;
	goto yy267;
yy348:
	yych = *++YYCURSOR;
	if (yych == 'v') goto yy403;
	goto yy267;
yy349:
	yych = *++YYCURSOR;
	if (yych <= 't') goto yy267;
	if (yych <= 'u') goto yy404;
	if (yych <= 'v') goto yy405;
	goto yy267;
yy350:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy406;
	goto yy267;
yy351:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy407;
	goto yy267;
yy352:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy408;
	goto yy267;
yy353:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy409;
	goto yy267;
yy354:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy410;
	goto yy267;
yy355:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy411;
	goto yy267;
yy356:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy412;
	goto yy267;
yy357:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy413;
	goto yy267;
yy358:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy414;
	goto yy267;
yy359:
	++YYCURSOR;
#line 171 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::EBCDIC, true); goto opt; }
#line 1807 "src/options/parse_opts.cc"
yy360:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy415;
	goto yy267;
yy361:
	yych = *++YYCURSOR;
	if (yych == 'y') goto yy416;
	goto yy267;
yy362:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy417;
	goto yy267;
yy363:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy418;
	goto yy267;
yy364:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy419;
	goto yy267;
yy365:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy420;
	goto yy267;
yy366:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy421;
	goto yy267;
yy367:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy422;
	goto yy267;
yy368:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy423;
	goto yy267;
yy369:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy424;
	goto yy267;
yy370:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy425;
	goto yy267;
yy371:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy426;
	goto yy267;
yy372:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy427;
	goto yy267;
yy373:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy428;
	goto yy267;
yy374:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy429;
	goto yy267;
yy375:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy430;
	goto yy267;
yy376:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy431;
	goto yy267;
yy377:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy432;
	goto yy267;
yy378:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy433;
	goto yy267;
yy379:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy434;
	goto yy267;
yy380:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy435;
	goto yy267;
yy381:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy436;
	goto yy267;
yy382:
	yych = *++YYCURSOR;
	if (yych == 'x') goto yy437;
	goto yy267;
yy383:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy438;
	goto yy267;
yy384:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy439;
	goto yy267;
yy385:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy440;
	goto yy267;
yy386:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy441;
	goto yy267;
yy387:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy442;
	goto yy267;
yy388:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy443;
	goto yy267;
yy389:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy444;
	goto yy267;
yy390:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy445;
	goto yy267;
yy391:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy446;
	goto yy267;
yy392:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy447;
	goto yy267;
yy393:
	++YYCURSOR;
#line 173 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::UCS2, true);   goto opt; }
#line 1944 "src/options/parse_opts.cc"
yy394:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy448;
	goto yy267;
yy395:
	yych = *++YYCURSOR;
	if (yych == '1') goto yy449;
	if (yych == '8') goto yy450;
	goto yy267;
yy396:
	yych = *++YYCURSOR;
	if (yych == '6') goto yy451;
	goto yy267;
yy397:
	yych = *++YYCURSOR;
	if (yych == '2') goto yy452;
	goto yy267;
yy398:
	++YYCURSOR;
#line 175 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::UTF8, true);   goto opt; }
#line 1966 "src/options/parse_opts.cc"
yy399:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy453;
	goto yy267;
yy400:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy454;
	goto yy267;
yy401:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy455;
	goto yy267;
yy402:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy456;
	goto yy267;
yy403:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy457;
	goto yy267;
yy404:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy458;
	goto yy267;
yy405:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy459;
	goto yy267;
yy406:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy460;
	if (yych == 'r') goto yy461;
	goto yy267;
yy407:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy462;
	goto yy267;
yy408:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy463;
	goto yy267;
yy409:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy464;
	goto yy267;
yy410:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy465;
	goto yy267;
yy411:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy466;
	goto yy267;
yy412:
	yych = *++YYCURSOR;
	switch (yych) {
		case 'a': goto yy467;
		case 'c': goto yy468;
		case 'd': goto yy469;
		case 'i': goto yy470;
		case 'n': goto yy471;
		default: goto yy267;
	}
yy413:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy472;
	goto yy267;
yy414:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy359;
	goto yy267;
yy415:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy473;
	goto yy267;
yy416:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy474;
	goto yy267;
yy417:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy475;
	goto yy267;
yy418:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy476;
	goto yy267;
yy419:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy477;
	goto yy267;
yy420:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy478;
	goto yy267;
yy421:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy479;
	goto yy267;
yy422:
	++YYCURSOR;
#line 141 "../src/options/parse_opts.re"
	{ return usage(); }
#line 2070 "src/options/parse_opts.cc"
yy423:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy303;
	if (yych == '-') goto yy480;
	goto yy267;
yy424:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy481;
	goto yy267;
yy425:
	++YYCURSOR;
#line 200 "../src/options/parse_opts.re"
	{ NEXT_ARG("--lang",             opt_lang); }
#line 2084 "src/options/parse_opts.cc"
yy426:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy482;
	goto yy267;
yy427:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy483;
	goto yy267;
yy428:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy484;
	goto yy267;
yy429:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy485;
	goto yy267;
yy430:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy486;
	goto yy267;
yy431:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy487;
	goto yy267;
yy432:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy488;
	goto yy267;
yy433:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy489;
	goto yy267;
yy434:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy490;
	goto yy267;
yy435:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy491;
	goto yy267;
yy436:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy492;
	goto yy267;
yy437:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy493;
	goto yy267;
yy438:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy494;
	goto yy267;
yy439:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy495;
	goto yy267;
yy440:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy496;
	goto yy267;
yy441:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy497;
	goto yy267;
yy442:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy498;
	goto yy267;
yy443:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy499;
	goto yy267;
yy444:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy500;
	goto yy267;
yy445:
	yych = *++YYCURSOR;
	if (yych == 'x') goto yy501;
	goto yy267;
yy446:
	++YYCURSOR;
#line 167 "../src/options/parse_opts.re"
	{ opts.set_tags(true);                    goto opt; }
#line 2169 "src/options/parse_opts.cc"
yy447:
	yych = *++YYCURSOR;
	if (yych == 'h') goto yy502;
	goto yy267;
yy448:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy503;
	goto yy267;
yy449:
	yych = *++YYCURSOR;
	if (yych == '6') goto yy504;
	goto yy267;
yy450:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy398;
	goto yy267;
yy451:
	++YYCURSOR;
#line 174 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::UTF16, true);  goto opt; }
#line 2190 "src/options/parse_opts.cc"
yy452:
	++YYCURSOR;
#line 172 "../src/options/parse_opts.re"
	{ opts.set_encoding(Enc::Type::UTF32, true);  goto opt; }
#line 2195 "src/options/parse_opts.cc"
yy453:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy505;
	goto yy267;
yy454:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy506;
	goto yy267;
yy455:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy507;
	goto yy267;
yy456:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy508;
	goto yy267;
yy457:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy509;
	goto yy267;
yy458:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy510;
	goto yy267;
yy459:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy511;
	goto yy267;
yy460:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy512;
	goto yy267;
yy461:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy513;
	goto yy267;
yy462:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy514;
	goto yy267;
yy463:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy515;
	goto yy267;
yy464:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy516;
	goto yy267;
yy465:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy517;
	goto yy267;
yy466:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy518;
	goto yy267;
yy467:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy519;
	goto yy267;
yy468:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy520;
	if (yych == 'l') goto yy521;
	goto yy267;
yy469:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy522;
	goto yy267;
yy470:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy523;
	goto yy267;
yy471:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy524;
	goto yy267;
yy472:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy525;
	goto yy267;
yy473:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy526;
	goto yy267;
yy474:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy527;
	goto yy267;
yy475:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy528;
	goto yy267;
yy476:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy529;
	goto yy267;
yy477:
	yych = *++YYCURSOR;
	if (yych == 'y') goto yy530;
	goto yy267;
yy478:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy531;
	goto yy267;
yy479:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy532;
	goto yy267;
yy480:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy533;
	goto yy267;
yy481:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy534;
	goto yy267;
yy482:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy535;
	goto yy267;
yy483:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy536;
	goto yy267;
yy484:
	yych = *++YYCURSOR;
	if (yych == 'w') goto yy537;
	goto yy267;
yy485:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy538;
	goto yy267;
yy486:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy539;
	goto yy267;
yy487:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy540;
	goto yy267;
yy488:
	yych = *++YYCURSOR;
	if (yych == 'k') goto yy541;
	goto yy267;
yy489:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy542;
	goto yy267;
yy490:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy543;
	goto yy267;
yy491:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy544;
	goto yy267;
yy492:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy545;
	goto yy267;
yy493:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy546;
	if (yych == 'p') goto yy547;
	goto yy267;
yy494:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy548;
	goto yy267;
yy495:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy549;
	goto yy267;
yy496:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy550;
	goto yy267;
yy497:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy551;
	goto yy267;
yy498:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy552;
	goto yy267;
yy499:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy553;
	goto yy267;
yy500:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy554;
	goto yy267;
yy501:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy555;
	goto yy267;
yy502:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy556;
	goto yy267;
yy503:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy557;
	goto yy267;
yy504:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy451;
	goto yy267;
yy505:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy558;
	goto yy267;
yy506:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy559;
	goto yy267;
yy507:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy560;
	goto yy267;
yy508:
	yych = *++YYCURSOR;
	if (yych == 'h') goto yy561;
	goto yy267;
yy509:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy562;
	goto yy267;
yy510:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy563;
	goto yy267;
yy511:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy564;
	goto yy267;
yy512:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy565;
	if (yych == 'v') goto yy566;
	goto yy267;
yy513:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy567;
	goto yy267;
yy514:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy568;
	goto yy267;
yy515:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy569;
	goto yy267;
yy516:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy570;
	goto yy267;
yy517:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy571;
	goto yy267;
yy518:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy572;
	goto yy267;
yy519:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy573;
	goto yy267;
yy520:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy574;
	goto yy267;
yy521:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy575;
	goto yy267;
yy522:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy576;
	goto yy267;
yy523:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy577;
	goto yy267;
yy524:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy578;
	goto yy267;
yy525:
	yych = *++YYCURSOR;
	if (yych == 'k') goto yy579;
	goto yy267;
yy526:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy580;
	goto yy267;
yy527:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy581;
	goto yy267;
yy528:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy582;
	goto yy267;
yy529:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy583;
	goto yy267;
yy530:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy584;
	goto yy267;
yy531:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy585;
	goto yy267;
yy532:
	++YYCURSOR;
#line 202 "../src/options/parse_opts.re"
	{ NEXT_ARG("-t, --header, --type-header", opt_header); }
#line 2519 "src/options/parse_opts.cc"
yy533:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy586;
	goto yy267;
yy534:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy587;
	goto yy267;
yy535:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy588;
	goto yy267;
yy536:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy589;
	goto yy267;
yy537:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy590;
	goto yy267;
yy538:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy591;
	goto yy267;
yy539:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy592;
	goto yy267;
yy540:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy593;
	goto yy267;
yy541:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy594;
	goto yy267;
yy542:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy595;
	goto yy267;
yy543:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy596;
	goto yy267;
yy544:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy597;
	goto yy267;
yy545:
	++YYCURSOR;
#line 201 "../src/options/parse_opts.re"
	{ NEXT_ARG("-o, --output",       opt_output); }
#line 2572 "src/options/parse_opts.cc"
yy546:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy598;
	if (yych == 'l') goto yy599;
	goto yy267;
yy547:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy600;
	goto yy267;
yy548:
	yych = *++YYCURSOR;
	if (yych == 'v') goto yy601;
	goto yy267;
yy549:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy602;
	goto yy267;
yy550:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy603;
	goto yy267;
yy551:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy604;
	goto yy267;
yy552:
	++YYCURSOR;
#line 224 "../src/options/parse_opts.re"
	{ RET_FAIL(error("staDFA algorithm was deprecated and removed")); }
#line 2602 "src/options/parse_opts.cc"
yy553:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy605;
	goto yy267;
yy554:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy606;
	goto yy267;
yy555:
	++YYCURSOR;
#line 204 "../src/options/parse_opts.re"
	{ NEXT_ARG("--syntax",           opt_syntax); }
#line 2615 "src/options/parse_opts.cc"
yy556:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy322;
	goto yy267;
yy557:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy452;
	goto yy267;
yy558:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy607;
	goto yy267;
yy559:
	++YYCURSOR;
#line 143 "../src/options/parse_opts.re"
	{ return vernum(); }
#line 2632 "src/options/parse_opts.cc"
yy560:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy608;
	goto yy267;
yy561:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy609;
	goto yy267;
yy562:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy610;
	goto yy267;
yy563:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy611;
	goto yy267;
yy564:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy612;
	goto yy267;
yy565:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy613;
	goto yy267;
yy566:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy614;
	goto yy267;
yy567:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy615;
	goto yy267;
yy568:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy616;
	goto yy267;
yy569:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy617;
	goto yy267;
yy570:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy618;
	goto yy267;
yy571:
	++YYCURSOR;
#line 203 "../src/options/parse_opts.re"
	{ NEXT_ARG("--depfile",          opt_depfile); }
#line 2681 "src/options/parse_opts.cc"
yy572:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy619;
	goto yy267;
yy573:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy620;
	goto yy267;
yy574:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy621;
	goto yy267;
yy575:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy622;
	goto yy267;
yy576:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy623;
	goto yy267;
yy577:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy624;
	goto yy267;
yy578:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy625;
	goto yy267;
yy579:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy626;
	goto yy267;
yy580:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy627;
	goto yy267;
yy581:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy628;
	goto yy267;
yy582:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy629;
	goto yy267;
yy583:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy630;
	goto yy267;
yy584:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy631;
	goto yy267;
yy585:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy632;
	goto yy267;
yy586:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy633;
	goto yy267;
yy587:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy634;
	goto yy267;
yy588:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy635;
	goto yy267;
yy589:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy636;
	goto yy267;
yy590:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy637;
	goto yy267;
yy591:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy638;
	goto yy267;
yy592:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy639;
	goto yy267;
yy593:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy640;
	goto yy267;
yy594:
	yych = *++YYCURSOR;
	if (yych == 'h') goto yy641;
	goto yy267;
yy595:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy642;
	goto yy267;
yy596:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy643;
	goto yy267;
yy597:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy644;
	goto yy267;
yy598:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy645;
	goto yy267;
yy599:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy646;
	goto yy267;
yy600:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy647;
	goto yy267;
yy601:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy648;
	goto yy267;
yy602:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy649;
	goto yy267;
yy603:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy650;
	goto yy267;
yy604:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy651;
	goto yy267;
yy605:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy308;
	goto yy267;
yy606:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy652;
	goto yy267;
yy607:
	++YYCURSOR;
#line 149 "../src/options/parse_opts.re"
	{ global.set_verbose(true);            goto opt; }
#line 2826 "src/options/parse_opts.cc"
yy608:
	++YYCURSOR;
#line 142 "../src/options/parse_opts.re"
	{ return version(); }
#line 2831 "src/options/parse_opts.cc"
yy609:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy653;
	goto yy267;
yy610:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy654;
	goto yy267;
yy611:
	++YYCURSOR;
#line 177 "../src/options/parse_opts.re"
	{
        opts.set_captures(true);
        opts.set_captures_array(true);
        goto opt;
    }
#line 2848 "src/options/parse_opts.cc"
yy612:
	++YYCURSOR;
#line 188 "../src/options/parse_opts.re"
	{
        opts.set_captures(true);
        opts.set_captures_array(false);
        goto opt;
    }
#line 2857 "src/options/parse_opts.cc"
yy613:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy655;
	goto yy267;
yy614:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy656;
	goto yy267;
yy615:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy657;
	goto yy267;
yy616:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy658;
	goto yy267;
yy617:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy659;
	goto yy267;
yy618:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy660;
	goto yy267;
yy619:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy661;
	goto yy267;
yy620:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy662;
	goto yy267;
yy621:
	++YYCURSOR;
#line 234 "../src/options/parse_opts.re"
	{ global.set_dump_cfg(true);           goto opt; }
#line 2894 "src/options/parse_opts.cc"
yy622:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy663;
	goto yy267;
yy623:
	yych = *++YYCURSOR;
	switch (yych) {
		case 'd': goto yy664;
		case 'm': goto yy665;
		case 'r': goto yy666;
		case 't': goto yy667;
		default: goto yy267;
	}
yy624:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy668;
	goto yy267;
yy625:
	++YYCURSOR;
#line 227 "../src/options/parse_opts.re"
	{ global.set_dump_nfa(true);           goto opt; }
#line 2916 "src/options/parse_opts.cc"
yy626:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy669;
	goto yy267;
yy627:
	++YYCURSOR;
#line 146 "../src/options/parse_opts.re"
	{ global.set_target(Target::DOT);      goto opt; }
#line 2925 "src/options/parse_opts.cc"
yy628:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy670;
	goto yy267;
yy629:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy671;
	goto yy267;
yy630:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy672;
	goto yy267;
yy631:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy673;
	goto yy267;
yy632:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy674;
	goto yy267;
yy633:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy675;
	goto yy267;
yy634:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy676;
	goto yy267;
yy635:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy677;
	goto yy267;
yy636:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy678;
	goto yy267;
yy637:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy679;
	goto yy267;
yy638:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy680;
	goto yy267;
yy639:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy681;
	goto yy267;
yy640:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy682;
	goto yy267;
yy641:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy683;
	goto yy267;
yy642:
	yych = *++YYCURSOR;
	if (yych == 'z') goto yy684;
	goto yy267;
yy643:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy685;
	goto yy267;
yy644:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy686;
	goto yy267;
yy645:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy687;
	goto yy267;
yy646:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy688;
	goto yy267;
yy647:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy689;
	goto yy267;
yy648:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy690;
	goto yy267;
yy649:
	++YYCURSOR;
#line 213 "../src/options/parse_opts.re"
	{ goto opt; }
#line 3014 "src/options/parse_opts.cc"
yy650:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy691;
	goto yy267;
yy651:
	++YYCURSOR;
#line 153 "../src/options/parse_opts.re"
	{ global.set_target(Target::SKELETON); goto opt; }
#line 3023 "src/options/parse_opts.cc"
yy652:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy692;
	goto yy267;
yy653:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy693;
	goto yy267;
yy654:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy694;
	goto yy267;
yy655:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy695;
	goto yy267;
yy656:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy696;
	goto yy267;
yy657:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy697;
	goto yy267;
yy658:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy698;
	goto yy267;
yy659:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy699;
	goto yy267;
yy660:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy700;
	goto yy267;
yy661:
	yych = *++YYCURSOR;
	if (yych == 'z') goto yy701;
	goto yy267;
yy662:
	++YYCURSOR;
#line 233 "../src/options/parse_opts.re"
	{ global.set_dump_adfa(true);          goto opt; }
#line 3068 "src/options/parse_opts.cc"
yy663:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy702;
	goto yy267;
yy664:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy703;
	goto yy267;
yy665:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy704;
	goto yy267;
yy666:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy705;
	goto yy267;
yy667:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy706;
	if (yych == 'r') goto yy707;
	goto yy267;
yy668:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy708;
	goto yy267;
yy669:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy709;
	goto yy267;
yy670:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy710;
	goto yy267;
yy671:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy711;
	goto yy267;
yy672:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy712;
	goto yy267;
yy673:
	yych = *++YYCURSOR;
	if (yych == 'x') goto yy713;
	goto yy267;
yy674:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy714;
	goto yy267;
yy675:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy715;
	goto yy267;
yy676:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy716;
	goto yy267;
yy677:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy717;
	goto yy267;
yy678:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy718;
	goto yy267;
yy679:
	yych = *++YYCURSOR;
	if (yych == 'h') goto yy719;
	goto yy267;
yy680:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy720;
	goto yy267;
yy681:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy721;
	goto yy267;
yy682:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy722;
	goto yy267;
yy683:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy723;
	goto yy267;
yy684:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy724;
	goto yy267;
yy685:
	++YYCURSOR;
#line 168 "../src/options/parse_opts.re"
	{ opts.set_unsafe(false);                 goto opt; }
#line 3162 "src/options/parse_opts.cc"
yy686:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy725;
	goto yy267;
yy687:
	yych = *++YYCURSOR;
	if (yych <= 't') goto yy267;
	if (yych <= 'u') goto yy726;
	if (yych <= 'v') goto yy727;
	goto yy267;
yy688:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy728;
	goto yy267;
yy689:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy729;
	goto yy267;
yy690:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy730;
	goto yy267;
yy691:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy731;
	goto yy267;
yy692:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy732;
	goto yy267;
yy693:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy393;
	goto yy267;
yy694:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy733;
	goto yy267;
yy695:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy734;
	goto yy267;
yy696:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy735;
	goto yy267;
yy697:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy736;
	goto yy267;
yy698:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy737;
	goto yy267;
yy699:
	++YYCURSOR;
#line 145 "../src/options/parse_opts.re"
	{ global.set_start_conditions(true);   goto opt; }
#line 3221 "src/options/parse_opts.cc"
yy700:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy738;
	goto yy267;
yy701:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy739;
	goto yy267;
yy702:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy740;
	goto yy267;
yy703:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy741;
	goto yy267;
yy704:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy742;
	goto yy267;
yy705:
	yych = *++YYCURSOR;
	if (yych == 'w') goto yy743;
	goto yy267;
yy706:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy744;
	goto yy267;
yy707:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy745;
	goto yy267;
yy708:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy746;
	goto yy267;
yy709:
	++YYCURSOR;
#line 154 "../src/options/parse_opts.re"
	{ global.set_eager_skip(true);         goto opt; }
#line 3262 "src/options/parse_opts.cc"
yy710:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy747;
	goto yy267;
yy711:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy748;
	goto yy267;
yy712:
	++YYCURSOR;
#line 218 "../src/options/parse_opts.re"
	{ NEXT_ARG("--fixed-tags",       opt_fixed_tags); }
#line 3275 "src/options/parse_opts.cc"
yy713:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy749;
	goto yy267;
yy714:
	++YYCURSOR;
#line 155 "../src/options/parse_opts.re"
	{ global.set_code_model(CodeModel::GOTO_LABEL);  goto opt; }
#line 3284 "src/options/parse_opts.cc"
yy715:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy750;
	goto yy267;
yy716:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy751;
	goto yy267;
yy717:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy305;
	goto yy267;
yy718:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy752;
	goto yy267;
yy719:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy753;
	goto yy267;
yy720:
	++YYCURSOR;
#line 164 "../src/options/parse_opts.re"
	{ opts.set_nested_ifs(true);              goto opt; }
#line 3309 "src/options/parse_opts.cc"
yy721:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy754;
	goto yy267;
yy722:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy755;
	goto yy267;
yy723:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy756;
	goto yy267;
yy724:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy757;
	goto yy267;
yy725:
	++YYCURSOR;
#line 152 "../src/options/parse_opts.re"
	{ global.set_version(false);           goto opt; }
#line 3330 "src/options/parse_opts.cc"
yy726:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy758;
	goto yy267;
yy727:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy759;
	goto yy267;
yy728:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy760;
	goto yy267;
yy729:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy761;
	goto yy267;
yy730:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy762;
	goto yy267;
yy731:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy763;
	goto yy267;
yy732:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy764;
	goto yy267;
yy733:
	++YYCURSOR;
#line 159 "../src/options/parse_opts.re"
	{ opts.set_bitmaps(true);                 goto opt; }
#line 3363 "src/options/parse_opts.cc"
yy734:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy765;
	goto yy267;
yy735:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy766;
	goto yy267;
yy736:
	++YYCURSOR;
#line 161 "../src/options/parse_opts.re"
	{ opts.set_case_ranges(true);             goto opt; }
#line 3376 "src/options/parse_opts.cc"
yy737:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy767;
	goto yy267;
yy738:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy768;
	goto yy267;
yy739:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy769;
	goto yy267;
yy740:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy770;
	goto yy267;
yy741:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy771;
	goto yy267;
yy742:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy772;
	goto yy267;
yy743:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy773;
	goto yy267;
yy744:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy774;
	goto yy267;
yy745:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy775;
	goto yy267;
yy746:
	++YYCURSOR;
#line 235 "../src/options/parse_opts.re"
	{ global.set_dump_interf(true);        goto opt; }
#line 3417 "src/options/parse_opts.cc"
yy747:
	++YYCURSOR;
#line 207 "../src/options/parse_opts.re"
	{ NEXT_ARG("--empty-class",      opt_empty_class); }
#line 3422 "src/options/parse_opts.cc"
yy748:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy776;
	goto yy267;
yy749:
	++YYCURSOR;
#line 148 "../src/options/parse_opts.re"
	{ global.set_flex_syntax(true);        goto opt; }
#line 3431 "src/options/parse_opts.cc"
yy750:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy777;
	goto yy267;
yy751:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy778;
	goto yy267;
yy752:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy779;
	goto yy267;
yy753:
	++YYCURSOR;
#line 156 "../src/options/parse_opts.re"
	{ global.set_code_model(CodeModel::LOOP_SWITCH); goto opt; }
#line 3448 "src/options/parse_opts.cc"
yy754:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy780;
	goto yy267;
yy755:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy781;
	goto yy267;
yy756:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy782;
	goto yy267;
yy757:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy783;
	goto yy267;
yy758:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy784;
	goto yy267;
yy759:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy785;
	goto yy267;
yy760:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy786;
	goto yy267;
yy761:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy787;
	goto yy267;
yy762:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy788;
	goto yy267;
yy763:
	++YYCURSOR;
#line 212 "../src/options/parse_opts.re"
	{ goto opt; }
#line 3489 "src/options/parse_opts.cc"
yy764:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy789;
	goto yy267;
yy765:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy790;
	goto yy267;
yy766:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy791;
	goto yy267;
yy767:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy792;
	goto yy267;
yy768:
	++YYCURSOR;
#line 160 "../src/options/parse_opts.re"
	{ opts.set_debug(true);                   goto opt; }
#line 3510 "src/options/parse_opts.cc"
yy769:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy793;
	goto yy267;
yy770:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy794;
	goto yy267;
yy771:
	++YYCURSOR;
#line 230 "../src/options/parse_opts.re"
	{ global.set_dump_dfa_det(true);       goto opt; }
#line 3523 "src/options/parse_opts.cc"
yy772:
	++YYCURSOR;
#line 232 "../src/options/parse_opts.re"
	{ global.set_dump_dfa_min(true);       goto opt; }
#line 3528 "src/options/parse_opts.cc"
yy773:
	++YYCURSOR;
#line 229 "../src/options/parse_opts.re"
	{ global.set_dump_dfa_raw(true);       goto opt; }
#line 3533 "src/options/parse_opts.cc"
yy774:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy795;
	goto yy267;
yy775:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy796;
	goto yy267;
yy776:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy797;
	goto yy267;
yy777:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy798;
	goto yy267;
yy778:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy799;
	goto yy267;
yy779:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy800;
	goto yy267;
yy780:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy801;
	goto yy267;
yy781:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy802;
	goto yy267;
yy782:
	++YYCURSOR;
#line 222 "../src/options/parse_opts.re"
	{ RET_FAIL(error("TDFA(0) algorithm was deprecated and removed")); }
#line 3570 "src/options/parse_opts.cc"
yy783:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy803;
	goto yy267;
yy784:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy804;
	goto yy267;
yy785:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy805;
	goto yy267;
yy786:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy806;
	goto yy267;
yy787:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy807;
	goto yy267;
yy788:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy808;
	goto yy267;
yy789:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy809;
	goto yy267;
yy790:
	yych = *++YYCURSOR;
	if (yych == 'v') goto yy810;
	goto yy267;
yy791:
	++YYCURSOR;
#line 166 "../src/options/parse_opts.re"
	{ opts.set_case_inverted(true);           goto opt; }
#line 3607 "src/options/parse_opts.cc"
yy792:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy811;
	if (yych == '-') goto yy812;
	goto yy267;
yy793:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy813;
	goto yy267;
yy794:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy814;
	goto yy267;
yy795:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy815;
	goto yy267;
yy796:
	++YYCURSOR;
#line 228 "../src/options/parse_opts.re"
	{ global.set_dump_dfa_tree(true);      goto opt; }
#line 3629 "src/options/parse_opts.cc"
yy797:
	yych = *++YYCURSOR;
	if (yych == 'y') goto yy816;
	goto yy267;
yy798:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy817;
	goto yy267;
yy799:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy818;
	goto yy267;
yy800:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy819;
	goto yy267;
yy801:
	++YYCURSOR;
#line 150 "../src/options/parse_opts.re"
	{ global.set_line_dirs(false);         goto opt; }
#line 3650 "src/options/parse_opts.cc"
yy802:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy820;
	goto yy267;
yy803:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy821;
	goto yy267;
yy804:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy822;
	goto yy267;
yy805:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy823;
	goto yy267;
yy806:
	++YYCURSOR;
#line 223 "../src/options/parse_opts.re"
	{ RET_FAIL(error("option --posix-closure was removed")); }
#line 3671 "src/options/parse_opts.cc"
yy807:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy824;
	goto yy267;
yy808:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy825;
	goto yy267;
yy809:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy826;
	goto yy267;
yy810:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy827;
	goto yy267;
yy811:
	++YYCURSOR;
#line 162 "../src/options/parse_opts.re"
	{ opts.set_computed_gotos(true);          goto opt; }
#line 3692 "src/options/parse_opts.cc"
yy812:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy828;
	goto yy267;
yy813:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy829;
	goto yy267;
yy814:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy830;
	goto yy267;
yy815:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy831;
	goto yy267;
yy816:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy832;
	goto yy267;
yy817:
	++YYCURSOR;
#line 209 "../src/options/parse_opts.re"
	{ NEXT_ARG("--input-encoding",   opt_input_encoding); }
#line 3717 "src/options/parse_opts.cc"
yy818:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy833;
	goto yy267;
yy819:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy834;
	goto yy267;
yy820:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy835;
	goto yy267;
yy821:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy836;
	goto yy267;
yy822:
	++YYCURSOR;
#line 182 "../src/options/parse_opts.re"
	{
        opts.set_captures(true);
        opts.set_captures_posix(true);
        opts.set_captures_array(true);
        goto opt;
    }
#line 3743 "src/options/parse_opts.cc"
yy823:
	++YYCURSOR;
#line 193 "../src/options/parse_opts.re"
	{
        opts.set_captures(true);
        opts.set_captures_posix(true);
        opts.set_captures_array(false);
        goto opt;
    }
#line 3753 "src/options/parse_opts.cc"
yy824:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy837;
	goto yy267;
yy825:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy838;
	goto yy267;
yy826:
	++YYCURSOR;
#line 147 "../src/options/parse_opts.re"
	{ global.set_storable_state(true);     goto opt; }
#line 3766 "src/options/parse_opts.cc"
yy827:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy839;
	goto yy267;
yy828:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy840;
	goto yy267;
yy829:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy841;
	goto yy267;
yy830:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy842;
	goto yy267;
yy831:
	++YYCURSOR;
#line 231 "../src/options/parse_opts.re"
	{ global.set_dump_dfa_tagopt(true);    goto opt; }
#line 3787 "src/options/parse_opts.cc"
yy832:
	++YYCURSOR;
#line 205 "../src/options/parse_opts.re"
	{ NEXT_ARG("--encoding-policy",  opt_encoding_policy); }
#line 3792 "src/options/parse_opts.cc"
yy833:
	++YYCURSOR;
#line 169 "../src/options/parse_opts.re"
	{ opts.set_captures_invert(true);         goto opt; }
#line 3797 "src/options/parse_opts.cc"
yy834:
	++YYCURSOR;
#line 208 "../src/options/parse_opts.re"
	{ NEXT_ARG("--location-format",  opt_location_format); }
#line 3802 "src/options/parse_opts.cc"
yy835:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy843;
	goto yy267;
yy836:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy844;
	goto yy267;
yy837:
	++YYCURSOR;
#line 217 "../src/options/parse_opts.re"
	{ NEXT_ARG("--posix-prectable",  opt_posix_prectable); }
#line 3815 "src/options/parse_opts.cc"
yy838:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy845;
	goto yy267;
yy839:
	++YYCURSOR;
#line 165 "../src/options/parse_opts.re"
	{ opts.set_case_insensitive(true);        goto opt; }
#line 3824 "src/options/parse_opts.cc"
yy840:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy846;
	goto yy267;
yy841:
	++YYCURSOR;
#line 216 "../src/options/parse_opts.re"
	{ NEXT_ARG("--dfa-minimization", opt_minimization); }
#line 3833 "src/options/parse_opts.cc"
yy842:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy847;
	goto yy267;
yy843:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy848;
	goto yy267;
yy844:
	++YYCURSOR;
#line 219 "../src/options/parse_opts.re"
	{ global.set_optimize_tags(false); goto opt; }
#line 3846 "src/options/parse_opts.cc"
yy845:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy849;
	goto yy267;
yy846:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy850;
	goto yy267;
yy847:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy851;
	goto yy267;
yy848:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy852;
	goto yy267;
yy849:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy853;
	goto yy267;
yy850:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy854;
	goto yy267;
yy851:
	++YYCURSOR;
#line 236 "../src/options/parse_opts.re"
	{ global.set_dump_closure_stats(true); goto opt; }
#line 3875 "src/options/parse_opts.cc"
yy852:
	++YYCURSOR;
#line 151 "../src/options/parse_opts.re"
	{ global.set_date(false);              goto opt; }
#line 3880 "src/options/parse_opts.cc"
yy853:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy855;
	goto yy267;
yy854:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy856;
	goto yy267;
yy855:
	++YYCURSOR;
#line 157 "../src/options/parse_opts.re"
	{ global.set_code_model(CodeModel::REC_FUNC);    goto opt; }
#line 3893 "src/options/parse_opts.cc"
yy856:
	yych = *++YYCURSOR;
	if (yych != 'v') goto yy267;
	yych = *++YYCURSOR;
	if (yych != 'e') goto yy267;
	yych = *++YYCURSOR;
	if (yych >= 0x01) goto yy267;
	++YYCURSOR;
#line 163 "../src/options/parse_opts.re"
	{ opts.set_computed_gotos_relative(true); goto opt; }
#line 3904 "src/options/parse_opts.cc"
}
#line 237 "../src/options/parse_opts.re"


opt_lang: 
#line 3910 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	switch (yych) {
		case 'c': goto yy860;
		case 'd': goto yy861;
		case 'g': goto yy862;
		case 'h': goto yy863;
		case 'j': goto yy864;
		case 'n': goto yy865;
		case 'o': goto yy866;
		case 'p': goto yy867;
		case 'r': goto yy868;
		case 's': goto yy869;
		case 'v': goto yy870;
		case 'z': goto yy871;
		default: goto yy858;
	}
yy858:
	++YYCURSOR;
yy859:
#line 240 "../src/options/parse_opts.re"
	{
        ERRARG("--lang",
            "c | d | go | haskell | java | js | ocaml | python | rust | swift | v | zig | none",
            *argv);
    }
#line 3938 "src/options/parse_opts.cc"
yy860:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy872;
	goto yy859;
yy861:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy873;
	goto yy859;
yy862:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy874;
	goto yy859;
yy863:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'a') goto yy876;
	goto yy859;
yy864:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'a') goto yy877;
	if (yych == 's') goto yy878;
	goto yy859;
yy865:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy879;
	goto yy859;
yy866:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'c') goto yy880;
	goto yy859;
yy867:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'y') goto yy881;
	goto yy859;
yy868:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'u') goto yy882;
	goto yy859;
yy869:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'w') goto yy883;
	goto yy859;
yy870:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy884;
	goto yy859;
yy871:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'i') goto yy885;
	goto yy859;
yy872:
	++YYCURSOR;
#line 245 "../src/options/parse_opts.re"
	{ *lang = Lang::C;       goto opt; }
#line 3992 "src/options/parse_opts.cc"
yy873:
	++YYCURSOR;
#line 246 "../src/options/parse_opts.re"
	{ *lang = Lang::D;       goto opt; }
#line 3997 "src/options/parse_opts.cc"
yy874:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy886;
yy875:
	YYCURSOR = YYMARKER;
	goto yy859;
yy876:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy887;
	goto yy875;
yy877:
	yych = *++YYCURSOR;
	if (yych == 'v') goto yy888;
	goto yy875;
yy878:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy889;
	goto yy875;
yy879:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy890;
	goto yy875;
yy880:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy891;
	goto yy875;
yy881:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy892;
	goto yy875;
yy882:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy893;
	goto yy875;
yy883:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy894;
	goto yy875;
yy884:
	++YYCURSOR;
#line 255 "../src/options/parse_opts.re"
	{ *lang = Lang::V;       goto opt; }
#line 4040 "src/options/parse_opts.cc"
yy885:
	yych = *++YYCURSOR;
	if (yych == 'g') goto yy895;
	goto yy875;
yy886:
	++YYCURSOR;
#line 247 "../src/options/parse_opts.re"
	{ *lang = Lang::GO;      goto opt; }
#line 4049 "src/options/parse_opts.cc"
yy887:
	yych = *++YYCURSOR;
	if (yych == 'k') goto yy896;
	goto yy875;
yy888:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy897;
	goto yy875;
yy889:
	++YYCURSOR;
#line 250 "../src/options/parse_opts.re"
	{ *lang = Lang::JS;      goto opt; }
#line 4062 "src/options/parse_opts.cc"
yy890:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy898;
	goto yy875;
yy891:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy899;
	goto yy875;
yy892:
	yych = *++YYCURSOR;
	if (yych == 'h') goto yy900;
	goto yy875;
yy893:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy901;
	goto yy875;
yy894:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy902;
	goto yy875;
yy895:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy903;
	goto yy875;
yy896:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy904;
	goto yy875;
yy897:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy905;
	goto yy875;
yy898:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy906;
	goto yy875;
yy899:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy907;
	goto yy875;
yy900:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy908;
	goto yy875;
yy901:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy909;
	goto yy875;
yy902:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy910;
	goto yy875;
yy903:
	++YYCURSOR;
#line 256 "../src/options/parse_opts.re"
	{ *lang = Lang::ZIG;     goto opt; }
#line 4119 "src/options/parse_opts.cc"
yy904:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy911;
	goto yy875;
yy905:
	++YYCURSOR;
#line 249 "../src/options/parse_opts.re"
	{ *lang = Lang::JAVA;    goto opt; }
#line 4128 "src/options/parse_opts.cc"
yy906:
	++YYCURSOR;
#line 257 "../src/options/parse_opts.re"
	{ *lang = Lang::NONE;    goto opt; }
#line 4133 "src/options/parse_opts.cc"
yy907:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy912;
	goto yy875;
yy908:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy913;
	goto yy875;
yy909:
	++YYCURSOR;
#line 253 "../src/options/parse_opts.re"
	{ *lang = Lang::RUST;    goto opt; }
#line 4146 "src/options/parse_opts.cc"
yy910:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy914;
	goto yy875;
yy911:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy915;
	goto yy875;
yy912:
	++YYCURSOR;
#line 251 "../src/options/parse_opts.re"
	{ *lang = Lang::OCAML;   goto opt; }
#line 4159 "src/options/parse_opts.cc"
yy913:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy916;
	goto yy875;
yy914:
	++YYCURSOR;
#line 254 "../src/options/parse_opts.re"
	{ *lang = Lang::SWIFT;   goto opt; }
#line 4168 "src/options/parse_opts.cc"
yy915:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy917;
	goto yy875;
yy916:
	++YYCURSOR;
#line 252 "../src/options/parse_opts.re"
	{ *lang = Lang::PYTHON;  goto opt; }
#line 4177 "src/options/parse_opts.cc"
yy917:
	++YYCURSOR;
#line 248 "../src/options/parse_opts.re"
	{ *lang = Lang::HASKELL; goto opt; }
#line 4182 "src/options/parse_opts.cc"
}
#line 258 "../src/options/parse_opts.re"


opt_output: 
#line 4188 "src/options/parse_opts.cc"
{
	char yych;
	static const unsigned char yybm[256] = {
		  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, 128, 128,
		128, 128, 128, 128, 128, 128, 128, 128
	};
	yych = *YYCURSOR;
	if (yych <= 0x00) goto yy919;
	if (yych != '-') goto yy920;
yy919:
	++YYCURSOR;
#line 261 "../src/options/parse_opts.re"
	{ ERRARG("-o, --output", "filename", *argv); }
#line 4232 "src/options/parse_opts.cc"
yy920:
	yych = *++YYCURSOR;
	if (yybm[0+yych] & 128) goto yy920;
	++YYCURSOR;
#line 262 "../src/options/parse_opts.re"
	{ global.set_output_file(*argv); goto opt; }
#line 4239 "src/options/parse_opts.cc"
}
#line 263 "../src/options/parse_opts.re"


opt_header: 
#line 4245 "src/options/parse_opts.cc"
{
	char yych;
	static const unsigned char yybm[256] = {
		  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, 128, 128,
		128, 128, 128, 128, 128, 128, 128, 128
	};
	yych = *YYCURSOR;
	if (yych <= 0x00) goto yy922;
	if (yych != '-') goto yy923;
yy922:
	++YYCURSOR;
#line 266 "../src/options/parse_opts.re"
	{ ERRARG("-t, --header, --type-header", "filename", *argv); }
#line 4289 "src/options/parse_opts.cc"
yy923:
	yych = *++YYCURSOR;
	if (yybm[0+yych] & 128) goto yy923;
	++YYCURSOR;
#line 267 "../src/options/parse_opts.re"
	{ opts.set_header_file(*argv); goto opt; }
#line 4296 "src/options/parse_opts.cc"
}
#line 268 "../src/options/parse_opts.re"


opt_depfile: 
#line 4302 "src/options/parse_opts.cc"
{
	char yych;
	static const unsigned char yybm[256] = {
		  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, 128, 128,
		128, 128, 128, 128, 128, 128, 128, 128
	};
	yych = *YYCURSOR;
	if (yych <= 0x00) goto yy925;
	if (yych != '-') goto yy926;
yy925:
	++YYCURSOR;
#line 271 "../src/options/parse_opts.re"
	{ ERRARG("--depfile", "filename", *argv); }
#line 4346 "src/options/parse_opts.cc"
yy926:
	yych = *++YYCURSOR;
	if (yybm[0+yych] & 128) goto yy926;
	++YYCURSOR;
#line 272 "../src/options/parse_opts.re"
	{ global.set_dep_file(*argv); goto opt; }
#line 4353 "src/options/parse_opts.cc"
}
#line 273 "../src/options/parse_opts.re"


opt_syntax: 
#line 4359 "src/options/parse_opts.cc"
{
	char yych;
	static const unsigned char yybm[256] = {
		  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, 128, 128,
		128, 128, 128, 128, 128, 128, 128, 128
	};
	yych = *YYCURSOR;
	if (yych <= 0x00) goto yy928;
	if (yych != '-') goto yy929;
yy928:
	++YYCURSOR;
#line 276 "../src/options/parse_opts.re"
	{ ERRARG("--syntax", "filename", *argv); }
#line 4403 "src/options/parse_opts.cc"
yy929:
	yych = *++YYCURSOR;
	if (yybm[0+yych] & 128) goto yy929;
	++YYCURSOR;
#line 277 "../src/options/parse_opts.re"
	{ global.set_syntax_file(*argv); goto opt; }
#line 4410 "src/options/parse_opts.cc"
}
#line 278 "../src/options/parse_opts.re"


opt_incpath: 
#line 4416 "src/options/parse_opts.cc"
{
	char yych;
	static const unsigned char yybm[256] = {
		  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, 128, 128,
		128, 128, 128, 128, 128, 128, 128, 128
	};
	yych = *YYCURSOR;
	if (yych <= 0x00) goto yy931;
	if (yych != '-') goto yy932;
yy931:
	++YYCURSOR;
#line 281 "../src/options/parse_opts.re"
	{ ERRARG("-I", "filename", *argv); }
#line 4460 "src/options/parse_opts.cc"
yy932:
	yych = *++YYCURSOR;
	if (yybm[0+yych] & 128) goto yy932;
	++YYCURSOR;
#line 283 "../src/options/parse_opts.re"
	{ const_cast<std::vector<std::string>&>(global.include_paths).push_back(*argv); goto opt; }
#line 4467 "src/options/parse_opts.cc"
}
#line 284 "../src/options/parse_opts.re"


opt_encoding_policy: 
#line 4473 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	if (yych <= 'h') {
		if (yych == 'f') goto yy935;
	} else {
		if (yych <= 'i') goto yy936;
		if (yych == 's') goto yy937;
	}
	++YYCURSOR;
yy934:
#line 287 "../src/options/parse_opts.re"
	{ ERRARG("--encoding-policy", "ignore | substitute | fail", *argv); }
#line 4487 "src/options/parse_opts.cc"
yy935:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'a') goto yy938;
	goto yy934;
yy936:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'g') goto yy940;
	goto yy934;
yy937:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'u') goto yy941;
	goto yy934;
yy938:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy942;
yy939:
	YYCURSOR = YYMARKER;
	goto yy934;
yy940:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy943;
	goto yy939;
yy941:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy944;
	goto yy939;
yy942:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy945;
	goto yy939;
yy943:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy946;
	goto yy939;
yy944:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy947;
	goto yy939;
yy945:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy948;
	goto yy939;
yy946:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy949;
	goto yy939;
yy947:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy950;
	goto yy939;
yy948:
	++YYCURSOR;
#line 290 "../src/options/parse_opts.re"
	{ opts.set_encoding_policy(Enc::Policy::FAIL);       goto opt; }
#line 4542 "src/options/parse_opts.cc"
yy949:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy951;
	goto yy939;
yy950:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy952;
	goto yy939;
yy951:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy953;
	goto yy939;
yy952:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy954;
	goto yy939;
yy953:
	++YYCURSOR;
#line 288 "../src/options/parse_opts.re"
	{ opts.set_encoding_policy(Enc::Policy::IGNORE);     goto opt; }
#line 4563 "src/options/parse_opts.cc"
yy954:
	yych = *++YYCURSOR;
	if (yych != 'u') goto yy939;
	yych = *++YYCURSOR;
	if (yych != 't') goto yy939;
	yych = *++YYCURSOR;
	if (yych != 'e') goto yy939;
	yych = *++YYCURSOR;
	if (yych >= 0x01) goto yy939;
	++YYCURSOR;
#line 289 "../src/options/parse_opts.re"
	{ opts.set_encoding_policy(Enc::Policy::SUBSTITUTE); goto opt; }
#line 4576 "src/options/parse_opts.cc"
}
#line 291 "../src/options/parse_opts.re"


opt_input: 
#line 4582 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	switch (yych) {
		case 'c': goto yy958;
		case 'd': goto yy959;
		case 'g': goto yy960;
		case 'r': goto yy961;
		case 's': goto yy962;
		default: goto yy956;
	}
yy956:
	++YYCURSOR;
yy957:
#line 294 "../src/options/parse_opts.re"
	{ ERRARG("--api, --input", "simple | generic | record", *argv); }
#line 4599 "src/options/parse_opts.cc"
yy958:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'u') goto yy963;
	goto yy957;
yy959:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy965;
	goto yy957;
yy960:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy966;
	goto yy957;
yy961:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'e') goto yy967;
	goto yy957;
yy962:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'i') goto yy968;
	goto yy957;
yy963:
	yych = *++YYCURSOR;
	if (yych == 's') goto yy969;
yy964:
	YYCURSOR = YYMARKER;
	goto yy957;
yy965:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy970;
	goto yy964;
yy966:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy971;
	goto yy964;
yy967:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy972;
	goto yy964;
yy968:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy973;
	goto yy964;
yy969:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy974;
	goto yy964;
yy970:
	yych = *++YYCURSOR;
	if (yych == 'a') goto yy975;
	goto yy964;
yy971:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy976;
	goto yy964;
yy972:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy977;
	goto yy964;
yy973:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy978;
	goto yy964;
yy974:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy979;
	goto yy964;
yy975:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy980;
	goto yy964;
yy976:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy981;
	goto yy964;
yy977:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy982;
	goto yy964;
yy978:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy983;
	goto yy964;
yy979:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy984;
	goto yy964;
yy980:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy985;
	goto yy964;
yy981:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy986;
	goto yy964;
yy982:
	yych = *++YYCURSOR;
	if (yych == 'd') goto yy987;
	goto yy964;
yy983:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy988;
	goto yy964;
yy984:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy989;
	goto yy964;
yy985:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy988;
	goto yy964;
yy986:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy984;
	goto yy964;
yy987:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy990;
	goto yy964;
yy988:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy991;
	goto yy964;
yy989:
	++YYCURSOR;
#line 296 "../src/options/parse_opts.re"
	{ opts.set_api(Api::GENERIC); goto opt; }
#line 4726 "src/options/parse_opts.cc"
yy990:
	++YYCURSOR;
#line 297 "../src/options/parse_opts.re"
	{ opts.set_api(Api::RECORD);  goto opt; }
#line 4731 "src/options/parse_opts.cc"
yy991:
	++YYCURSOR;
#line 295 "../src/options/parse_opts.re"
	{ opts.set_api(Api::SIMPLE);  goto opt; }
#line 4736 "src/options/parse_opts.cc"
}
#line 298 "../src/options/parse_opts.re"


opt_empty_class: 
#line 4742 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	if (yych == 'e') goto yy994;
	if (yych == 'm') goto yy995;
	++YYCURSOR;
yy993:
#line 301 "../src/options/parse_opts.re"
	{ ERRARG("--empty-class", "match-empty | match-none | error", *argv); }
#line 4752 "src/options/parse_opts.cc"
yy994:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'r') goto yy996;
	goto yy993;
yy995:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'a') goto yy998;
	goto yy993;
yy996:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy999;
yy997:
	YYCURSOR = YYMARKER;
	goto yy993;
yy998:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy1000;
	goto yy997;
yy999:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy1001;
	goto yy997;
yy1000:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy1002;
	goto yy997;
yy1001:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy1003;
	goto yy997;
yy1002:
	yych = *++YYCURSOR;
	if (yych == 'h') goto yy1004;
	goto yy997;
yy1003:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1005;
	goto yy997;
yy1004:
	yych = *++YYCURSOR;
	if (yych == '-') goto yy1006;
	goto yy997;
yy1005:
	++YYCURSOR;
#line 304 "../src/options/parse_opts.re"
	{ opts.set_empty_class(EmptyClass::ERROR);       goto opt; }
#line 4799 "src/options/parse_opts.cc"
yy1006:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy1007;
	if (yych == 'n') goto yy1008;
	goto yy997;
yy1007:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy1009;
	goto yy997;
yy1008:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy1010;
	goto yy997;
yy1009:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy1011;
	goto yy997;
yy1010:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy1012;
	goto yy997;
yy1011:
	yych = *++YYCURSOR;
	if (yych == 't') goto yy1013;
	goto yy997;
yy1012:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy1014;
	goto yy997;
yy1013:
	yych = *++YYCURSOR;
	if (yych == 'y') goto yy1015;
	goto yy997;
yy1014:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1016;
	goto yy997;
yy1015:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1017;
	goto yy997;
yy1016:
	++YYCURSOR;
#line 303 "../src/options/parse_opts.re"
	{ opts.set_empty_class(EmptyClass::MATCH_NONE);  goto opt; }
#line 4845 "src/options/parse_opts.cc"
yy1017:
	++YYCURSOR;
#line 302 "../src/options/parse_opts.re"
	{ opts.set_empty_class(EmptyClass::MATCH_EMPTY); goto opt; }
#line 4850 "src/options/parse_opts.cc"
}
#line 305 "../src/options/parse_opts.re"


opt_location_format: 
#line 4856 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	if (yych == 'g') goto yy1020;
	if (yych == 'm') goto yy1021;
	++YYCURSOR;
yy1019:
#line 308 "../src/options/parse_opts.re"
	{ ERRARG("--location-format", "gnu | msvc", *argv); }
#line 4866 "src/options/parse_opts.cc"
yy1020:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'n') goto yy1022;
	goto yy1019;
yy1021:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 's') goto yy1024;
	goto yy1019;
yy1022:
	yych = *++YYCURSOR;
	if (yych == 'u') goto yy1025;
yy1023:
	YYCURSOR = YYMARKER;
	goto yy1019;
yy1024:
	yych = *++YYCURSOR;
	if (yych == 'v') goto yy1026;
	goto yy1023;
yy1025:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1027;
	goto yy1023;
yy1026:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy1028;
	goto yy1023;
yy1027:
	++YYCURSOR;
#line 309 "../src/options/parse_opts.re"
	{ msg.locfmt = LOCFMT_GNU;  goto opt; }
#line 4897 "src/options/parse_opts.cc"
yy1028:
	yych = *++YYCURSOR;
	if (yych >= 0x01) goto yy1023;
	++YYCURSOR;
#line 310 "../src/options/parse_opts.re"
	{ msg.locfmt = LOCFMT_MSVC; goto opt; }
#line 4904 "src/options/parse_opts.cc"
}
#line 311 "../src/options/parse_opts.re"


opt_input_encoding: 
#line 4910 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	if (yych == 'a') goto yy1031;
	if (yych == 'u') goto yy1032;
	++YYCURSOR;
yy1030:
#line 314 "../src/options/parse_opts.re"
	{ ERRARG("--input-encoding", "ascii | utf8 ", *argv); }
#line 4920 "src/options/parse_opts.cc"
yy1031:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 's') goto yy1033;
	goto yy1030;
yy1032:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 't') goto yy1035;
	goto yy1030;
yy1033:
	yych = *++YYCURSOR;
	if (yych == 'c') goto yy1036;
yy1034:
	YYCURSOR = YYMARKER;
	goto yy1030;
yy1035:
	yych = *++YYCURSOR;
	if (yych == 'f') goto yy1037;
	goto yy1034;
yy1036:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy1038;
	goto yy1034;
yy1037:
	yych = *++YYCURSOR;
	if (yych == '8') goto yy1039;
	goto yy1034;
yy1038:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy1040;
	goto yy1034;
yy1039:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1041;
	goto yy1034;
yy1040:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1042;
	goto yy1034;
yy1041:
	++YYCURSOR;
#line 316 "../src/options/parse_opts.re"
	{ global.set_input_encoding(Enc::Type::UTF8);  goto opt; }
#line 4963 "src/options/parse_opts.cc"
yy1042:
	++YYCURSOR;
#line 315 "../src/options/parse_opts.re"
	{ global.set_input_encoding(Enc::Type::ASCII); goto opt; }
#line 4968 "src/options/parse_opts.cc"
}
#line 317 "../src/options/parse_opts.re"


opt_minimization: 
#line 4974 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	if (yych == 'm') goto yy1045;
	if (yych == 't') goto yy1046;
	++YYCURSOR;
yy1044:
#line 320 "../src/options/parse_opts.re"
	{ ERRARG("--dfa-minimization", "table | moore", *argv); }
#line 4984 "src/options/parse_opts.cc"
yy1045:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy1047;
	goto yy1044;
yy1046:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'a') goto yy1049;
	goto yy1044;
yy1047:
	yych = *++YYCURSOR;
	if (yych == 'o') goto yy1050;
yy1048:
	YYCURSOR = YYMARKER;
	goto yy1044;
yy1049:
	yych = *++YYCURSOR;
	if (yych == 'b') goto yy1051;
	goto yy1048;
yy1050:
	yych = *++YYCURSOR;
	if (yych == 'r') goto yy1052;
	goto yy1048;
yy1051:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy1053;
	goto yy1048;
yy1052:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy1054;
	goto yy1048;
yy1053:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy1055;
	goto yy1048;
yy1054:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1056;
	goto yy1048;
yy1055:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1057;
	goto yy1048;
yy1056:
	++YYCURSOR;
#line 322 "../src/options/parse_opts.re"
	{ global.set_minimization(Minimization::MOORE); goto opt; }
#line 5031 "src/options/parse_opts.cc"
yy1057:
	++YYCURSOR;
#line 321 "../src/options/parse_opts.re"
	{ global.set_minimization(Minimization::TABLE); goto opt; }
#line 5036 "src/options/parse_opts.cc"
}
#line 323 "../src/options/parse_opts.re"


opt_posix_prectable: 
#line 5042 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	if (yych == 'c') goto yy1060;
	if (yych == 'n') goto yy1061;
	++YYCURSOR;
yy1059:
#line 326 "../src/options/parse_opts.re"
	{ ERRARG("--posix-prectable", "naive | complex", *argv); }
#line 5052 "src/options/parse_opts.cc"
yy1060:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy1062;
	goto yy1059;
yy1061:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'a') goto yy1064;
	goto yy1059;
yy1062:
	yych = *++YYCURSOR;
	if (yych == 'm') goto yy1065;
yy1063:
	YYCURSOR = YYMARKER;
	goto yy1059;
yy1064:
	yych = *++YYCURSOR;
	if (yych == 'i') goto yy1066;
	goto yy1063;
yy1065:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy1067;
	goto yy1063;
yy1066:
	yych = *++YYCURSOR;
	if (yych == 'v') goto yy1068;
	goto yy1063;
yy1067:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy1069;
	goto yy1063;
yy1068:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy1070;
	goto yy1063;
yy1069:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy1071;
	goto yy1063;
yy1070:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1072;
	goto yy1063;
yy1071:
	yych = *++YYCURSOR;
	if (yych == 'x') goto yy1073;
	goto yy1063;
yy1072:
	++YYCURSOR;
#line 327 "../src/options/parse_opts.re"
	{ global.set_posix_prectable(PosixPrectable::NAIVE);   goto opt; }
#line 5103 "src/options/parse_opts.cc"
yy1073:
	yych = *++YYCURSOR;
	if (yych >= 0x01) goto yy1063;
	++YYCURSOR;
#line 328 "../src/options/parse_opts.re"
	{ global.set_posix_prectable(PosixPrectable::COMPLEX); goto opt; }
#line 5110 "src/options/parse_opts.cc"
}
#line 329 "../src/options/parse_opts.re"


opt_fixed_tags: 
#line 5116 "src/options/parse_opts.cc"
{
	char yych;
	yych = *YYCURSOR;
	if (yych <= 'm') {
		if (yych == 'a') goto yy1076;
	} else {
		if (yych <= 'n') goto yy1077;
		if (yych == 't') goto yy1078;
	}
	++YYCURSOR;
yy1075:
#line 332 "../src/options/parse_opts.re"
	{ ERRARG("--fixed-tags", "none | toplevel | all", *argv); }
#line 5130 "src/options/parse_opts.cc"
yy1076:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'l') goto yy1079;
	goto yy1075;
yy1077:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy1081;
	goto yy1075;
yy1078:
	yych = *(YYMARKER = ++YYCURSOR);
	if (yych == 'o') goto yy1082;
	goto yy1075;
yy1079:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy1083;
yy1080:
	YYCURSOR = YYMARKER;
	goto yy1075;
yy1081:
	yych = *++YYCURSOR;
	if (yych == 'n') goto yy1084;
	goto yy1080;
yy1082:
	yych = *++YYCURSOR;
	if (yych == 'p') goto yy1085;
	goto yy1080;
yy1083:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1086;
	goto yy1080;
yy1084:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy1087;
	goto yy1080;
yy1085:
	yych = *++YYCURSOR;
	if (yych == 'l') goto yy1088;
	goto yy1080;
yy1086:
	++YYCURSOR;
#line 335 "../src/options/parse_opts.re"
	{ global.set_fixed_tags(FixedTags::ALL);      goto opt; }
#line 5173 "src/options/parse_opts.cc"
yy1087:
	yych = *++YYCURSOR;
	if (yych <= 0x00) goto yy1089;
	goto yy1080;
yy1088:
	yych = *++YYCURSOR;
	if (yych == 'e') goto yy1090;
	goto yy1080;
yy1089:
	++YYCURSOR;
#line 333 "../src/options/parse_opts.re"
	{ global.set_fixed_tags(FixedTags::NONE);     goto opt; }
#line 5186 "src/options/parse_opts.cc"
yy1090:
	yych = *++YYCURSOR;
	if (yych != 'v') goto yy1080;
	yych = *++YYCURSOR;
	if (yych != 'e') goto yy1080;
	yych = *++YYCURSOR;
	if (yych != 'l') goto yy1080;
	yych = *++YYCURSOR;
	if (yych >= 0x01) goto yy1080;
	++YYCURSOR;
#line 334 "../src/options/parse_opts.re"
	{ global.set_fixed_tags(FixedTags::TOPLEVEL); goto opt; }
#line 5199 "src/options/parse_opts.cc"
}
#line 336 "../src/options/parse_opts.re"


end:
    if (global.source_file.empty()) {
        RET_FAIL(error("no source file"));
    }

    // Append directory separator '/' to all include paths that don't have it.
    for (std::string& p : const_cast<std::vector<std::string>&>(global.include_paths)) {
        const char c = p.empty() ? 0 : *p.rbegin();
        if (c != '/' && c != '\\') {
            p.push_back('/');
        }
    }

    return Ret::OK;
}

Ret Opt::parse(char** argv, Input& input, Lang lang) {
    CHECK_RET(parse_opts(*this, const_cast<conopt_t&>(glob), argv, msg, &lang));

    // Load syntax file (it must have file index 0).
    CHECK_RET(input.load_syntax_config(*this, lang));

    // Set option defaults.
    CHECK_RET(fix_global_and_defaults());

    return Ret::OK;
}

#undef NEXT_ARG
#undef ERRARG

} // namespace re2c
