if (fFlag && !bWroteGetState)
{
vUsedLabels.insert(start_label);
- o << indent(ind) << "switch(" << mapCodeName["YYGETSTATE"];
- if (!bUseYYGetStateNaked)
- {
- o << "()";
- }
- o << ") {\n";
- if (bUseStateAbort)
+ if (gFlag)
{
- o << indent(ind) << "default: abort();\n";
- o << indent(ind) << "case -1: goto " << labelPrefix << start_label << ";\n";
+ o << indent(ind++) << "static void *" << mapCodeName["yystable"] << "[" << "] = {\n";
+
+ for (size_t i=0; i<last_fill_index; ++i)
+ {
+ o << indent(ind) << "&&" << mapCodeName["yyFillLabel"] << i << ",\n";
+ }
+
+ o << indent(--ind) << "};\n";
+ o << "\n";
+
+ o << indent(ind) << "if(" << mapCodeName["YYGETSTATE"];
+ if (!bUseYYGetStateNaked)
+ {
+ o << "()";
+ }
+ if (bUseStateAbort)
+ {
+ o << " == -1) {";
+ ++ind;
+ }
+ else
+ {
+ o << " < 0)";
+ }
+ o << " goto " << labelPrefix << start_label << ";\n";
+ if (bUseStateAbort)
+ {
+ o << indent(--ind) << "} else if (" << mapCodeName["YYGETSTATE"];
+ if (!bUseYYGetStateNaked)
+ {
+ o << "()";
+ }
+ o << " < -1) {\n";
+ o << indent(++ind) << "abort();\n";
+ o << indent(--ind) << "}\n";
+ }
+
+ o << indent(ind) << "goto *" << mapCodeName["yystable"] << "[" << mapCodeName["YYGETSTATE"];
+ if (!bUseYYGetStateNaked)
+ {
+ o << "()";
+ }
+ o << "];\n";
}
else
{
- o << indent(ind) << "default: goto " << labelPrefix << start_label << ";\n";
- }
-
- for (size_t i=0; i<last_fill_index; ++i)
- {
- o << indent(ind) << "case " << i << ": goto " << mapCodeName["yyFillLabel"] << i << ";\n";
+ o << indent(ind) << "switch(" << mapCodeName["YYGETSTATE"];
+ if (!bUseYYGetStateNaked)
+ {
+ o << "()";
+ }
+ o << ") {\n";
+ if (bUseStateAbort)
+ {
+ o << indent(ind) << "default: abort();\n";
+ o << indent(ind) << "case -1: goto " << labelPrefix << start_label << ";\n";
+ }
+ else
+ {
+ o << indent(ind) << "default: goto " << labelPrefix << start_label << ";\n";
+ }
+
+ for (size_t i=0; i<last_fill_index; ++i)
+ {
+ o << indent(ind) << "case " << i << ": goto " << mapCodeName["yyFillLabel"] << i << ";\n";
+ }
+
+ o << indent(ind) << "}\n";
}
-
- o << indent(ind) << "}\n";
if (bUseStateNext)
{
o << mapCodeName["yyNext"] << ":\n";
mapVariableKeys.insert("variable:yybm");
mapVariableKeys.insert("variable:yych");
mapVariableKeys.insert("variable:yyctable");
+ mapVariableKeys.insert("variable:yystable");
mapVariableKeys.insert("variable:yytarget");
mapDefineKeys.insert("define:YYCONDTYPE");
mapDefineKeys.insert("define:YYCTXMARKER");
{
s->tok = s->cur;
- switch(s->state) {
- default: goto yy0;
- case 0: goto yyFillLabel0;
- case 1: goto yyFillLabel1;
- case 2: goto yyFillLabel2;
- case 3: goto yyFillLabel3;
- }
+ static void *yystable[] = {
+ &&yyFillLabel0,
+ &&yyFillLabel1,
+ &&yyFillLabel2,
+ &&yyFillLabel3,
+ };
+
+ if(s->state < 0) goto yy0;
+ goto *yystable[s->state];
for(;;)
{
s->tok = s->cur;
if(s->yych == '?') goto yy26;
yy10:
{
- fputc(*s->tok, stdout);
+ fputc(s->cur[-1], stdout);
continue;
}
yy11:
++s->cur;
s->cond = EStateString;
{
- fputc(*s->tok, stdout);
+ fputc(s->cur[-1], stdout);
continue;
}
yy15:
if((s->lim - s->cur) < 5) if(fill(s, 5) == ~0) break;
yyFillLabel2:
s->yych = *s->cur;
- if(s->yych <= '>') {
- if(s->yych == 0x0A) goto yy50;
- goto yy52;
- } else {
- if(s->yych <= '?') goto yy47;
- if(s->yych == '\\') goto yy49;
- goto yy52;
+ {
+ static void *yytarget[256] = {
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy51, &&yy53, &&yy53, &&yy50, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy47,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy49, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53,
+ &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53, &&yy53
+ };
+ goto *yytarget[s->yych];
}
yy47:
s->yych = *(s->tok = ++s->cur);
- if(s->yych == '?') goto yy57;
+ if(s->yych == '?') goto yy60;
yy48:
{
goto yyc_Skiptoeol;
}
yy49:
s->yych = *(s->tok = ++s->cur);
- if(s->yych == 0x0A) goto yy55;
- if(s->yych == 0x0D) goto yy53;
+ if(s->yych == 0x0A) goto yy58;
+ if(s->yych == 0x0D) goto yy56;
goto yy48;
yy50:
+ s->yych = *++s->cur;
+ if(s->yych == 0x0A) goto yy54;
+ goto yy48;
+yy51:
++s->cur;
s->cond = EStateNormal;
{
+ fputc('\n', stdout);
continue;
}
-yy52:
- s->yych = *++s->cur;
- goto yy48;
yy53:
s->yych = *++s->cur;
- if(s->yych == 0x0A) goto yy55;
+ goto yy48;
yy54:
+ ++s->cur;
+ s->cond = EStateNormal;
+ {
+ fputc('\r', stdout);
+ fputc('\n', stdout);
+ continue;
+ }
+yy56:
+ s->yych = *++s->cur;
+ if(s->yych == 0x0A) goto yy58;
+yy57:
s->cur = s->tok;
goto yy48;
-yy55:
+yy58:
++s->cur;
{
goto yyc_Skiptoeol;
}
-yy57:
+yy60:
s->yych = *++s->cur;
- if(s->yych != '/') goto yy54;
+ if(s->yych != '/') goto yy57;
s->yych = *++s->cur;
- if(s->yych == 0x0A) goto yy60;
- if(s->yych != 0x0D) goto yy54;
+ if(s->yych == 0x0A) goto yy63;
+ if(s->yych != 0x0D) goto yy57;
s->yych = *++s->cur;
- if(s->yych != 0x0A) goto yy54;
-yy60:
+ if(s->yych != 0x0A) goto yy57;
+yy63:
++s->cur;
{
goto yyc_Skiptoeol;
if((s->lim - s->cur) < 2) if(fill(s, 2) == ~0) break;
yyFillLabel3:
s->yych = *s->cur;
- if(s->yych == '"') goto yy66;
- if(s->yych != '\\') goto yy68;
+ if(s->yych == '"') goto yy69;
+ if(s->yych != '\\') goto yy71;
++s->cur;
- if((s->yych = *s->cur) != 0x0A) goto yy69;
-yy65:
+ if((s->yych = *s->cur) != 0x0A) goto yy72;
+yy68:
{
- fputc(*s->tok, stdout);
+ fputc(s->cur[-1], stdout);
continue;
}
-yy66:
+yy69:
++s->cur;
s->cond = EStateNormal;
{
- fputc(*s->tok, stdout);
+ fputc(s->cur[-1], stdout);
continue;
}
-yy68:
+yy71:
s->yych = *++s->cur;
- goto yy65;
-yy69:
+ goto yy68;
+yy72:
++s->cur;
{
- fputl((const char*)s->tok, 2, stdout);
+ fputl((const char*)s->cur-2, 2, stdout);
continue;
}
}