Cases::Cases (const Span * span, uint span_size)
: def (span[span_size - 1].to)
- , cases (new Case[span_size - 1])
+ , cases (new Case[span_size])
, cases_size (0)
{
- for (uint i = 0, lb = 0; i < span_size - 1; ++ i)
+ for (uint i = 0, lb = 0; i < span_size; ++ i)
{
- if (span[i].to != def)
- {
- add (lb, span[i].ub, span[i].to);
- }
+ add (lb, span[i].ub, span[i].to);
lb = span[i].ub;
}
}
return cases_size;
}
-State * Cases::default_case () const
+State * Cases::default_state () const
{
return def;
}
Cases (const Span * s, uint n);
~Cases ();
uint size () const;
- State * default_case () const;
+ State * default_state () const;
const Case & operator [] (uint i) const;
};
doLinear(o, ind, span, nSpans, from, next, readCh, mask);
}
-static void printDotCharInterval(OutputFile & o, uint lastPrintableChar, uint chr, const State *from, const State *to, bool multipleIntervals)
+static void genCases (OutputFile & o, uint ind, const std::vector<std::pair<uint, uint> > & ranges, uint mask)
{
- o << from->label << " -> " << to->label;
- o << " [label=";
-
- if (lastPrintableChar != 0)
- {
- --chr; // we are already one char past the end
-
- // make an interval (e.g. [A-Z])
- if (lastPrintableChar != chr)
- {
- o << "\"[" << (char)lastPrintableChar << "-" << (char)chr << "]\"";
-
- if (multipleIntervals)
- {
- o << "]\n";
- o << from->label << " -> " << to->label;
- o << " [label=";
- o.write_char_hex (++chr);
- }
- }
- else
- {
- o.write_char_hex (chr);
- }
- }
- else
- {
- o.write_char_hex (chr);
- }
-
- o << "]";
-}
-
-static void genCasesD(OutputFile & o, uint lb, Span *s, bool &newLine, const State *from, const State *to)
-{
- uint lastPrintableChar = 0;
-
- if (!newLine)
- {
- o << "\n";
- }
- newLine = true;
- if (lb < s->ub)
- {
- for (;;)
- {
- if ((lb >= 'A' && lb <= 'Z') || (lb >= 'a' && lb <= 'z') || (lb >= '0' && lb <= '9'))
- {
- if (lastPrintableChar == 0)
- {
- lastPrintableChar = lb;
- }
-
- if (++lb == s->ub)
- {
- break;
- }
- continue;
- }
-
- printDotCharInterval(o, lastPrintableChar, lb, from, to, true);
- lastPrintableChar = 0;
- newLine = false;
-
- if (++lb == s->ub)
- {
- break;
- }
-
- o << "\n";
- newLine = true;
- }
- }
-
- if (lastPrintableChar != 0)
- {
- printDotCharInterval(o, lastPrintableChar, lb, from, to, false);
-
- o << "\n";
- newLine = true;
- }
-}
-
-static bool genCases (OutputFile & o, uint ind, const std::vector<std::pair<uint, uint> > & ranges, uint mask)
-{
- bool used = false;
-
for (uint i = 0; i < ranges.size (); ++i)
{
for (uint b = ranges[i].first; b < ranges[i].second; ++b)
if (isprint(c))
o << " /* " << std::string(1, c) << " */";
}
- used = true;
}
bool last_case = i == ranges.size () - 1 && b == ranges[i].second - 1;
if (!last_case)
}
}
}
-
- return used;
}
void Go::genSwitchD (OutputFile & o, const State *from) const
{
- bool newLine = true;
-
- if (nSpans == 0)
- {
- return;
- }
- else if (nSpans == 1)
+ if (nSpans == 1)
{
o << from->label << " -> " << span[0].to->label << "\n";
}
- else
+ else if (nSpans > 1)
{
- State *def = span[nSpans - 1].to;
- Span **sP = new Span * [nSpans - 1], **r, **s, **t;
-
- t = &sP[0];
-
- for (uint i = 0; i < nSpans; ++i)
- {
- if (span[i].to != def)
- {
- *(t++) = &span[i];
- }
- }
-
- while (t != &sP[0])
+ Cases cases (span, nSpans);
+ for (uint i = 0; i < cases.size (); ++i)
{
- r = s = &sP[0];
-
- const State *to = (*s)->to;
-
- if (*s == &span[0])
- {
- genCasesD(o, 0, *s, newLine, from, to);
- }
- else
+ o << from->label << " -> " << cases[i].to->label << " [label=\"";
+ for (uint j = 0; j < cases[i].ranges.size (); ++j)
{
- genCasesD(o, (*s)[ -1].ub, *s, newLine, from, to);
- }
-
- while (++s < t)
- {
- if ((*s)->to == to)
- {
- genCasesD(o, (*s)[ -1].ub, *s, newLine, from, to);
- }
- else
- {
- *(r++) = *s;
- }
+ o.write_range (cases[i].ranges[j].first, cases[i].ranges[j].second);
}
- t = r;
+ o << "\"]\n";
}
-
- if (!newLine)
- {
- o << "\n";
- newLine = true;
- }
-
- o << from->label << " -> " << def->label;
- o << " [label=default]\n" ;
-
- delete [] sP;
}
}
for (uint i = 0; i < cases.size (); ++i)
{
- genCases (o, ind, cases[i].ranges, mask);
- genGoTo(o, 1, from, cases[i].to, readCh);
+ if (cases[i].to != cases.default_state ())
+ {
+ genCases (o, ind, cases[i].ranges, mask);
+ genGoTo(o, 1, from, cases[i].to, readCh);
+ }
}
o << indent(ind) << "default:";
- genGoTo(o, 1, from, cases.default_case (), readCh);
+ genGoTo(o, 1, from, cases.default_state (), readCh);
o << indent(ind) << "}\n";
}
}
prtChOrHex (stream (), n);
}
+void OutputFile::write_range (uint l, uint u)
+{
+ printSpan (stream (), l, u);
+}
+
void OutputFile::write_uint_width (uint n, uint w)
{
stream () << std::setw (w) << n;
void write (const char * s, std::streamsize n);
void write_hex (uint n);
void write_char_hex (uint n);
+ void write_range (uint u, uint l);
void write_uint_width (uint n, uint w);
void write_line_info (uint l, const char * fn);
void write_version_time ();
{
if (!encoding.is(Enc::EBCDIC) && (c < 256u) && (isprint(c) || isspace(c)))
{
- o << (DFlag ? '"' : '\'');
+ o << '\'';
prtCh(o, c);
- o << (DFlag ? '"' : '\'');
+ o << '\'';
}
else
{
- if (DFlag) o << '"';
prtHex(o, c);
- if (DFlag) o << '"';
}
}
break;
case '\\':
- o << (DFlag ? "\\\\\\\\" : "\\\\");
+ o << "\\\\"; // both .dot and C/C++ code expect "\\"
break;
default:
}
}
+void prtChOrHexForSpan(std::ostream& o, uint c)
+{
+ if (!encoding.is(Enc::EBCDIC) && (c < 256u) && isprint(c) && (c != ']'))
+ {
+ prtCh(o, c);
+ }
+ else
+ {
+ prtHex(o, c);
+ }
+}
+
void printSpan(std::ostream& o, uint lb, uint ub)
{
if (lb > ub)
if ((ub - lb) == 1)
{
- prtCh(o, lb);
+ prtChOrHexForSpan(o, lb);
}
else
{
- prtCh(o, lb);
+ prtChOrHexForSpan(o, lb);
o << "-";
- prtCh(o, ub - 1);
+ prtChOrHexForSpan(o, ub - 1);
}
o << "]";
digraph re2c {
-1 -> 19 [label="0x07"]
-1 -> 13 [label="0x08"]
-1 -> 9 [label="\\t"]
-1 -> 7 [label="\\n"]
-1 -> 11 [label="\\v"]
-1 -> 17 [label="\\f"]
-1 -> 15 [label="\\r"]
-1 -> 5 [label="\""]
-1 -> 3 [label="'"]
-1 -> 21 [label="\\\\"]
-1 -> 2 [label=default]
+1 -> 2 [label="[0x00-0x06][0x0E-!][#-&][(-[][0x5D-0xFF]"]
+1 -> 19 [label="[0x07]"]
+1 -> 13 [label="[0x08]"]
+1 -> 9 [label="[0x09]"]
+1 -> 7 [label="[0x0A]"]
+1 -> 11 [label="[0x0B]"]
+1 -> 17 [label="[0x0C]"]
+1 -> 15 [label="[0x0D]"]
+1 -> 5 [label="[\"]"]
+1 -> 3 [label="[']"]
+1 -> 21 [label="[\\]"]
3 -> 4
4 [label="bug47_dot_escapes.D.re:3"]
5 -> 6
digraph re2c {
-1 -> 2 [label="a"]
-1 -> 4 [label="e"]
-1 -> 5 [label=default]
-2 -> 10 [label="b"]
-2 -> 3 [label=default]
+1 -> 5 [label="[0x00-`][b-d][f-0xFF]"]
+1 -> 2 [label="[a]"]
+1 -> 4 [label="[e]"]
+2 -> 3 [label="[0x00-a][c-0xFF]"]
+2 -> 10 [label="[b]"]
3 [label="dot.D.re:8"]
-4 -> 6 [label="f"]
-4 -> 3 [label=default]
+4 -> 3 [label="[0x00-e][g-0xFF]"]
+4 -> 6 [label="[f]"]
5 -> 3
-6 -> 8 [label="g"]
-6 -> 7 [label=default]
+6 -> 7 [label="[0x00-f][h-0xFF]"]
+6 -> 8 [label="[g]"]
7 -> 3
8 -> 9
9 [label="dot.D.re:7"]
-10 -> 11 [label="c"]
-10 -> 7 [label=default]
+10 -> 7 [label="[0x00-b][d-0xFF]"]
+10 -> 11 [label="[c]"]
11 -> 12
12 [label="dot.D.re:6"]
}
digraph re2c {
-1 -> 2 [label="0x00"]
-1 -> 4 [label=default]
+1 -> 2 [label="[0x00]"]
+1 -> 4 [label="[0x01-0xFF]"]
2 -> 3
3 [label="dot2.D.re:3"]
4 -> 5
--- /dev/null
+/* Generated by re2c */
+
+digraph re2c {
+
+
+1 -> 2 [label="[0x00-[][0x5D-0xFF]"]
+1 -> 3 [label="[\\]"]
+3 -> 4
+4 [label="dot_backslash.D.re:3"]
+}
--- /dev/null
+/*!re2c
+
+ "\\" { return 1; }
+
+*/
0 -> state2 [label="state=state2"]
/* *********************************** */
state1 -> 2
-2 -> 4 [label="a"]
-2 -> 5 [label="f"]
-2 -> 3 [label=default]
-4 -> 9 [label="b"]
-4 -> 3 [label=default]
-5 -> 6 [label="o"]
-5 -> 3 [label=default]
-6 -> 7 [label="o"]
-6 -> 3 [label=default]
+2 -> 3 [label="[0x00-`][b-e][g-0xFF]"]
+2 -> 4 [label="[a]"]
+2 -> 5 [label="[f]"]
+4 -> 3 [label="[0x00-a][c-0xFF]"]
+4 -> 9 [label="[b]"]
+5 -> 3 [label="[0x00-n][p-0xFF]"]
+5 -> 6 [label="[o]"]
+6 -> 3 [label="[0x00-n][p-0xFF]"]
+6 -> 7 [label="[o]"]
7 -> 8
8 [label="dot_conditions.Dc.re:8"]
-9 -> 10 [label="c"]
-9 -> 3 [label=default]
+9 -> 3 [label="[0x00-b][d-0xFF]"]
+9 -> 10 [label="[c]"]
10 -> 11
11 [label="dot_conditions.Dc.re:6"]
/* *********************************** */
state2 -> 13
-13 -> 15 [label="a"]
-13 -> 14 [label=default]
-15 -> 16 [label="b"]
-15 -> 14 [label=default]
-16 -> 17 [label="c"]
-16 -> 14 [label=default]
+13 -> 14 [label="[0x00-`][b-0xFF]"]
+13 -> 15 [label="[a]"]
+15 -> 14 [label="[0x00-a][c-0xFF]"]
+15 -> 16 [label="[b]"]
+16 -> 14 [label="[0x00-b][d-0xFF]"]
+16 -> 17 [label="[c]"]
17 -> 18
18 [label="dot_conditions.Dc.re:7"]
}
--- /dev/null
+/* Generated by re2c */
+
+digraph re2c {
+
+
+1 -> 6 [label="[0x00-/][9-0x5D][_-`][c-0xFD]"]
+1 -> 4 [label="[0-8][^]"]
+1 -> 2 [label="[a-b][0xFE-0xFF]"]
+2 -> 3
+3 [label="dot_ranges.D.re:3"]
+4 -> 5
+5 [label="dot_ranges.D.re:4"]
+6 -> 7
+7 [label="dot_ranges.D.re:5"]
+}
--- /dev/null
+/*!re2c
+
+ [a-b\xFE-\xFF] { return 1; }
+ [0-8] | "^" { return 2; }
+ [^] { return 3; }
+
+*/
--- /dev/null
+/* Generated by re2c */
+
+digraph re2c {
+
+0 -> INITIAL [label="state=INITIAL"]
+0 -> ST_DOUBLE_QUOTES [label="state=ST_DOUBLE_QUOTES"]
+0 -> ST_OFFSET [label="state=ST_OFFSET"]
+0 -> ST_RAW [label="state=ST_RAW"]
+0 -> ST_SECTION_RAW [label="state=ST_SECTION_RAW"]
+0 -> ST_SECTION_VALUE [label="state=ST_SECTION_VALUE"]
+0 -> ST_VALUE [label="state=ST_VALUE"]
+0 -> ST_VARNAME [label="state=ST_VARNAME"]
+/* *********************************** */
+INITIAL -> 2
+2 -> 3 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][#][0-9][A-E][G-M][P-S][U-X][Z][\\][_-e][g-m][p-s][u-x][z][0x7F-0xFF]"]
+2 -> 5 [label="[0x09]"]
+2 -> 7 [label="[0x0A]"]
+2 -> 9 [label="[0x0D]"]
+2 -> 10 [label="[ ]"]
+2 -> 11 [label="[!-\"][$][&][(-)][^][{-~]"]
+2 -> 13 [label="[%]['][*-/][:][<][>-@][0x5D]"]
+2 -> 14 [label="[;]"]
+2 -> 16 [label="[=]"]
+2 -> 18 [label="[F][f]"]
+2 -> 19 [label="[N][n]"]
+2 -> 20 [label="[O][o]"]
+2 -> 21 [label="[T][t]"]
+2 -> 22 [label="[Y][y]"]
+2 -> 23 [label="[[]"]
+3 -> 26
+4 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:481"]
+5 -> 64
+6 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:627"]
+7 -> 8
+8 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:632"]
+9 -> 8 [label="[0x00-0x09][0x0B-0xFF]"]
+9 -> 67 [label="[0x0A]"]
+10 -> 26 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-:][<][>-0xFF]"]
+10 -> 63 [label="[0x09]"]
+10 -> 67 [label="[0x0A]"]
+10 -> 68 [label="[0x0D]"]
+10 -> 65 [label="[ ]"]
+10 -> 58 [label="[;]"]
+10 -> 56 [label="[=]"]
+11 -> 12
+12 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:555"]
+13 -> 26
+14 -> 59
+15 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:648"]
+16 -> 57
+17 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:491"]
+18 -> 26 [label="[0x00-@][B-`][b-0xFF]"]
+18 -> 53 [label="[A][a]"]
+19 -> 26 [label="[0x00-N][P-T][V-n][p-t][v-0xFF]"]
+19 -> 44 [label="[O][o]"]
+19 -> 45 [label="[U][u]"]
+20 -> 26 [label="[0x00-E][G-M][O-e][g-m][o-0xFF]"]
+20 -> 38 [label="[F][f]"]
+20 -> 31 [label="[N][n]"]
+21 -> 26 [label="[0x00-Q][S-q][s-0xFF]"]
+21 -> 36 [label="[R][r]"]
+22 -> 26 [label="[0x00-D][F-d][f-0xFF]"]
+22 -> 27 [label="[E][e]"]
+23 -> 24
+24 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:406"]
+25 -> 26
+26 -> 25 [label="[0x00-0x08][0x0B-0x0C][0x0E- ][#][%]['][*-:][<][>-Z][\\-0x5D][_-z][0x7F-0xFF]"]
+26 -> 4 [label="[0x09-0x0A][0x0D][!-\"][$][&][(-)][;][=][^][{-~]"]
+26 -> 28 [label="[[]"]
+27 -> 26 [label="[0x00-R][T-r][t-0xFF]"]
+27 -> 31 [label="[S][s]"]
+28 -> 29
+29 -> 30 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+29 -> 28 [label="[0x09][ ]"]
+30 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:431"]
+31 -> 32
+32 -> 25 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][#][%]['][*-:][<][>-Z][\\-0x5D][_-z][0x7F-0xFF]"]
+32 -> 34 [label="[0x09]"]
+32 -> 33 [label="[0x0A][0x0D][!-\"][$][&][(-)][;][=][^][{-~]"]
+32 -> 31 [label="[ ]"]
+32 -> 28 [label="[[]"]
+33 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:469"]
+34 -> 35
+35 -> 33 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+35 -> 34 [label="[0x09][ ]"]
+36 -> 26 [label="[0x00-T][V-t][v-0xFF]"]
+36 -> 37 [label="[U][u]"]
+37 -> 26 [label="[0x00-D][F-d][f-0xFF]"]
+37 -> 31 [label="[E][e]"]
+38 -> 26 [label="[0x00-E][G-e][g-0xFF]"]
+38 -> 39 [label="[F][f]"]
+39 -> 40
+40 -> 25 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][#][%]['][*-:][<][>-Z][\\-0x5D][_-z][0x7F-0xFF]"]
+40 -> 42 [label="[0x09]"]
+40 -> 41 [label="[0x0A][0x0D][!-\"][$][&][(-)][;][=][^][{-~]"]
+40 -> 39 [label="[ ]"]
+40 -> 28 [label="[[]"]
+41 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:473"]
+42 -> 43
+43 -> 41 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+43 -> 42 [label="[0x09][ ]"]
+44 -> 26 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][#][%]['][*-:][<][>-M][O-0x5D][_-m][o-z][0x7F-0xFF]"]
+44 -> 42 [label="[0x09]"]
+44 -> 41 [label="[0x0A][0x0D][!-\"][$][&][(-)][;][=][^][{-~]"]
+44 -> 39 [label="[ ]"]
+44 -> 52 [label="[N][n]"]
+45 -> 26 [label="[0x00-K][M-k][m-0xFF]"]
+45 -> 46 [label="[L][l]"]
+46 -> 26 [label="[0x00-K][M-k][m-0xFF]"]
+46 -> 47 [label="[L][l]"]
+47 -> 48
+48 -> 25 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][#][%]['][*-:][<][>-Z][\\-0x5D][_-z][0x7F-0xFF]"]
+48 -> 50 [label="[0x09]"]
+48 -> 49 [label="[0x0A][0x0D][!-\"][$][&][(-)][;][=][^][{-~]"]
+48 -> 47 [label="[ ]"]
+48 -> 28 [label="[[]"]
+49 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:477"]
+50 -> 51
+51 -> 49 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+51 -> 50 [label="[0x09][ ]"]
+52 -> 26 [label="[0x00-D][F-d][f-0xFF]"]
+52 -> 39 [label="[E][e]"]
+53 -> 26 [label="[0x00-K][M-k][m-0xFF]"]
+53 -> 54 [label="[L][l]"]
+54 -> 26 [label="[0x00-R][T-r][t-0xFF]"]
+54 -> 55 [label="[S][s]"]
+55 -> 26 [label="[0x00-D][F-d][f-0xFF]"]
+55 -> 39 [label="[E][e]"]
+56 -> 57
+57 -> 17 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+57 -> 56 [label="[0x09][ ]"]
+58 -> 59
+59 -> 58 [label="[0x00-0x09][0x0B-0x0C][0x0E-0xFF]"]
+59 -> 60 [label="[0x0A]"]
+59 -> 62 [label="[0x0D]"]
+60 -> 61
+61 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:637"]
+62 -> 61 [label="[0x00-0x09][0x0B-0xFF]"]
+62 -> 60 [label="[0x0A]"]
+63 -> 64
+64 -> 6 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-:][<][>-0xFF]"]
+64 -> 63 [label="[0x09][ ]"]
+64 -> 67 [label="[0x0A]"]
+64 -> 68 [label="[0x0D]"]
+64 -> 58 [label="[;]"]
+64 -> 56 [label="[=]"]
+65 -> 66
+66 -> 25 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][#][%]['][*-:][<][>-Z][\\-0x5D][_-z][0x7F-0xFF]"]
+66 -> 63 [label="[0x09]"]
+66 -> 67 [label="[0x0A]"]
+66 -> 68 [label="[0x0D]"]
+66 -> 65 [label="[ ]"]
+66 -> 4 [label="[!-\"][$][&][(-)][^][{-~]"]
+66 -> 58 [label="[;]"]
+66 -> 56 [label="[=]"]
+66 -> 28 [label="[[]"]
+67 -> 8
+68 -> 8 [label="[0x00-0x09][0x0B-0xFF]"]
+68 -> 67 [label="[0x0A]"]
+/* *********************************** */
+ST_DOUBLE_QUOTES -> 70
+70 -> 71 [label="[0x00-!][#][%-0xFF]"]
+70 -> 73 [label="[\"]"]
+70 -> 75 [label="[$]"]
+71 -> 72
+72 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:587"]
+73 -> 79
+74 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:582"]
+75 -> 72 [label="[0x00-z][|-0xFF]"]
+75 -> 76 [label="[{]"]
+76 -> 77
+77 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:449"]
+78 -> 79
+79 -> 74 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+79 -> 78 [label="[0x09][ ]"]
+/* *********************************** */
+ST_OFFSET -> 81
+81 -> 82 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!][#][%-&][(-,][/][:][<-@][[][^][`][{-0xFF]"]
+81 -> 84 [label="[0x09][ ]"]
+81 -> 85 [label="[0x0A][0x0D][;]"]
+81 -> 87 [label="[\"]"]
+81 -> 89 [label="[$]"]
+81 -> 90 [label="[']"]
+81 -> 91 [label="[-]"]
+81 -> 92 [label="[.]"]
+81 -> 93 [label="[0-9]"]
+81 -> 95 [label="[A-Z][_][a-z]"]
+81 -> 97 [label="[\\]"]
+81 -> 98 [label="[0x5D]"]
+82 -> 101
+83 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:573"]
+84 -> 101 [label="[0x00-0x08][0x0A-0x1F][!][#-\\][^-0xFF]"]
+84 -> 127 [label="[0x09][ ]"]
+84 -> 129 [label="[\"]"]
+84 -> 130 [label="[0x5D]"]
+85 -> 86
+86 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:648"]
+87 -> 88
+88 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:577"]
+89 -> 86 [label="[0x00]"]
+89 -> 100 [label="[0x01-[][0x5D-z][|-0xFF]"]
+89 -> 105 [label="[\\]"]
+89 -> 125 [label="[{]"]
+90 -> 121 [label="[0x00-&][(-0xFF]"]
+90 -> 86 [label="[']"]
+91 -> 101 [label="[0x00-/][:-0xFF]"]
+91 -> 119 [label="[0-9]"]
+92 -> 101 [label="[0x00-/][:-0xFF]"]
+92 -> 117 [label="[0-9]"]
+93 -> 101 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#-&][(--][/][:][<-\\][^-0xFF]"]
+93 -> 94 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+93 -> 113 [label="[.]"]
+93 -> 115 [label="[0-9]"]
+94 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:551"]
+95 -> 101 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#-&][(-/][:][<-@][[-\\][^][`][{-0xFF]"]
+95 -> 96 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+95 -> 111 [label="[0-9][A-Z][_][a-z]"]
+96 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:547"]
+97 -> 100
+98 -> 99
+99 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:444"]
+100 -> 101
+101 -> 100 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-:][<-[][^-0xFF]"]
+101 -> 83 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+101 -> 103 [label="[$]"]
+101 -> 102 [label="[\\]"]
+102 -> 100
+103 -> 104 [label="[0x00][{]"]
+103 -> 100 [label="[0x01-[][0x5D-z][|-0xFF]"]
+103 -> 105 [label="[\\]"]
+104 -> 83 [label="yyaccept=0"]
+104 -> 86 [label="yyaccept=1"]
+104 -> 94 [label="yyaccept=2"]
+104 -> 96 [label="yyaccept=3"]
+105 -> 100 [label="[0x00-#][%-[][0x5D-0xFF]"]
+105 -> 106 [label="[$]"]
+105 -> 108 [label="[\\]"]
+106 -> 107
+107 -> 100 [label="[0x00-#][%-[][0x5D-0xFF]"]
+107 -> 106 [label="[$]"]
+107 -> 110 [label="[\\]"]
+108 -> 109
+109 -> 100 [label="[0x00-#][%-[][0x5D-0xFF]"]
+109 -> 106 [label="[$]"]
+109 -> 108 [label="[\\]"]
+110 -> 100 [label="[0x00-#][%-[][0x5D-0xFF]"]
+110 -> 106 [label="[$]"]
+110 -> 108 [label="[\\]"]
+111 -> 112
+112 -> 100 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-/][:][<-@][[][^][`][{-0xFF]"]
+112 -> 96 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+112 -> 103 [label="[$]"]
+112 -> 111 [label="[0-9][A-Z][_][a-z]"]
+112 -> 102 [label="[\\]"]
+113 -> 114
+114 -> 100 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-/][:][<-[][^-0xFF]"]
+114 -> 94 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+114 -> 103 [label="[$]"]
+114 -> 113 [label="[0-9]"]
+114 -> 102 [label="[\\]"]
+115 -> 116
+116 -> 100 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(--][/][:][<-[][^-0xFF]"]
+116 -> 94 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+116 -> 103 [label="[$]"]
+116 -> 113 [label="[.]"]
+116 -> 115 [label="[0-9]"]
+116 -> 102 [label="[\\]"]
+117 -> 118
+118 -> 100 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-/][:][<-[][^-0xFF]"]
+118 -> 94 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+118 -> 103 [label="[$]"]
+118 -> 117 [label="[0-9]"]
+118 -> 102 [label="[\\]"]
+119 -> 120
+120 -> 100 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-/][:][<-[][^-0xFF]"]
+120 -> 94 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+120 -> 103 [label="[$]"]
+120 -> 119 [label="[0-9]"]
+120 -> 102 [label="[\\]"]
+121 -> 122
+122 -> 121 [label="[0x00-&][(-0xFF]"]
+122 -> 123 [label="[']"]
+123 -> 124
+124 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:416"]
+125 -> 126
+126 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:449"]
+127 -> 128
+128 -> 100 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!][#][%-&][(-:][<-[][^-0xFF]"]
+128 -> 127 [label="[0x09][ ]"]
+128 -> 83 [label="[0x0A][0x0D]['][;]"]
+128 -> 129 [label="[\"]"]
+128 -> 103 [label="[$]"]
+128 -> 102 [label="[\\]"]
+128 -> 130 [label="[0x5D]"]
+129 -> 88
+130 -> 99
+/* *********************************** */
+ST_RAW -> 132
+132 -> 133 [label="[0x00]"]
+132 -> 135 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][!-:][<-0xFF]"]
+132 -> 137 [label="[0x09][ ]"]
+132 -> 138 [label="[0x0A]"]
+132 -> 140 [label="[0x0D]"]
+132 -> 141 [label="[;]"]
+133 -> 134
+134 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:643"]
+135 -> 136
+136 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:500"]
+137 -> 136 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-:][<-0xFF]"]
+137 -> 149 [label="[0x09-0x0A][0x0D][ ][;]"]
+138 -> 139
+139 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:541"]
+140 -> 139 [label="[0x00-0x09][0x0B-0xFF]"]
+140 -> 147 [label="[0x0A]"]
+141 -> 143
+142 -> 143
+143 -> 142 [label="[0x00-0x09][0x0B-0x0C][0x0E-0xFF]"]
+143 -> 144 [label="[0x0A]"]
+143 -> 146 [label="[0x0D]"]
+144 -> 145
+145 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:637"]
+146 -> 145 [label="[0x00-0x09][0x0B-0xFF]"]
+146 -> 144 [label="[0x0A]"]
+147 -> 139
+148 -> 149
+149 -> 150 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-:][<-0xFF]"]
+149 -> 148 [label="[0x09][ ]"]
+149 -> 147 [label="[0x0A]"]
+149 -> 151 [label="[0x0D]"]
+149 -> 142 [label="[;]"]
+150 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:627"]
+151 -> 139 [label="[0x00-0x09][0x0B-0xFF]"]
+151 -> 147 [label="[0x0A]"]
+/* *********************************** */
+ST_SECTION_RAW -> 153
+153 -> 154 [label="[0x00-0x09][0x0B-0x0C][0x0E-\\][^-0xFF]"]
+153 -> 156 [label="[0x0A][0x0D]"]
+153 -> 158 [label="[0x5D]"]
+154 -> 165
+155 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:537"]
+156 -> 157
+157 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:648"]
+158 -> 161
+159 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:425"]
+160 -> 161
+161 -> 159 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-0xFF]"]
+161 -> 160 [label="[0x09][ ]"]
+161 -> 162 [label="[0x0A]"]
+161 -> 163 [label="[0x0D]"]
+162 -> 159
+163 -> 159 [label="[0x00-0x09][0x0B-0xFF]"]
+163 -> 162 [label="[0x0A]"]
+164 -> 165
+165 -> 164 [label="[0x00-0x09][0x0B-0x0C][0x0E-\\][^-0xFF]"]
+165 -> 155 [label="[0x0A][0x0D][0x5D]"]
+/* *********************************** */
+ST_SECTION_VALUE -> 167
+167 -> 168 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!][#][%-&][(-,][/][:][<-@][[][^][`][{-0xFF]"]
+167 -> 170 [label="[0x09][ ]"]
+167 -> 171 [label="[0x0A][0x0D][;]"]
+167 -> 173 [label="[\"]"]
+167 -> 175 [label="[$]"]
+167 -> 176 [label="[']"]
+167 -> 177 [label="[-]"]
+167 -> 178 [label="[.]"]
+167 -> 179 [label="[0-9]"]
+167 -> 181 [label="[A-Z][_][a-z]"]
+167 -> 183 [label="[\\]"]
+167 -> 184 [label="[0x5D]"]
+168 -> 191
+169 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:573"]
+170 -> 191 [label="[0x00-0x08][0x0A-0x1F][!][#-0xFF]"]
+170 -> 217 [label="[0x09][ ]"]
+170 -> 219 [label="[\"]"]
+171 -> 172
+172 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:648"]
+173 -> 174
+174 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:577"]
+175 -> 172 [label="[0x00]"]
+175 -> 190 [label="[0x01-[][0x5D-z][|-0xFF]"]
+175 -> 195 [label="[\\]"]
+175 -> 215 [label="[{]"]
+176 -> 211 [label="[0x00-&][(-0xFF]"]
+176 -> 172 [label="[']"]
+177 -> 191 [label="[0x00-/][:-0xFF]"]
+177 -> 209 [label="[0-9]"]
+178 -> 191 [label="[0x00-/][:-0xFF]"]
+178 -> 207 [label="[0-9]"]
+179 -> 191 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#-&][(--][/][:][<-\\][^-0xFF]"]
+179 -> 180 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+179 -> 203 [label="[.]"]
+179 -> 205 [label="[0-9]"]
+180 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:551"]
+181 -> 191 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#-&][(-/][:][<-@][[-\\][^][`][{-0xFF]"]
+181 -> 182 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+181 -> 201 [label="[0-9][A-Z][_][a-z]"]
+182 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:547"]
+183 -> 190
+184 -> 187
+185 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:425"]
+186 -> 187
+187 -> 185 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-0xFF]"]
+187 -> 186 [label="[0x09][ ]"]
+187 -> 188 [label="[0x0A]"]
+187 -> 189 [label="[0x0D]"]
+188 -> 185
+189 -> 185 [label="[0x00-0x09][0x0B-0xFF]"]
+189 -> 188 [label="[0x0A]"]
+190 -> 191
+191 -> 190 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-:][<-[][^-0xFF]"]
+191 -> 169 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+191 -> 193 [label="[$]"]
+191 -> 192 [label="[\\]"]
+192 -> 190
+193 -> 194 [label="[0x00][{]"]
+193 -> 190 [label="[0x01-[][0x5D-z][|-0xFF]"]
+193 -> 195 [label="[\\]"]
+194 -> 169 [label="yyaccept=0"]
+194 -> 172 [label="yyaccept=1"]
+194 -> 180 [label="yyaccept=2"]
+194 -> 182 [label="yyaccept=3"]
+195 -> 190 [label="[0x00-#][%-[][0x5D-0xFF]"]
+195 -> 196 [label="[$]"]
+195 -> 198 [label="[\\]"]
+196 -> 197
+197 -> 190 [label="[0x00-#][%-[][0x5D-0xFF]"]
+197 -> 196 [label="[$]"]
+197 -> 200 [label="[\\]"]
+198 -> 199
+199 -> 190 [label="[0x00-#][%-[][0x5D-0xFF]"]
+199 -> 196 [label="[$]"]
+199 -> 198 [label="[\\]"]
+200 -> 190 [label="[0x00-#][%-[][0x5D-0xFF]"]
+200 -> 196 [label="[$]"]
+200 -> 198 [label="[\\]"]
+201 -> 202
+202 -> 190 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-/][:][<-@][[][^][`][{-0xFF]"]
+202 -> 182 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+202 -> 193 [label="[$]"]
+202 -> 201 [label="[0-9][A-Z][_][a-z]"]
+202 -> 192 [label="[\\]"]
+203 -> 204
+204 -> 190 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-/][:][<-[][^-0xFF]"]
+204 -> 180 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+204 -> 193 [label="[$]"]
+204 -> 203 [label="[0-9]"]
+204 -> 192 [label="[\\]"]
+205 -> 206
+206 -> 190 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(--][/][:][<-[][^-0xFF]"]
+206 -> 180 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+206 -> 193 [label="[$]"]
+206 -> 203 [label="[.]"]
+206 -> 205 [label="[0-9]"]
+206 -> 192 [label="[\\]"]
+207 -> 208
+208 -> 190 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-/][:][<-[][^-0xFF]"]
+208 -> 180 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+208 -> 193 [label="[$]"]
+208 -> 207 [label="[0-9]"]
+208 -> 192 [label="[\\]"]
+209 -> 210
+210 -> 190 [label="[0x00-0x09][0x0B-0x0C][0x0E-!][#][%-&][(-/][:][<-[][^-0xFF]"]
+210 -> 180 [label="[0x0A][0x0D][\"]['][;][0x5D]"]
+210 -> 193 [label="[$]"]
+210 -> 209 [label="[0-9]"]
+210 -> 192 [label="[\\]"]
+211 -> 212
+212 -> 211 [label="[0x00-&][(-0xFF]"]
+212 -> 213 [label="[']"]
+213 -> 214
+214 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:416"]
+215 -> 216
+216 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:449"]
+217 -> 218
+218 -> 190 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!][#][%-&][(-:][<-[][^-0xFF]"]
+218 -> 217 [label="[0x09][ ]"]
+218 -> 169 [label="[0x0A][0x0D]['][;][0x5D]"]
+218 -> 219 [label="[\"]"]
+218 -> 193 [label="[$]"]
+218 -> 192 [label="[\\]"]
+219 -> 174
+/* *********************************** */
+ST_VALUE -> 221
+221 -> 222 [label="[0x00]"]
+221 -> 224 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#][%][*-,][/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+221 -> 226 [label="[0x09][ ]"]
+221 -> 228 [label="[0x0A]"]
+221 -> 230 [label="[0x0D]"]
+221 -> 231 [label="[!][&][(-)][^][|][~]"]
+221 -> 233 [label="[\"]"]
+221 -> 235 [label="[$]"]
+221 -> 236 [label="[']"]
+221 -> 237 [label="[-]"]
+221 -> 238 [label="[.]"]
+221 -> 239 [label="[0-9]"]
+221 -> 241 [label="[;]"]
+221 -> 242 [label="[=]"]
+221 -> 244 [label="[A-E][G-M][P-S][U-X][Z][_][a-e][g-m][p-s][u-x][z]"]
+221 -> 246 [label="[F][f]"]
+221 -> 247 [label="[N][n]"]
+221 -> 248 [label="[O][o]"]
+221 -> 249 [label="[T][t]"]
+221 -> 250 [label="[Y][y]"]
+222 -> 223
+223 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:643"]
+224 -> 252
+225 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:569"]
+226 -> 306
+227 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:623"]
+228 -> 229
+229 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:541"]
+230 -> 229 [label="[0x00-0x09][0x0B-0xFF]"]
+230 -> 304 [label="[0x0A]"]
+231 -> 303
+232 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:559"]
+233 -> 234
+234 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:577"]
+235 -> 223 [label="[0x00]"]
+235 -> 251 [label="[0x01-[][0x5D-z][|-0xFF]"]
+235 -> 258 [label="[\\]"]
+235 -> 300 [label="[{]"]
+236 -> 296 [label="[0x00-&][(-0xFF]"]
+236 -> 223 [label="[']"]
+237 -> 252 [label="[0x00-/][:-0xFF]"]
+237 -> 294 [label="[0-9]"]
+238 -> 252 [label="[0x00-/][:-0xFF]"]
+238 -> 292 [label="[0-9]"]
+239 -> 240 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+239 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*--][/][:][<][>-0x5D][_-{][}][0x7F-0xFF]"]
+239 -> 288 [label="[.]"]
+239 -> 290 [label="[0-9]"]
+240 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:551"]
+241 -> 284
+242 -> 243
+243 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:563"]
+244 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+244 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+244 -> 253 [label="[0-9][A-Z][_][a-z]"]
+245 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:547"]
+246 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+246 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+246 -> 253 [label="[0-9][B-Z][_][b-z]"]
+246 -> 280 [label="[A][a]"]
+247 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+247 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+247 -> 253 [label="[0-9][A-N][P-T][V-Z][_][a-n][p-t][v-z]"]
+247 -> 272 [label="[O][o]"]
+247 -> 273 [label="[U][u]"]
+248 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+248 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+248 -> 253 [label="[0-9][A-E][G-M][O-Z][_][a-e][g-m][o-z]"]
+248 -> 267 [label="[F][f]"]
+248 -> 261 [label="[N][n]"]
+249 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+249 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+249 -> 253 [label="[0-9][A-Q][S-Z][_][a-q][s-z]"]
+249 -> 265 [label="[R][r]"]
+250 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+250 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+250 -> 253 [label="[0-9][A-D][F-Z][_][a-d][f-z]"]
+250 -> 255 [label="[E][e]"]
+251 -> 252
+252 -> 225 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+252 -> 251 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#][%][*-:][<][>-0x5D][_-{][}][0x7F-0xFF]"]
+252 -> 256 [label="[$]"]
+253 -> 254
+254 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+254 -> 251 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#][%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+254 -> 256 [label="[$]"]
+254 -> 253 [label="[0-9][A-Z][_][a-z]"]
+255 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+255 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+255 -> 253 [label="[0-9][A-R][T-Z][_][a-r][t-z]"]
+255 -> 261 [label="[S][s]"]
+256 -> 257 [label="[0x00][{]"]
+256 -> 251 [label="[0x01-[][0x5D-z][|-0xFF]"]
+256 -> 258 [label="[\\]"]
+257 -> 225 [label="yyaccept=0"]
+257 -> 227 [label="yyaccept=1"]
+257 -> 223 [label="yyaccept=2"]
+257 -> 240 [label="yyaccept=3"]
+257 -> 245 [label="yyaccept=4"]
+257 -> 262 [label="yyaccept=5"]
+257 -> 269 [label="yyaccept=6"]
+257 -> 276 [label="yyaccept=7"]
+258 -> 251 [label="[0x00-#][%-0xFF]"]
+258 -> 259 [label="[$]"]
+259 -> 260
+260 -> 225 [label="[0x00]"]
+260 -> 251 [label="[0x01-#][%-[][0x5D-0xFF]"]
+260 -> 259 [label="[$]"]
+260 -> 258 [label="[\\]"]
+261 -> 262 [label="[0x00][0x0A][0x0D][!-\"][&-)][;][=][^][|][~]"]
+261 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+261 -> 263 [label="[0x09][ ]"]
+261 -> 253 [label="[0-9][A-Z][_][a-z]"]
+262 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:469"]
+263 -> 264
+264 -> 262 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+264 -> 263 [label="[0x09][ ]"]
+265 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+265 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+265 -> 253 [label="[0-9][A-T][V-Z][_][a-t][v-z]"]
+265 -> 266 [label="[U][u]"]
+266 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+266 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+266 -> 253 [label="[0-9][A-D][F-Z][_][a-d][f-z]"]
+266 -> 261 [label="[E][e]"]
+267 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+267 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+267 -> 253 [label="[0-9][A-E][G-Z][_][a-e][g-z]"]
+267 -> 268 [label="[F][f]"]
+268 -> 269 [label="[0x00][0x0A][0x0D][!-\"][&-)][;][=][^][|][~]"]
+268 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+268 -> 270 [label="[0x09][ ]"]
+268 -> 253 [label="[0-9][A-Z][_][a-z]"]
+269 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:473"]
+270 -> 271
+271 -> 269 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+271 -> 270 [label="[0x09][ ]"]
+272 -> 269 [label="[0x00][0x0A][0x0D][!-\"][&-)][;][=][^][|][~]"]
+272 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+272 -> 270 [label="[0x09][ ]"]
+272 -> 253 [label="[0-9][A-M][O-Z][_][a-m][o-z]"]
+272 -> 279 [label="[N][n]"]
+273 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+273 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+273 -> 253 [label="[0-9][A-K][M-Z][_][a-k][m-z]"]
+273 -> 274 [label="[L][l]"]
+274 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+274 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+274 -> 253 [label="[0-9][A-K][M-Z][_][a-k][m-z]"]
+274 -> 275 [label="[L][l]"]
+275 -> 276 [label="[0x00][0x0A][0x0D][!-\"][&-)][;][=][^][|][~]"]
+275 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+275 -> 277 [label="[0x09][ ]"]
+275 -> 253 [label="[0-9][A-Z][_][a-z]"]
+276 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:477"]
+277 -> 278
+278 -> 276 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+278 -> 277 [label="[0x09][ ]"]
+279 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+279 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+279 -> 253 [label="[0-9][A-D][F-Z][_][a-d][f-z]"]
+279 -> 268 [label="[E][e]"]
+280 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+280 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+280 -> 253 [label="[0-9][A-K][M-Z][_][a-k][m-z]"]
+280 -> 281 [label="[L][l]"]
+281 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+281 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+281 -> 253 [label="[0-9][A-R][T-Z][_][a-r][t-z]"]
+281 -> 282 [label="[S][s]"]
+282 -> 245 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+282 -> 252 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#-%][*-/][:][<][>-@][[-0x5D][`][{][}][0x7F-0xFF]"]
+282 -> 253 [label="[0-9][A-D][F-Z][_][a-d][f-z]"]
+282 -> 268 [label="[E][e]"]
+283 -> 284
+284 -> 283 [label="[0x00-0x09][0x0B-0x0C][0x0E-0xFF]"]
+284 -> 285 [label="[0x0A]"]
+284 -> 287 [label="[0x0D]"]
+285 -> 286
+286 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:637"]
+287 -> 286 [label="[0x00-0x09][0x0B-0xFF]"]
+287 -> 285 [label="[0x0A]"]
+288 -> 289
+289 -> 240 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+289 -> 251 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#][%][*-/][:][<][>-0x5D][_-{][}][0x7F-0xFF]"]
+289 -> 256 [label="[$]"]
+289 -> 288 [label="[0-9]"]
+290 -> 291
+291 -> 240 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+291 -> 251 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#][%][*--][/][:][<][>-0x5D][_-{][}][0x7F-0xFF]"]
+291 -> 256 [label="[$]"]
+291 -> 288 [label="[.]"]
+291 -> 290 [label="[0-9]"]
+292 -> 293
+293 -> 240 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+293 -> 251 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#][%][*-/][:][<][>-0x5D][_-{][}][0x7F-0xFF]"]
+293 -> 256 [label="[$]"]
+293 -> 292 [label="[0-9]"]
+294 -> 295
+295 -> 240 [label="[0x00][0x09-0x0A][0x0D][ -\"][&-)][;][=][^][|][~]"]
+295 -> 251 [label="[0x01-0x08][0x0B-0x0C][0x0E-0x1F][#][%][*-/][:][<][>-0x5D][_-{][}][0x7F-0xFF]"]
+295 -> 256 [label="[$]"]
+295 -> 294 [label="[0-9]"]
+296 -> 297
+297 -> 296 [label="[0x00-&][(-0xFF]"]
+297 -> 298 [label="[']"]
+298 -> 299
+299 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:416"]
+300 -> 301
+301 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:449"]
+302 -> 303
+303 -> 232 [label="[0x00-0x08][0x0A-0x1F][!-0xFF]"]
+303 -> 302 [label="[0x09][ ]"]
+304 -> 229
+305 -> 306
+306 -> 227 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!][#-:][<-0xFF]"]
+306 -> 305 [label="[0x09][ ]"]
+306 -> 304 [label="[0x0A]"]
+306 -> 308 [label="[0x0D]"]
+306 -> 307 [label="[\"]"]
+306 -> 283 [label="[;]"]
+307 -> 234
+308 -> 229 [label="[0x00-0x09][0x0B-0xFF]"]
+308 -> 304 [label="[0x0A]"]
+/* *********************************** */
+ST_VARNAME -> 310
+310 -> 311 [label="[0x00-0x08][0x0B-0x0C][0x0E- ][#][%]['][*-:][<][>-Z][\\-0x5D][_-z][0x7F-0xFF]"]
+310 -> 313 [label="[0x09-0x0A][0x0D][!-\"][$][&][(-)][;][=][[][^][{-|][~]"]
+310 -> 315 [label="[}]"]
+311 -> 318
+312 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:454"]
+313 -> 314
+314 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:648"]
+315 -> 316
+316 [label="php20150211_zend_ini_scanner.cDF--case-inverted.re:464"]
+317 -> 318
+318 -> 317 [label="[0x00-0x08][0x0B-0x0C][0x0E- ][#][%]['][*-:][<][>-Z][\\-0x5D][_-z][0x7F-0xFF]"]
+318 -> 312 [label="[0x09-0x0A][0x0D][!-\"][$][&][(-)][;][=][[][^][{-~]"]
+}
--- /dev/null
+/*
+ +----------------------------------------------------------------------+
+ | Zend Engine |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1998-2015 Zend Technologies Ltd. (http://www.zend.com) |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.00 of the Zend license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.zend.com/license/2_00.txt. |
+ | If you did not receive a copy of the Zend license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@zend.com so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Zeev Suraski <zeev@zend.com> |
+ | Jani Taskinen <jani@php.net> |
+ | Marcus Boerger <helly@php.net> |
+ | Nuno Lopes <nlopess@php.net> |
+ | Scott MacVicar <scottmac@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id$ */
+
+#include <errno.h>
+#include "zend.h"
+#include "zend_API.h"
+#include "zend_globals.h"
+#include <zend_ini_parser.h>
+#include "zend_ini_scanner.h"
+
+#ifdef YYDEBUG
+#undef YYDEBUG
+#endif
+
+#if 0
+# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
+#else
+# define YYDEBUG(s, c)
+#endif
+
+#include "zend_ini_scanner_defs.h"
+
+#define YYCTYPE unsigned char
+/* allow the scanner to read one null byte after the end of the string (from ZEND_MMAP_AHEAD)
+ * so that if will be able to terminate to match the current token (e.g. non-enclosed string) */
+#define YYFILL(n) { if (YYCURSOR > YYLIMIT) return 0; }
+#define YYCURSOR SCNG(yy_cursor)
+#define YYLIMIT SCNG(yy_limit)
+#define YYMARKER SCNG(yy_marker)
+
+#define YYGETCONDITION() SCNG(yy_state)
+#define YYSETCONDITION(s) SCNG(yy_state) = s
+
+#define STATE(name) yyc##name
+
+/* emulate flex constructs */
+#define BEGIN(state) YYSETCONDITION(STATE(state))
+#define YYSTATE YYGETCONDITION()
+#define yytext ((char*)SCNG(yy_text))
+#define yyleng SCNG(yy_leng)
+#define yyless(x) do { YYCURSOR = (unsigned char*)yytext + x; \
+ yyleng = (unsigned int)x; } while(0)
+
+/* #define yymore() goto yymore_restart */
+
+/* perform sanity check. If this message is triggered you should
+ increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */
+/*!max:re2c */
+#if ZEND_MMAP_AHEAD < (YYMAXFILL + 1)
+# error ZEND_MMAP_AHEAD should be greater than YYMAXFILL
+#endif
+
+
+/* How it works (for the core ini directives):
+ * ===========================================
+ *
+ * 1. Scanner scans file for tokens and passes them to parser.
+ * 2. Parser parses the tokens and passes the name/value pairs to the callback
+ * function which stores them in the configuration hash table.
+ * 3. Later REGISTER_INI_ENTRIES() is called which triggers the actual
+ * registering of ini entries and uses zend_get_configuration_directive()
+ * to fetch the previously stored name/value pair from configuration hash table
+ * and registers the static ini entries which match the name to the value
+ * into EG(ini_directives) hash table.
+ * 4. PATH section entries are used per-request from down to top, each overriding
+ * previous if one exists. zend_alter_ini_entry() is called for each entry.
+ * Settings in PATH section are ZEND_INI_SYSTEM accessible and thus mimics the
+ * php_admin_* directives used within Apache httpd.conf when PHP is compiled as
+ * module for Apache.
+ * 5. User defined ini files (like .htaccess for apache) are parsed for each request and
+ * stored in separate hash defined by SAPI.
+ */
+
+/* TODO: (ordered by importance :-)
+ * ===============================================================================
+ *
+ * - Separate constant lookup totally from plain strings (using CONSTANT pattern)
+ * - Add #if .. #else .. #endif and ==, !=, <, > , <=, >= operators
+ * - Add #include "some.ini"
+ * - Allow variables to refer to options also when using parse_ini_file()
+ *
+ */
+
+/* Globals Macros */
+#define SCNG INI_SCNG
+#ifdef ZTS
+ZEND_API ts_rsrc_id ini_scanner_globals_id;
+#else
+ZEND_API zend_ini_scanner_globals ini_scanner_globals;
+#endif
+
+/* Eat leading whitespace */
+#define EAT_LEADING_WHITESPACE() \
+ while (yytext[0]) { \
+ if (yytext[0] == ' ' || yytext[0] == '\t') { \
+ SCNG(yy_text)++; \
+ yyleng--; \
+ } else { \
+ break; \
+ } \
+ }
+
+/* Eat trailing whitespace + extra char */
+#define EAT_TRAILING_WHITESPACE_EX(ch) \
+ while (yyleng > 0 && ( \
+ (ch != 'X' && yytext[yyleng - 1] == ch) || \
+ yytext[yyleng - 1] == '\n' || \
+ yytext[yyleng - 1] == '\r' || \
+ yytext[yyleng - 1] == '\t' || \
+ yytext[yyleng - 1] == ' ') \
+ ) { \
+ yyleng--; \
+ }
+
+/* Eat trailing whitespace */
+#define EAT_TRAILING_WHITESPACE() EAT_TRAILING_WHITESPACE_EX('X')
+
+#define zend_ini_copy_value(retval, str, len) \
+ ZVAL_NEW_STR(retval, zend_string_init(str, len, 1))
+
+
+#define RETURN_TOKEN(type, str, len) { \
+ if (SCNG(scanner_mode) == ZEND_INI_SCANNER_TYPED) { \
+ zend_ini_copy_typed_value(ini_lval, type, str, len); \
+ } else { \
+ zend_ini_copy_value(ini_lval, str, len); \
+ } \
+ return type; \
+}
+
+static inline int convert_to_number(zval *retval, const char *str, const int str_len)
+{
+ zend_uchar type;
+ int overflow;
+ zend_long lval;
+ double dval;
+
+ if ((type = is_numeric_string_ex(str, str_len, &lval, &dval, 0, &overflow)) != 0) {
+ if (type == IS_LONG) {
+ ZVAL_LONG(retval, lval);
+ return SUCCESS;
+ } else if (type == IS_DOUBLE && !overflow) {
+ ZVAL_DOUBLE(retval, dval);
+ return SUCCESS;
+ }
+ }
+
+ return FAILURE;
+}
+
+static void zend_ini_copy_typed_value(zval *retval, const int type, const char *str, int len)
+{
+ switch (type) {
+ case BOOL_FALSE:
+ case BOOL_TRUE:
+ ZVAL_BOOL(retval, type == BOOL_TRUE);
+ break;
+
+ case NULL_NULL:
+ ZVAL_NULL(retval);
+ break;
+
+ case TC_NUMBER:
+ if (convert_to_number(retval, str, len) == SUCCESS) {
+ break;
+ }
+ /* intentional fall-through */
+ default:
+ zend_ini_copy_value(retval, str, len);
+ }
+}
+
+static void _yy_push_state(int new_state)
+{
+ zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION());
+ YYSETCONDITION(new_state);
+}
+
+#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm)
+
+static void yy_pop_state(void)
+{
+ int *stack_state = zend_stack_top(&SCNG(state_stack));
+ YYSETCONDITION(*stack_state);
+ zend_stack_del_top(&SCNG(state_stack));
+}
+
+static void yy_scan_buffer(char *str, unsigned int len)
+{
+ YYCURSOR = (YYCTYPE*)str;
+ SCNG(yy_start) = YYCURSOR;
+ YYLIMIT = YYCURSOR + len;
+}
+
+#define ini_filename SCNG(filename)
+
+/* {{{ init_ini_scanner()
+*/
+static int init_ini_scanner(int scanner_mode, zend_file_handle *fh)
+{
+ /* Sanity check */
+ if (scanner_mode != ZEND_INI_SCANNER_NORMAL && scanner_mode != ZEND_INI_SCANNER_RAW && scanner_mode != ZEND_INI_SCANNER_TYPED) {
+ zend_error(E_WARNING, "Invalid scanner mode");
+ return FAILURE;
+ }
+
+ SCNG(lineno) = 1;
+ SCNG(scanner_mode) = scanner_mode;
+ SCNG(yy_in) = fh;
+
+ if (fh != NULL) {
+ ini_filename = zend_strndup(fh->filename, strlen(fh->filename));
+ } else {
+ ini_filename = NULL;
+ }
+
+ zend_stack_init(&SCNG(state_stack), sizeof(int));
+ BEGIN(INITIAL);
+
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ shutdown_ini_scanner()
+*/
+void shutdown_ini_scanner(void)
+{
+ zend_stack_destroy(&SCNG(state_stack));
+ if (ini_filename) {
+ free(ini_filename);
+ }
+}
+/* }}} */
+
+/* {{{ zend_ini_scanner_get_lineno()
+*/
+int zend_ini_scanner_get_lineno(void)
+{
+ return SCNG(lineno);
+}
+/* }}} */
+
+/* {{{ zend_ini_scanner_get_filename()
+*/
+char *zend_ini_scanner_get_filename(void)
+{
+ return ini_filename ? ini_filename : "Unknown";
+}
+/* }}} */
+
+/* {{{ zend_ini_open_file_for_scanning()
+*/
+int zend_ini_open_file_for_scanning(zend_file_handle *fh, int scanner_mode)
+{
+ char *buf;
+ size_t size;
+
+ if (zend_stream_fixup(fh, &buf, &size) == FAILURE) {
+ return FAILURE;
+ }
+
+ if (init_ini_scanner(scanner_mode, fh) == FAILURE) {
+ zend_file_handle_dtor(fh);
+ return FAILURE;
+ }
+
+ yy_scan_buffer(buf, (unsigned int)size);
+
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ zend_ini_prepare_string_for_scanning()
+*/
+int zend_ini_prepare_string_for_scanning(char *str, int scanner_mode)
+{
+ int len = (int)strlen(str);
+
+ if (init_ini_scanner(scanner_mode, NULL) == FAILURE) {
+ return FAILURE;
+ }
+
+ yy_scan_buffer(str, len);
+
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ zend_ini_escape_string()
+ */
+static void zend_ini_escape_string(zval *lval, char *str, int len, char quote_type)
+{
+ register char *s, *t;
+ char *end;
+
+ zend_ini_copy_value(lval, str, len);
+
+ /* convert escape sequences */
+ s = t = Z_STRVAL_P(lval);
+ end = s + Z_STRLEN_P(lval);
+
+ while (s < end) {
+ if (*s == '\\') {
+ s++;
+ if (s >= end) {
+ *t++ = '\\';
+ continue;
+ }
+ switch (*s) {
+ case '"':
+ if (*s != quote_type) {
+ *t++ = '\\';
+ *t++ = *s;
+ break;
+ }
+ case '\\':
+ case '$':
+ *t++ = *s;
+ Z_STRLEN_P(lval)--;
+ break;
+ default:
+ *t++ = '\\';
+ *t++ = *s;
+ break;
+ }
+ } else {
+ *t++ = *s;
+ }
+ if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
+ SCNG(lineno)++;
+ }
+ s++;
+ }
+ *t = 0;
+}
+/* }}} */
+
+int ini_lex(zval *ini_lval)
+{
+restart:
+ SCNG(yy_text) = YYCURSOR;
+
+/* yymore_restart: */
+ /* detect EOF */
+ if (YYCURSOR >= YYLIMIT) {
+ if (YYSTATE == STATE(ST_VALUE) || YYSTATE == STATE(ST_RAW)) {
+ BEGIN(INITIAL);
+ return END_OF_LINE;
+ }
+ return 0;
+ }
+
+ /* Eat any UTF-8 BOM we find in the first 3 bytes */
+ if (YYCURSOR == SCNG(yy_start) && YYCURSOR + 3 < YYLIMIT) {
+ if (memcmp(YYCURSOR, "\xef\xbb\xbf", 3) == 0) {
+ YYCURSOR += 3;
+ goto restart;
+ }
+ }
+/*!re2c
+re2c:yyfill:check = 0;
+LNUM [0-9]+
+DNUM ([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*)
+NUMBER [-]?{LNUM}|{DNUM}
+ANY_CHAR (.|[\n\t])
+NEWLINE ("\r"|"\n"|"\r\n")
+TABS_AND_SPACES [ \t]
+WHITESPACE [ \t]+
+CONSTANT [a-zA-Z_][a-zA-Z0-9_]*
+LABEL [^=\n\r\t;&|^$~(){}!"\[]+
+TOKENS [:,.\[\]"'()&|^+-/*=%$!~<>?@{}]
+OPERATORS [&|^~()!]
+DOLLAR_CURLY "${"
+
+SECTION_RAW_CHARS [^\]\n\r]
+SINGLE_QUOTED_CHARS [^']
+RAW_VALUE_CHARS [^\n\r;\000]
+
+LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR})))
+VALUE_CHARS ([^$= \t\n\r;&|^~()!"'\000]|{LITERAL_DOLLAR})
+SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
+
+<!*> := yyleng = YYCURSOR - SCNG(yy_text);
+
+<INITIAL>"[" { /* Section start */
+ /* Enter section data lookup state */
+ if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) {
+ yy_push_state(ST_SECTION_RAW);
+ } else {
+ yy_push_state(ST_SECTION_VALUE);
+ }
+ return TC_SECTION;
+}
+
+<ST_VALUE,ST_SECTION_VALUE,ST_OFFSET>"'"{SINGLE_QUOTED_CHARS}+"'" { /* Raw string */
+ /* Eat leading and trailing single quotes */
+ if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') {
+ SCNG(yy_text)++;
+ yyleng = yyleng - 2;
+ }
+ RETURN_TOKEN(TC_RAW, yytext, yyleng);
+}
+
+<ST_SECTION_RAW,ST_SECTION_VALUE>"]"{TABS_AND_SPACES}*{NEWLINE}? { /* End of section */
+ BEGIN(INITIAL);
+ SCNG(lineno)++;
+ return ']';
+}
+
+<INITIAL>{LABEL}"["{TABS_AND_SPACES}* { /* Start of option with offset */
+ /* Eat leading whitespace */
+ EAT_LEADING_WHITESPACE();
+
+ /* Eat trailing whitespace and [ */
+ EAT_TRAILING_WHITESPACE_EX('[');
+
+ /* Enter offset lookup state */
+ yy_push_state(ST_OFFSET);
+
+ RETURN_TOKEN(TC_OFFSET, yytext, yyleng);
+}
+
+<ST_OFFSET>{TABS_AND_SPACES}*"]" { /* End of section or an option offset */
+ BEGIN(INITIAL);
+ return ']';
+}
+
+<ST_DOUBLE_QUOTES,ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{DOLLAR_CURLY} { /* Variable start */
+ yy_push_state(ST_VARNAME);
+ return TC_DOLLAR_CURLY;
+}
+
+<ST_VARNAME>{LABEL} { /* Variable name */
+ /* Eat leading whitespace */
+ EAT_LEADING_WHITESPACE();
+
+ /* Eat trailing whitespace */
+ EAT_TRAILING_WHITESPACE();
+
+ RETURN_TOKEN(TC_VARNAME, yytext, yyleng);
+}
+
+<ST_VARNAME>"}" { /* Variable end */
+ yy_pop_state();
+ return '}';
+}
+
+<INITIAL,ST_VALUE>("true"|"on"|"yes"){TABS_AND_SPACES}* { /* TRUE value (when used outside option value/offset this causes parse error!) */
+ RETURN_TOKEN(BOOL_TRUE, "1", 1);
+}
+
+<INITIAL,ST_VALUE>("false"|"off"|"no"|"none"){TABS_AND_SPACES}* { /* FALSE value (when used outside option value/offset this causes parse error!)*/
+ RETURN_TOKEN(BOOL_FALSE, "", 0);
+}
+
+<INITIAL,ST_VALUE>("null"){TABS_AND_SPACES}* {
+ RETURN_TOKEN(NULL_NULL, "", 0);
+}
+
+<INITIAL>{LABEL} { /* Get option name */
+ /* Eat leading whitespace */
+ EAT_LEADING_WHITESPACE();
+
+ /* Eat trailing whitespace */
+ EAT_TRAILING_WHITESPACE();
+
+ RETURN_TOKEN(TC_LABEL, yytext, yyleng);
+}
+
+<INITIAL>{TABS_AND_SPACES}*[=]{TABS_AND_SPACES}* { /* Start option value */
+ if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) {
+ yy_push_state(ST_RAW);
+ } else {
+ yy_push_state(ST_VALUE);
+ }
+ return '=';
+}
+
+<ST_RAW>{RAW_VALUE_CHARS} { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
+ unsigned char *sc = NULL;
+ while (YYCURSOR < YYLIMIT) {
+ switch (*YYCURSOR) {
+ case '\n':
+ case '\r':
+ goto end_raw_value_chars;
+ break;
+ case ';':
+ if (sc == NULL) {
+ sc = YYCURSOR;
+ }
+ /* no break */
+ default:
+ YYCURSOR++;
+ break;
+ }
+ }
+end_raw_value_chars:
+ yyleng = YYCURSOR - SCNG(yy_text);
+
+ /* Eat trailing semicolons */
+ while (yytext[yyleng - 1] == ';') {
+ yyleng--;
+ }
+
+ /* Eat leading and trailing double quotes */
+ if (yytext[0] == '"' && yytext[yyleng - 1] == '"') {
+ SCNG(yy_text)++;
+ yyleng = yyleng - 2;
+ } else if (sc) {
+ YYCURSOR = sc;
+ yyleng = YYCURSOR - SCNG(yy_text);
+ }
+ RETURN_TOKEN(TC_RAW, yytext, yyleng);
+}
+
+<ST_SECTION_RAW>{SECTION_RAW_CHARS}+ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
+ RETURN_TOKEN(TC_RAW, yytext, yyleng);
+}
+
+<ST_VALUE,ST_RAW>{TABS_AND_SPACES}*{NEWLINE} { /* End of option value */
+ BEGIN(INITIAL);
+ SCNG(lineno)++;
+ return END_OF_LINE;
+}
+
+<ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{CONSTANT} { /* Get constant option value */
+ RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
+}
+
+<ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{NUMBER} { /* Get number option value as string */
+ RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
+}
+
+<INITIAL>{TOKENS} { /* Disallow these chars outside option values */
+ return yytext[0];
+}
+
+<ST_VALUE>{OPERATORS}{TABS_AND_SPACES}* { /* Boolean operators */
+ return yytext[0];
+}
+
+<ST_VALUE>[=] { /* Make = used in option value to trigger error */
+ yyless(0);
+ BEGIN(INITIAL);
+ return END_OF_LINE;
+}
+
+<ST_VALUE>{VALUE_CHARS}+ { /* Get everything else as option/offset value */
+ RETURN_TOKEN(TC_STRING, yytext, yyleng);
+}
+
+<ST_SECTION_VALUE,ST_OFFSET>{SECTION_VALUE_CHARS}+ { /* Get rest as section/offset value */
+ RETURN_TOKEN(TC_STRING, yytext, yyleng);
+}
+
+<ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{TABS_AND_SPACES}*["] { /* Double quoted '"' string start */
+ yy_push_state(ST_DOUBLE_QUOTES);
+ return '"';
+}
+
+<ST_DOUBLE_QUOTES>["]{TABS_AND_SPACES}* { /* Double quoted '"' string ends */
+ yy_pop_state();
+ return '"';
+}
+
+<ST_DOUBLE_QUOTES>[^] { /* Escape double quoted string contents */
+ if (YYCURSOR > YYLIMIT) {
+ return 0;
+ }
+
+ while (YYCURSOR < YYLIMIT) {
+ switch (*YYCURSOR++) {
+ case '"':
+ if (YYCURSOR < YYLIMIT && YYCURSOR[-2] == '\\' && *YYCURSOR != '\r' && *YYCURSOR != '\n') {
+ continue;
+ }
+ break;
+ case '$':
+ if (*YYCURSOR == '{') {
+ break;
+ }
+ continue;
+ case '\\':
+ if (YYCURSOR < YYLIMIT && *YYCURSOR != '"') {
+ YYCURSOR++;
+ }
+ /* fall through */
+ default:
+ continue;
+ }
+
+ YYCURSOR--;
+ break;
+ }
+
+ yyleng = YYCURSOR - SCNG(yy_text);
+
+ zend_ini_escape_string(ini_lval, yytext, yyleng, '"');
+ return TC_QUOTED_STRING;
+}
+
+<ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{WHITESPACE} {
+ RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng);
+}
+
+<INITIAL,ST_RAW>{TABS_AND_SPACES}+ {
+ /* eat whitespace */
+ goto restart;
+}
+
+<INITIAL>{TABS_AND_SPACES}*{NEWLINE} {
+ SCNG(lineno)++;
+ return END_OF_LINE;
+}
+
+<INITIAL,ST_VALUE,ST_RAW>{TABS_AND_SPACES}*[;][^\r\n]*{NEWLINE} { /* Comment */
+ BEGIN(INITIAL);
+ SCNG(lineno)++;
+ return END_OF_LINE;
+}
+
+<ST_VALUE,ST_RAW>[^] { /* End of option value (if EOF is reached before EOL */
+ BEGIN(INITIAL);
+ return END_OF_LINE;
+}
+
+<*>[^] {
+ return 0;
+}
+
+*/
+}
--- /dev/null
+/* Generated by re2c */
+
+digraph re2c {
+
+0 -> INITIAL [label="state=INITIAL"]
+0 -> ST_BACKQUOTE [label="state=ST_BACKQUOTE"]
+0 -> ST_DOUBLE_QUOTES [label="state=ST_DOUBLE_QUOTES"]
+0 -> ST_END_HEREDOC [label="state=ST_END_HEREDOC"]
+0 -> ST_HEREDOC [label="state=ST_HEREDOC"]
+0 -> ST_IN_SCRIPTING [label="state=ST_IN_SCRIPTING"]
+0 -> ST_LOOKING_FOR_PROPERTY [label="state=ST_LOOKING_FOR_PROPERTY"]
+0 -> ST_LOOKING_FOR_VARNAME [label="state=ST_LOOKING_FOR_VARNAME"]
+0 -> ST_NOWDOC [label="state=ST_NOWDOC"]
+0 -> ST_VAR_OFFSET [label="state=ST_VAR_OFFSET"]
+/* *********************************** */
+INITIAL -> 2
+2 -> 5 [label="[0x00-;][=-0xFF]"]
+2 -> 3 [label="[<]"]
+3 -> 4 [label="[0x00->][@-0xFF]"]
+3 -> 6 [label="[?]"]
+4 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1766"]
+5 -> 4
+6 -> 7 [label="[0x00-<][>-O][Q-o][q-0xFF]"]
+6 -> 8 [label="[=]"]
+6 -> 10 [label="[P][p]"]
+7 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1757"]
+8 -> 9
+9 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1744"]
+10 -> 11 [label="[0x00-G][I-g][i-0xFF]"]
+10 -> 12 [label="[H][h]"]
+11 -> 7
+12 -> 11 [label="[0x00-O][Q-o][q-0xFF]"]
+12 -> 13 [label="[P][p]"]
+13 -> 11 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-0xFF]"]
+13 -> 14 [label="[0x09-0x0A][ ]"]
+13 -> 16 [label="[0x0D]"]
+14 -> 15
+15 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1750"]
+16 -> 15 [label="[0x00-0x09][0x0B-0xFF]"]
+16 -> 14 [label="[0x0A]"]
+/* *********************************** */
+ST_BACKQUOTE -> 18
+18 -> 24 [label="[0x00-#][%-_][a-z][|-0xFF]"]
+18 -> 19 [label="[$]"]
+18 -> 22 [label="[`]"]
+18 -> 21 [label="[{]"]
+19 -> 20 [label="[0x00-@][[-^][`][|-~]"]
+19 -> 27 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+19 -> 30 [label="[{]"]
+20 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2176"]
+21 -> 20 [label="[0x00-#][%-0xFF]"]
+21 -> 25 [label="[$]"]
+22 -> 23
+23 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2120"]
+24 -> 20
+25 -> 26
+26 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2107"]
+27 -> 28
+28 -> 29 [label="[0x00-,][.-/][:-@][\\-^][`][{-~]"]
+28 -> 32 [label="[-]"]
+28 -> 27 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+28 -> 34 [label="[[]"]
+29 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1831"]
+30 -> 31
+31 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1555"]
+32 -> 33 [label="[0x00-=][?-0xFF]"]
+32 -> 36 [label="[>]"]
+33 -> 29
+34 -> 35
+35 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1824"]
+36 -> 33 [label="[0x00-@][[-^][`][{-~]"]
+36 -> 37 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+37 -> 38
+38 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1815"]
+/* *********************************** */
+ST_DOUBLE_QUOTES -> 40
+40 -> 46 [label="[0x00-!][#][%-z][|-0xFF]"]
+40 -> 44 [label="[\"]"]
+40 -> 41 [label="[$]"]
+40 -> 43 [label="[{]"]
+41 -> 42 [label="[0x00-@][[-^][`][|-~]"]
+41 -> 49 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+41 -> 52 [label="[{]"]
+42 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2126"]
+43 -> 42 [label="[0x00-#][%-0xFF]"]
+43 -> 47 [label="[$]"]
+44 -> 45
+45 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2115"]
+46 -> 42
+47 -> 48
+48 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2107"]
+49 -> 50
+50 -> 51 [label="[0x00-,][.-/][:-@][\\-^][`][{-~]"]
+50 -> 54 [label="[-]"]
+50 -> 49 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+50 -> 56 [label="[[]"]
+51 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1831"]
+52 -> 53
+53 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1555"]
+54 -> 55 [label="[0x00-=][?-0xFF]"]
+54 -> 58 [label="[>]"]
+55 -> 51
+56 -> 57
+57 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1824"]
+58 -> 55 [label="[0x00-@][[-^][`][{-~]"]
+58 -> 59 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+59 -> 60
+60 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1815"]
+/* *********************************** */
+ST_END_HEREDOC -> 62
+62 -> 63
+63 -> 64
+64 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2093"]
+/* *********************************** */
+ST_HEREDOC -> 66
+66 -> 70 [label="[0x00-#][%-z][|-0xFF]"]
+66 -> 67 [label="[$]"]
+66 -> 69 [label="[{]"]
+67 -> 68 [label="[0x00-@][[-^][`][|-~]"]
+67 -> 73 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+67 -> 76 [label="[{]"]
+68 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2218"]
+69 -> 68 [label="[0x00-#][%-0xFF]"]
+69 -> 71 [label="[$]"]
+70 -> 68
+71 -> 72
+72 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2107"]
+73 -> 74
+74 -> 75 [label="[0x00-,][.-/][:-@][\\-^][`][{-~]"]
+74 -> 78 [label="[-]"]
+74 -> 73 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+74 -> 80 [label="[[]"]
+75 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1831"]
+76 -> 77
+77 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1555"]
+78 -> 79 [label="[0x00-=][?-0xFF]"]
+78 -> 82 [label="[>]"]
+79 -> 75
+80 -> 81
+81 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1824"]
+82 -> 79 [label="[0x00-@][[-^][`][{-~]"]
+82 -> 83 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+83 -> 84
+84 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1815"]
+/* *********************************** */
+ST_IN_SCRIPTING -> 86
+86 -> 148 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F]"]
+86 -> 104 [label="[0x09-0x0A][0x0D][ ]"]
+86 -> 119 [label="[!]"]
+86 -> 144 [label="[\"]"]
+86 -> 140 [label="[#]"]
+86 -> 130 [label="[$]"]
+86 -> 124 [label="[%]"]
+86 -> 125 [label="[&]"]
+86 -> 142 [label="[']"]
+86 -> 113 [label="[(]"]
+86 -> 131 [label="[)][,][;][@][[][0x5D][~]"]
+86 -> 122 [label="[*]"]
+86 -> 118 [label="[+]"]
+86 -> 102 [label="[-]"]
+86 -> 109 [label="[.]"]
+86 -> 123 [label="[/]"]
+86 -> 136 [label="[0]"]
+86 -> 138 [label="[1-9]"]
+86 -> 106 [label="[:]"]
+86 -> 120 [label="[<]"]
+86 -> 116 [label="[=]"]
+86 -> 121 [label="[>]"]
+86 -> 110 [label="[?]"]
+86 -> 97 [label="[A][a]"]
+86 -> 99 [label="[B][b]"]
+86 -> 91 [label="[C][c]"]
+86 -> 89 [label="[D][d]"]
+86 -> 87 [label="[E][e]"]
+86 -> 90 [label="[F][f]"]
+86 -> 100 [label="[G][g]"]
+86 -> 139 [label="[H][J-K][M][Q][Z][h][j-k][m][q][z][0x7F-0xFF]"]
+86 -> 95 [label="[I][i]"]
+86 -> 117 [label="[L][l]"]
+86 -> 111 [label="[N][n]"]
+86 -> 128 [label="[O][o]"]
+86 -> 101 [label="[P][p]"]
+86 -> 92 [label="[R][r]"]
+86 -> 98 [label="[S][s]"]
+86 -> 94 [label="[T][t]"]
+86 -> 114 [label="[U][u]"]
+86 -> 112 [label="[V][v]"]
+86 -> 96 [label="[W][w]"]
+86 -> 129 [label="[X][x]"]
+86 -> 93 [label="[Y][y]"]
+86 -> 107 [label="[\\]"]
+86 -> 127 [label="[^]"]
+86 -> 115 [label="[_]"]
+86 -> 146 [label="[`]"]
+86 -> 132 [label="[{]"]
+86 -> 126 [label="[|]"]
+86 -> 134 [label="[}]"]
+87 -> 151 [label="[0x00-B][D-K][O-U][W][Y-b][d-k][o-u][w][y-0xFF]"]
+87 -> 696 [label="[C][c]"]
+87 -> 697 [label="[L][l]"]
+87 -> 698 [label="[M][m]"]
+87 -> 699 [label="[N][n]"]
+87 -> 700 [label="[V][v]"]
+87 -> 701 [label="[X][x]"]
+88 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1854"]
+89 -> 151 [label="[0x00-D][F-H][J-N][P-d][f-h][j-n][p-0xFF]"]
+89 -> 678 [label="[E][e]"]
+89 -> 679 [label="[I][i]"]
+89 -> 680 [label="[O][o]"]
+90 -> 151 [label="[0x00-H][J-N][P-T][V-h][j-n][p-t][v-0xFF]"]
+90 -> 654 [label="[I][i]"]
+90 -> 655 [label="[O][o]"]
+90 -> 656 [label="[U][u]"]
+91 -> 151 [label="[0x00-@][B-K][M-N][P-`][b-k][m-n][p-0xFF]"]
+91 -> 619 [label="[A][a]"]
+91 -> 620 [label="[L][l]"]
+91 -> 621 [label="[O][o]"]
+92 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+92 -> 601 [label="[E][e]"]
+93 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+93 -> 596 [label="[I][i]"]
+94 -> 151 [label="[0x00-G][I-Q][S-g][i-q][s-0xFF]"]
+94 -> 584 [label="[H][h]"]
+94 -> 585 [label="[R][r]"]
+95 -> 151 [label="[0x00-E][G-L][O-R][T-e][g-l][o-r][t-0xFF]"]
+95 -> 531 [label="[F][f]"]
+95 -> 533 [label="[M][m]"]
+95 -> 534 [label="[N][n]"]
+95 -> 535 [label="[S][s]"]
+96 -> 151 [label="[0x00-G][I-g][i-0xFF]"]
+96 -> 526 [label="[H][h]"]
+97 -> 151 [label="[0x00-A][C-M][O-Q][T-a][c-m][o-q][t-0xFF]"]
+97 -> 508 [label="[B][b]"]
+97 -> 509 [label="[N][n]"]
+97 -> 510 [label="[R][r]"]
+97 -> 511 [label="[S][s]"]
+98 -> 151 [label="[0x00-S][U-V][X-s][u-v][x-0xFF]"]
+98 -> 496 [label="[T][t]"]
+98 -> 497 [label="[W][w]"]
+99 -> 151 [label="[0x00-!][#-&][(-;][=-Q][S-q][s-0xFF]"]
+99 -> 488 [label="[\"]"]
+99 -> 489 [label="[']"]
+99 -> 487 [label="[<]"]
+99 -> 490 [label="[R][r]"]
+100 -> 151 [label="[0x00-K][M-N][P-k][m-n][p-0xFF]"]
+100 -> 477 [label="[L][l]"]
+100 -> 478 [label="[O][o]"]
+101 -> 151 [label="[0x00-Q][S-T][V-q][s-t][v-0xFF]"]
+101 -> 453 [label="[R][r]"]
+101 -> 454 [label="[U][u]"]
+102 -> 103 [label="[0x00-,][.-<][?-0xFF]"]
+102 -> 449 [label="[-]"]
+102 -> 447 [label="[=]"]
+102 -> 451 [label="[>]"]
+103 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1544"]
+104 -> 446
+105 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1263"]
+106 -> 103 [label="[0x00-9][;-0xFF]"]
+106 -> 443 [label="[:]"]
+107 -> 108
+108 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1288"]
+109 -> 103 [label="[0x00--][/][:-<][>-0xFF]"]
+109 -> 440 [label="[.]"]
+109 -> 436 [label="[0-9]"]
+109 -> 438 [label="[=]"]
+110 -> 103 [label="[0x00-=][@-0xFF]"]
+110 -> 430 [label="[>]"]
+110 -> 432 [label="[?]"]
+111 -> 151 [label="[0x00-@][B-D][F-`][b-d][f-0xFF]"]
+111 -> 418 [label="[A][a]"]
+111 -> 419 [label="[E][e]"]
+112 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+112 -> 415 [label="[A][a]"]
+113 -> 103 [label="[0x00-0x08][0x0A-0x1F][!-@][C][E][G-H][J-N][P-Q][T][V-`][c][e][g-h][j-n][p-q][t][v-0xFF]"]
+113 -> 340 [label="[0x09][ ][A-B][D][F][I][O][R-S][U][a-b][d][f][i][o][r-s][u]"]
+114 -> 151 [label="[0x00-M][O-R][T-m][o-r][t-0xFF]"]
+114 -> 331 [label="[N][n]"]
+114 -> 332 [label="[S][s]"]
+115 -> 151 [label="[0x00-^][`-0xFF]"]
+115 -> 249 [label="[_]"]
+116 -> 103 [label="[0x00-<][?-0xFF]"]
+116 -> 243 [label="[=]"]
+116 -> 245 [label="[>]"]
+117 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+117 -> 239 [label="[I][i]"]
+118 -> 103 [label="[0x00-*][,-<][>-0xFF]"]
+118 -> 237 [label="[+]"]
+118 -> 235 [label="[=]"]
+119 -> 103 [label="[0x00-<][>-0xFF]"]
+119 -> 232 [label="[=]"]
+120 -> 103 [label="[0x00-;][?-0xFF]"]
+120 -> 210 [label="[<]"]
+120 -> 212 [label="[=]"]
+120 -> 214 [label="[>]"]
+121 -> 103 [label="[0x00-<][?-0xFF]"]
+121 -> 206 [label="[=]"]
+121 -> 204 [label="[>]"]
+122 -> 103 [label="[0x00-)][+-<][>-0xFF]"]
+122 -> 198 [label="[*]"]
+122 -> 200 [label="[=]"]
+123 -> 103 [label="[0x00-)][+-.][0-<][>-0xFF]"]
+123 -> 190 [label="[*]"]
+123 -> 192 [label="[/]"]
+123 -> 193 [label="[=]"]
+124 -> 103 [label="[0x00-<][>-0xFF]"]
+124 -> 188 [label="[=]"]
+125 -> 103 [label="[0x00-%]['-<][>-0xFF]"]
+125 -> 184 [label="[&]"]
+125 -> 186 [label="[=]"]
+126 -> 103 [label="[0x00-<][>-{][}-0xFF]"]
+126 -> 182 [label="[=]"]
+126 -> 180 [label="[|]"]
+127 -> 103 [label="[0x00-<][>-0xFF]"]
+127 -> 178 [label="[=]"]
+128 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+128 -> 176 [label="[R][r]"]
+129 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+129 -> 173 [label="[O][o]"]
+130 -> 103 [label="[0x00-@][[-^][`][{-~]"]
+130 -> 170 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+131 -> 103
+132 -> 133
+133 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1549"]
+134 -> 135
+135 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1561"]
+136 -> 137 [label="[0x00--][/][:-A][C-D][F-W][Y-a][c-d][f-w][y-0xFF]"]
+136 -> 152 [label="[.]"]
+136 -> 155 [label="[0-9]"]
+136 -> 163 [label="[B][b]"]
+136 -> 157 [label="[E][e]"]
+136 -> 162 [label="[X][x]"]
+137 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1614"]
+138 -> 137 [label="[0x00--][/][:-D][F-d][f-0xFF]"]
+138 -> 152 [label="[.]"]
+138 -> 155 [label="[0-9]"]
+138 -> 157 [label="[E][e]"]
+139 -> 151
+140 -> 141
+141 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1860"]
+142 -> 143
+143 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1928"]
+144 -> 145
+145 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1997"]
+146 -> 147
+147 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2087"]
+148 -> 149
+149 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2349"]
+150 -> 151
+151 -> 88 [label="[0x00-/][:-@][[-^][`][{-~]"]
+151 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+152 -> 153
+153 -> 154 [label="[0x00-/][:-D][F-d][f-0xFF]"]
+153 -> 152 [label="[0-9]"]
+153 -> 157 [label="[E][e]"]
+154 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1702"]
+155 -> 156
+156 -> 137 [label="[0x00--][/][:-D][F-d][f-0xFF]"]
+156 -> 152 [label="[.]"]
+156 -> 155 [label="[0-9]"]
+156 -> 157 [label="[E][e]"]
+157 -> 158 [label="[0x00-*][,][.-/][:-0xFF]"]
+157 -> 159 [label="[+][-]"]
+157 -> 160 [label="[0-9]"]
+158 -> 88 [label="yyaccept=0"]
+158 -> 103 [label="yyaccept=1"]
+158 -> 137 [label="yyaccept=2"]
+158 -> 154 [label="yyaccept=3"]
+158 -> 191 [label="yyaccept=4"]
+158 -> 211 [label="yyaccept=5"]
+159 -> 158 [label="[0x00-/][:-0xFF]"]
+159 -> 160 [label="[0-9]"]
+160 -> 161
+161 -> 154 [label="[0x00-/][:-0xFF]"]
+161 -> 160 [label="[0-9]"]
+162 -> 158 [label="[0x00-/][:-@][G-`][g-0xFF]"]
+162 -> 167 [label="[0-9][A-F][a-f]"]
+163 -> 158 [label="[0x00-/][2-0xFF]"]
+163 -> 164 [label="[0-1]"]
+164 -> 165
+165 -> 166 [label="[0x00-/][2-0xFF]"]
+165 -> 164 [label="[0-1]"]
+166 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1586"]
+167 -> 168
+168 -> 169 [label="[0x00-/][:-@][G-`][g-0xFF]"]
+168 -> 167 [label="[0-9][A-F][a-f]"]
+169 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1653"]
+170 -> 171
+171 -> 172 [label="[0x00-/][:-@][[-^][`][{-~]"]
+171 -> 170 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+172 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1831"]
+173 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+173 -> 174 [label="[R][r]"]
+174 -> 175 [label="[0x00-/][:-@][[-^][`][{-~]"]
+174 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+175 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1532"]
+176 -> 177 [label="[0x00-/][:-@][[-^][`][{-~]"]
+176 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+177 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1524"]
+178 -> 179
+179 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1512"]
+180 -> 181
+181 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1516"]
+182 -> 183
+183 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1508"]
+184 -> 185
+185 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1520"]
+186 -> 187
+187 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1504"]
+188 -> 189
+189 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1492"]
+190 -> 191 [label="[0x00-)][+-0xFF]"]
+190 -> 195 [label="[*]"]
+191 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1889"]
+192 -> 141
+193 -> 194
+194 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1484"]
+195 -> 158 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-0xFF]"]
+195 -> 196 [label="[0x09-0x0A][0x0D][ ]"]
+196 -> 197
+197 -> 191 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-0xFF]"]
+197 -> 196 [label="[0x09-0x0A][0x0D][ ]"]
+198 -> 199 [label="[0x00-<][>-0xFF]"]
+198 -> 202 [label="[=]"]
+199 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1476"]
+200 -> 201
+201 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1472"]
+202 -> 203
+203 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1480"]
+204 -> 205 [label="[0x00-<][>-0xFF]"]
+204 -> 208 [label="[=]"]
+205 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1540"]
+206 -> 207
+207 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1460"]
+208 -> 209
+209 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1500"]
+210 -> 211 [label="[0x00-;][>-0xFF]"]
+210 -> 218 [label="[<]"]
+210 -> 216 [label="[=]"]
+211 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1536"]
+212 -> 213
+213 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1456"]
+214 -> 215
+215 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1452"]
+216 -> 217
+217 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1496"]
+218 -> 219
+219 -> 158 [label="[0x00-0x08][0x0A-0x1F][!][#-&][(-@][[-^][`][{-~]"]
+219 -> 218 [label="[0x09][ ]"]
+219 -> 223 [label="[\"]"]
+219 -> 222 [label="[']"]
+219 -> 220 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+220 -> 221
+221 -> 158 [label="[0x00-0x09][0x0B-0x0C][0x0E-/][:-@][[-^][`][{-~]"]
+221 -> 227 [label="[0x0A]"]
+221 -> 229 [label="[0x0D]"]
+221 -> 220 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+222 -> 231 [label="[0x00-&][(-/][:-0xFF]"]
+222 -> 158 [label="['][0-9]"]
+223 -> 225 [label="[0x00-!][#-/][:-0xFF]"]
+223 -> 158 [label="[\"][0-9]"]
+224 -> 225
+225 -> 158 [label="[0x00-!][#-/][:-@][[-^][`][{-~]"]
+225 -> 226 [label="[\"]"]
+225 -> 224 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+226 -> 158 [label="[0x00-0x09][0x0B-0x0C][0x0E-0xFF]"]
+226 -> 227 [label="[0x0A]"]
+226 -> 229 [label="[0x0D]"]
+227 -> 228
+228 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2039"]
+229 -> 228 [label="[0x00-0x09][0x0B-0xFF]"]
+229 -> 227 [label="[0x0A]"]
+230 -> 231
+231 -> 158 [label="[0x00-&][(-/][:-@][[-^][`][{-~]"]
+231 -> 226 [label="[']"]
+231 -> 230 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+232 -> 215 [label="[0x00-<][>-0xFF]"]
+232 -> 233 [label="[=]"]
+233 -> 234
+234 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1444"]
+235 -> 236
+236 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1464"]
+237 -> 238
+238 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1432"]
+239 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+239 -> 240 [label="[S][s]"]
+240 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+240 -> 241 [label="[T][t]"]
+241 -> 242 [label="[0x00-/][:-@][[-^][`][{-~]"]
+241 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+242 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1420"]
+243 -> 244 [label="[0x00-<][>-0xFF]"]
+243 -> 247 [label="[=]"]
+244 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1448"]
+245 -> 246
+246 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1416"]
+247 -> 248
+248 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1440"]
+249 -> 151 [label="[0x00-B][E][G][I-K][O-S][U-b][e][g][i-k][o-s][u-0xFF]"]
+249 -> 251 [label="[C][c]"]
+249 -> 256 [label="[D][d]"]
+249 -> 253 [label="[F][f]"]
+249 -> 250 [label="[H][h]"]
+249 -> 255 [label="[L][l]"]
+249 -> 254 [label="[M][m]"]
+249 -> 257 [label="[N][n]"]
+249 -> 252 [label="[T][t]"]
+250 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+250 -> 318 [label="[A][a]"]
+251 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+251 -> 311 [label="[L][l]"]
+252 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+252 -> 304 [label="[R][r]"]
+253 -> 151 [label="[0x00-H][J-T][V-h][j-t][v-0xFF]"]
+253 -> 288 [label="[I][i]"]
+253 -> 289 [label="[U][u]"]
+254 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+254 -> 280 [label="[E][e]"]
+255 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+255 -> 274 [label="[I][i]"]
+256 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+256 -> 269 [label="[I][i]"]
+257 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+257 -> 258 [label="[A][a]"]
+258 -> 151 [label="[0x00-L][N-l][n-0xFF]"]
+258 -> 259 [label="[M][m]"]
+259 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+259 -> 260 [label="[E][e]"]
+260 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+260 -> 261 [label="[S][s]"]
+261 -> 151 [label="[0x00-O][Q-o][q-0xFF]"]
+261 -> 262 [label="[P][p]"]
+262 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+262 -> 263 [label="[A][a]"]
+263 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+263 -> 264 [label="[C][c]"]
+264 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+264 -> 265 [label="[E][e]"]
+265 -> 151 [label="[0x00-^][`-0xFF]"]
+265 -> 266 [label="[_]"]
+266 -> 151 [label="[0x00-^][`-0xFF]"]
+266 -> 267 [label="[_]"]
+267 -> 268 [label="[0x00-/][:-@][[-^][`][{-~]"]
+267 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+268 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1739"]
+269 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+269 -> 270 [label="[R][r]"]
+270 -> 151 [label="[0x00-^][`-0xFF]"]
+270 -> 271 [label="[_]"]
+271 -> 151 [label="[0x00-^][`-0xFF]"]
+271 -> 272 [label="[_]"]
+272 -> 273 [label="[0x00-/][:-@][[-^][`][{-~]"]
+272 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+273 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1735"]
+274 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+274 -> 275 [label="[N][n]"]
+275 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+275 -> 276 [label="[E][e]"]
+276 -> 151 [label="[0x00-^][`-0xFF]"]
+276 -> 277 [label="[_]"]
+277 -> 151 [label="[0x00-^][`-0xFF]"]
+277 -> 278 [label="[_]"]
+278 -> 279 [label="[0x00-/][:-@][[-^][`][{-~]"]
+278 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+279 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1727"]
+280 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+280 -> 281 [label="[T][t]"]
+281 -> 151 [label="[0x00-G][I-g][i-0xFF]"]
+281 -> 282 [label="[H][h]"]
+282 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+282 -> 283 [label="[O][o]"]
+283 -> 151 [label="[0x00-C][E-c][e-0xFF]"]
+283 -> 284 [label="[D][d]"]
+284 -> 151 [label="[0x00-^][`-0xFF]"]
+284 -> 285 [label="[_]"]
+285 -> 151 [label="[0x00-^][`-0xFF]"]
+285 -> 286 [label="[_]"]
+286 -> 287 [label="[0x00-/][:-@][[-^][`][{-~]"]
+286 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+287 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1723"]
+288 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+288 -> 299 [label="[L][l]"]
+289 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+289 -> 290 [label="[N][n]"]
+290 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+290 -> 291 [label="[C][c]"]
+291 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+291 -> 292 [label="[T][t]"]
+292 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+292 -> 293 [label="[I][i]"]
+293 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+293 -> 294 [label="[O][o]"]
+294 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+294 -> 295 [label="[N][n]"]
+295 -> 151 [label="[0x00-^][`-0xFF]"]
+295 -> 296 [label="[_]"]
+296 -> 151 [label="[0x00-^][`-0xFF]"]
+296 -> 297 [label="[_]"]
+297 -> 298 [label="[0x00-/][:-@][[-^][`][{-~]"]
+297 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+298 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1719"]
+299 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+299 -> 300 [label="[E][e]"]
+300 -> 151 [label="[0x00-^][`-0xFF]"]
+300 -> 301 [label="[_]"]
+301 -> 151 [label="[0x00-^][`-0xFF]"]
+301 -> 302 [label="[_]"]
+302 -> 303 [label="[0x00-/][:-@][[-^][`][{-~]"]
+302 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+303 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1731"]
+304 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+304 -> 305 [label="[A][a]"]
+305 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+305 -> 306 [label="[I][i]"]
+306 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+306 -> 307 [label="[T][t]"]
+307 -> 151 [label="[0x00-^][`-0xFF]"]
+307 -> 308 [label="[_]"]
+308 -> 151 [label="[0x00-^][`-0xFF]"]
+308 -> 309 [label="[_]"]
+309 -> 310 [label="[0x00-/][:-@][[-^][`][{-~]"]
+309 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+310 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1715"]
+311 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+311 -> 312 [label="[A][a]"]
+312 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+312 -> 313 [label="[S][s]"]
+313 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+313 -> 314 [label="[S][s]"]
+314 -> 151 [label="[0x00-^][`-0xFF]"]
+314 -> 315 [label="[_]"]
+315 -> 151 [label="[0x00-^][`-0xFF]"]
+315 -> 316 [label="[_]"]
+316 -> 317 [label="[0x00-/][:-@][[-^][`][{-~]"]
+316 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+317 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1711"]
+318 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+318 -> 319 [label="[L][l]"]
+319 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+319 -> 320 [label="[T][t]"]
+320 -> 151 [label="[0x00-^][`-0xFF]"]
+320 -> 321 [label="[_]"]
+321 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+321 -> 322 [label="[C][c]"]
+322 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+322 -> 323 [label="[O][o]"]
+323 -> 151 [label="[0x00-L][N-l][n-0xFF]"]
+323 -> 324 [label="[M][m]"]
+324 -> 151 [label="[0x00-O][Q-o][q-0xFF]"]
+324 -> 325 [label="[P][p]"]
+325 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+325 -> 326 [label="[I][i]"]
+326 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+326 -> 327 [label="[L][l]"]
+327 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+327 -> 328 [label="[E][e]"]
+328 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+328 -> 329 [label="[R][r]"]
+329 -> 330 [label="[0x00-/][:-@][[-^][`][{-~]"]
+329 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+330 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1384"]
+331 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+331 -> 335 [label="[S][s]"]
+332 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+332 -> 333 [label="[E][e]"]
+333 -> 334 [label="[0x00-/][:-@][[-^][`][{-~]"]
+333 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+334 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1364"]
+335 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+335 -> 336 [label="[E][e]"]
+336 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+336 -> 337 [label="[T][t]"]
+337 -> 338 [label="[0x00-/][:-@][[-^][`][{-~]"]
+337 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+338 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1412"]
+339 -> 340
+340 -> 158 [label="[0x00-0x08][0x0A-0x1F][!-@][C][E][G-H][J-N][P-Q][T][V-`][c][e][g-h][j-n][p-q][t][v-0xFF]"]
+340 -> 339 [label="[0x09][ ]"]
+340 -> 344 [label="[A][a]"]
+340 -> 342 [label="[B][b]"]
+340 -> 347 [label="[D][d]"]
+340 -> 348 [label="[F][f]"]
+340 -> 349 [label="[I][i]"]
+340 -> 343 [label="[O][o]"]
+340 -> 346 [label="[R][r]"]
+340 -> 345 [label="[S][s]"]
+340 -> 341 [label="[U][u]"]
+341 -> 158 [label="[0x00-M][O-m][o-0xFF]"]
+341 -> 408 [label="[N][n]"]
+342 -> 158 [label="[0x00-H][J-N][P-h][j-n][p-0xFF]"]
+342 -> 395 [label="[I][i]"]
+342 -> 396 [label="[O][o]"]
+343 -> 158 [label="[0x00-A][C-a][c-0xFF]"]
+343 -> 387 [label="[B][b]"]
+344 -> 158 [label="[0x00-Q][S-q][s-0xFF]"]
+344 -> 380 [label="[R][r]"]
+345 -> 158 [label="[0x00-S][U-s][u-0xFF]"]
+345 -> 372 [label="[T][t]"]
+346 -> 158 [label="[0x00-D][F-d][f-0xFF]"]
+346 -> 370 [label="[E][e]"]
+347 -> 158 [label="[0x00-N][P-n][p-0xFF]"]
+347 -> 366 [label="[O][o]"]
+348 -> 158 [label="[0x00-K][M-k][m-0xFF]"]
+348 -> 359 [label="[L][l]"]
+349 -> 158 [label="[0x00-M][O-m][o-0xFF]"]
+349 -> 350 [label="[N][n]"]
+350 -> 158 [label="[0x00-S][U-s][u-0xFF]"]
+350 -> 351 [label="[T][t]"]
+351 -> 354 [label="[0x00-D][F-d][f-0xFF]"]
+351 -> 352 [label="[E][e]"]
+352 -> 158 [label="[0x00-F][H-f][h-0xFF]"]
+352 -> 357 [label="[G][g]"]
+353 -> 354
+354 -> 158 [label="[0x00-0x08][0x0A-0x1F][!-(][*-0xFF]"]
+354 -> 353 [label="[0x09][ ]"]
+354 -> 355 [label="[)]"]
+355 -> 356
+356 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1312"]
+357 -> 158 [label="[0x00-D][F-d][f-0xFF]"]
+357 -> 358 [label="[E][e]"]
+358 -> 158 [label="[0x00-Q][S-q][s-0xFF]"]
+358 -> 353 [label="[R][r]"]
+359 -> 158 [label="[0x00-N][P-n][p-0xFF]"]
+359 -> 360 [label="[O][o]"]
+360 -> 158 [label="[0x00-@][B-`][b-0xFF]"]
+360 -> 361 [label="[A][a]"]
+361 -> 158 [label="[0x00-S][U-s][u-0xFF]"]
+361 -> 362 [label="[T][t]"]
+362 -> 363
+363 -> 158 [label="[0x00-0x08][0x0A-0x1F][!-(][*-0xFF]"]
+363 -> 362 [label="[0x09][ ]"]
+363 -> 364 [label="[)]"]
+364 -> 365
+365 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1316"]
+366 -> 158 [label="[0x00-T][V-t][v-0xFF]"]
+366 -> 367 [label="[U][u]"]
+367 -> 158 [label="[0x00-A][C-a][c-0xFF]"]
+367 -> 368 [label="[B][b]"]
+368 -> 158 [label="[0x00-K][M-k][m-0xFF]"]
+368 -> 369 [label="[L][l]"]
+369 -> 158 [label="[0x00-D][F-d][f-0xFF]"]
+369 -> 362 [label="[E][e]"]
+370 -> 158 [label="[0x00-@][B-`][b-0xFF]"]
+370 -> 371 [label="[A][a]"]
+371 -> 158 [label="[0x00-K][M-k][m-0xFF]"]
+371 -> 362 [label="[L][l]"]
+372 -> 158 [label="[0x00-Q][S-q][s-0xFF]"]
+372 -> 373 [label="[R][r]"]
+373 -> 158 [label="[0x00-H][J-h][j-0xFF]"]
+373 -> 374 [label="[I][i]"]
+374 -> 158 [label="[0x00-M][O-m][o-0xFF]"]
+374 -> 375 [label="[N][n]"]
+375 -> 158 [label="[0x00-F][H-f][h-0xFF]"]
+375 -> 376 [label="[G][g]"]
+376 -> 377
+377 -> 158 [label="[0x00-0x08][0x0A-0x1F][!-(][*-0xFF]"]
+377 -> 376 [label="[0x09][ ]"]
+377 -> 378 [label="[)]"]
+378 -> 379
+379 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1320"]
+380 -> 158 [label="[0x00-Q][S-q][s-0xFF]"]
+380 -> 381 [label="[R][r]"]
+381 -> 158 [label="[0x00-@][B-`][b-0xFF]"]
+381 -> 382 [label="[A][a]"]
+382 -> 158 [label="[0x00-X][Z-x][z-0xFF]"]
+382 -> 383 [label="[Y][y]"]
+383 -> 384
+384 -> 158 [label="[0x00-0x08][0x0A-0x1F][!-(][*-0xFF]"]
+384 -> 383 [label="[0x09][ ]"]
+384 -> 385 [label="[)]"]
+385 -> 386
+386 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1324"]
+387 -> 158 [label="[0x00-I][K-i][k-0xFF]"]
+387 -> 388 [label="[J][j]"]
+388 -> 158 [label="[0x00-D][F-d][f-0xFF]"]
+388 -> 389 [label="[E][e]"]
+389 -> 158 [label="[0x00-B][D-b][d-0xFF]"]
+389 -> 390 [label="[C][c]"]
+390 -> 158 [label="[0x00-S][U-s][u-0xFF]"]
+390 -> 391 [label="[T][t]"]
+391 -> 392
+392 -> 158 [label="[0x00-0x08][0x0A-0x1F][!-(][*-0xFF]"]
+392 -> 391 [label="[0x09][ ]"]
+392 -> 393 [label="[)]"]
+393 -> 394
+394 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1328"]
+395 -> 158 [label="[0x00-M][O-m][o-0xFF]"]
+395 -> 405 [label="[N][n]"]
+396 -> 158 [label="[0x00-N][P-n][p-0xFF]"]
+396 -> 397 [label="[O][o]"]
+397 -> 158 [label="[0x00-K][M-k][m-0xFF]"]
+397 -> 398 [label="[L][l]"]
+398 -> 400 [label="[0x00-D][F-d][f-0xFF]"]
+398 -> 403 [label="[E][e]"]
+399 -> 400
+400 -> 158 [label="[0x00-0x08][0x0A-0x1F][!-(][*-0xFF]"]
+400 -> 399 [label="[0x09][ ]"]
+400 -> 401 [label="[)]"]
+401 -> 402
+402 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1332"]
+403 -> 158 [label="[0x00-@][B-`][b-0xFF]"]
+403 -> 404 [label="[A][a]"]
+404 -> 158 [label="[0x00-M][O-m][o-0xFF]"]
+404 -> 399 [label="[N][n]"]
+405 -> 158 [label="[0x00-@][B-`][b-0xFF]"]
+405 -> 406 [label="[A][a]"]
+406 -> 158 [label="[0x00-Q][S-q][s-0xFF]"]
+406 -> 407 [label="[R][r]"]
+407 -> 158 [label="[0x00-X][Z-x][z-0xFF]"]
+407 -> 376 [label="[Y][y]"]
+408 -> 158 [label="[0x00-R][T-r][t-0xFF]"]
+408 -> 409 [label="[S][s]"]
+409 -> 158 [label="[0x00-D][F-d][f-0xFF]"]
+409 -> 410 [label="[E][e]"]
+410 -> 158 [label="[0x00-S][U-s][u-0xFF]"]
+410 -> 411 [label="[T][t]"]
+411 -> 412
+412 -> 158 [label="[0x00-0x08][0x0A-0x1F][!-(][*-0xFF]"]
+412 -> 411 [label="[0x09][ ]"]
+412 -> 413 [label="[)]"]
+413 -> 414
+414 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1336"]
+415 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+415 -> 416 [label="[R][r]"]
+416 -> 417 [label="[0x00-/][:-@][[-^][`][{-~]"]
+416 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+417 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1308"]
+418 -> 151 [label="[0x00-L][N-l][n-0xFF]"]
+418 -> 422 [label="[M][m]"]
+419 -> 151 [label="[0x00-V][X-v][x-0xFF]"]
+419 -> 420 [label="[W][w]"]
+420 -> 421 [label="[0x00-/][:-@][[-^][`][{-~]"]
+420 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+421 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1300"]
+422 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+422 -> 423 [label="[E][e]"]
+423 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+423 -> 424 [label="[S][s]"]
+424 -> 151 [label="[0x00-O][Q-o][q-0xFF]"]
+424 -> 425 [label="[P][p]"]
+425 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+425 -> 426 [label="[A][a]"]
+426 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+426 -> 427 [label="[C][c]"]
+427 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+427 -> 428 [label="[E][e]"]
+428 -> 429 [label="[0x00-/][:-@][[-^][`][{-~]"]
+428 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+429 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1360"]
+430 -> 431 [label="[0x00-0x09][0x0B-0x0C][0x0E-0xFF]"]
+430 -> 434 [label="[0x0A]"]
+430 -> 435 [label="[0x0D]"]
+431 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1922"]
+432 -> 433
+433 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1296"]
+434 -> 431
+435 -> 431 [label="[0x00-0x09][0x0B-0xFF]"]
+435 -> 434 [label="[0x0A]"]
+436 -> 437
+437 -> 154 [label="[0x00-/][:-D][F-d][f-0xFF]"]
+437 -> 436 [label="[0-9]"]
+437 -> 157 [label="[E][e]"]
+438 -> 439
+439 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1488"]
+440 -> 158 [label="[0x00--][/-0xFF]"]
+440 -> 441 [label="[.]"]
+441 -> 442
+442 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1292"]
+443 -> 444
+444 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1284"]
+445 -> 446
+446 -> 105 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-0xFF]"]
+446 -> 445 [label="[0x09-0x0A][0x0D][ ]"]
+447 -> 448
+448 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1468"]
+449 -> 450
+450 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1436"]
+451 -> 452
+452 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1258"]
+453 -> 151 [label="[0x00-H][J-N][P-h][j-n][p-0xFF]"]
+453 -> 460 [label="[I][i]"]
+453 -> 461 [label="[O][o]"]
+454 -> 151 [label="[0x00-A][C-a][c-0xFF]"]
+454 -> 455 [label="[B][b]"]
+455 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+455 -> 456 [label="[L][l]"]
+456 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+456 -> 457 [label="[I][i]"]
+457 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+457 -> 458 [label="[C][c]"]
+458 -> 459 [label="[0x00-/][:-@][[-^][`][{-~]"]
+458 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+459 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1408"]
+460 -> 151 [label="[0x00-M][O-U][W-m][o-u][w-0xFF]"]
+460 -> 469 [label="[N][n]"]
+460 -> 470 [label="[V][v]"]
+461 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+461 -> 462 [label="[T][t]"]
+462 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+462 -> 463 [label="[E][e]"]
+463 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+463 -> 464 [label="[C][c]"]
+464 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+464 -> 465 [label="[T][t]"]
+465 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+465 -> 466 [label="[E][e]"]
+466 -> 151 [label="[0x00-C][E-c][e-0xFF]"]
+466 -> 467 [label="[D][d]"]
+467 -> 468 [label="[0x00-/][:-@][[-^][`][{-~]"]
+467 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+468 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1404"]
+469 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+469 -> 475 [label="[T][t]"]
+470 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+470 -> 471 [label="[A][a]"]
+471 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+471 -> 472 [label="[T][t]"]
+472 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+472 -> 473 [label="[E][e]"]
+473 -> 474 [label="[0x00-/][:-@][[-^][`][{-~]"]
+473 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+474 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1400"]
+475 -> 476 [label="[0x00-/][:-@][[-^][`][{-~]"]
+475 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+476 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1234"]
+477 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+477 -> 482 [label="[O][o]"]
+478 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+478 -> 479 [label="[T][t]"]
+479 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+479 -> 480 [label="[O][o]"]
+480 -> 481 [label="[0x00-/][:-@][[-^][`][{-~]"]
+480 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+481 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1226"]
+482 -> 151 [label="[0x00-A][C-a][c-0xFF]"]
+482 -> 483 [label="[B][b]"]
+483 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+483 -> 484 [label="[A][a]"]
+484 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+484 -> 485 [label="[L][l]"]
+485 -> 486 [label="[0x00-/][:-@][[-^][`][{-~]"]
+485 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+486 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1372"]
+487 -> 158 [label="[0x00-;][=-0xFF]"]
+487 -> 495 [label="[<]"]
+488 -> 145
+489 -> 143
+490 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+490 -> 491 [label="[E][e]"]
+491 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+491 -> 492 [label="[A][a]"]
+492 -> 151 [label="[0x00-J][L-j][l-0xFF]"]
+492 -> 493 [label="[K][k]"]
+493 -> 494 [label="[0x00-/][:-@][[-^][`][{-~]"]
+493 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+494 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1218"]
+495 -> 158 [label="[0x00-;][=-0xFF]"]
+495 -> 218 [label="[<]"]
+496 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+496 -> 503 [label="[A][a]"]
+497 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+497 -> 498 [label="[I][i]"]
+498 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+498 -> 499 [label="[T][t]"]
+499 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+499 -> 500 [label="[C][c]"]
+500 -> 151 [label="[0x00-G][I-g][i-0xFF]"]
+500 -> 501 [label="[H][h]"]
+501 -> 502 [label="[0x00-/][:-@][[-^][`][{-~]"]
+501 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+502 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1202"]
+503 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+503 -> 504 [label="[T][t]"]
+504 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+504 -> 505 [label="[I][i]"]
+505 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+505 -> 506 [label="[C][c]"]
+506 -> 507 [label="[0x00-/][:-@][[-^][`][{-~]"]
+506 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+507 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1388"]
+508 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+508 -> 519 [label="[S][s]"]
+509 -> 151 [label="[0x00-C][E-c][e-0xFF]"]
+509 -> 517 [label="[D][d]"]
+510 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+510 -> 513 [label="[R][r]"]
+511 -> 512 [label="[0x00-/][:-@][[-^][`][{-~]"]
+511 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+512 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1198"]
+513 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+513 -> 514 [label="[A][a]"]
+514 -> 151 [label="[0x00-X][Z-x][z-0xFF]"]
+514 -> 515 [label="[Y][y]"]
+515 -> 516 [label="[0x00-/][:-@][[-^][`][{-~]"]
+515 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+516 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1424"]
+517 -> 518 [label="[0x00-/][:-@][[-^][`][{-~]"]
+517 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+518 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1528"]
+519 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+519 -> 520 [label="[T][t]"]
+520 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+520 -> 521 [label="[R][r]"]
+521 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+521 -> 522 [label="[A][a]"]
+522 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+522 -> 523 [label="[C][c]"]
+523 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+523 -> 524 [label="[T][t]"]
+524 -> 525 [label="[0x00-/][:-@][[-^][`][{-~]"]
+524 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+525 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1392"]
+526 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+526 -> 527 [label="[I][i]"]
+527 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+527 -> 528 [label="[L][l]"]
+528 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+528 -> 529 [label="[E][e]"]
+529 -> 530 [label="[0x00-/][:-@][[-^][`][{-~]"]
+529 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+530 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1158"]
+531 -> 532 [label="[0x00-/][:-@][[-^][`][{-~]"]
+531 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+532 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1142"]
+533 -> 151 [label="[0x00-O][Q-o][q-0xFF]"]
+533 -> 575 [label="[P][p]"]
+534 -> 151 [label="[0x00-B][D-R][U-b][d-r][u-0xFF]"]
+534 -> 542 [label="[C][c]"]
+534 -> 540 [label="[S][s]"]
+534 -> 541 [label="[T][t]"]
+535 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+535 -> 536 [label="[S][s]"]
+536 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+536 -> 537 [label="[E][e]"]
+537 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+537 -> 538 [label="[T][t]"]
+538 -> 539 [label="[0x00-/][:-@][[-^][`][{-~]"]
+538 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+539 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1376"]
+540 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+540 -> 561 [label="[T][t]"]
+541 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+541 -> 554 [label="[E][e]"]
+542 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+542 -> 543 [label="[L][l]"]
+543 -> 151 [label="[0x00-T][V-t][v-0xFF]"]
+543 -> 544 [label="[U][u]"]
+544 -> 151 [label="[0x00-C][E-c][e-0xFF]"]
+544 -> 545 [label="[D][d]"]
+545 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+545 -> 546 [label="[E][e]"]
+546 -> 547 [label="[0x00-/][:-@][[-^][`][{-~]"]
+546 -> 150 [label="[0-9][A-Z][a-z][0x7F-0xFF]"]
+546 -> 548 [label="[_]"]
+547 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1344"]
+548 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+548 -> 549 [label="[O][o]"]
+549 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+549 -> 550 [label="[N][n]"]
+550 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+550 -> 551 [label="[C][c]"]
+551 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+551 -> 552 [label="[E][e]"]
+552 -> 553 [label="[0x00-/][:-@][[-^][`][{-~]"]
+552 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+553 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1348"]
+554 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+554 -> 555 [label="[R][r]"]
+555 -> 151 [label="[0x00-E][G-e][g-0xFF]"]
+555 -> 556 [label="[F][f]"]
+556 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+556 -> 557 [label="[A][a]"]
+557 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+557 -> 558 [label="[C][c]"]
+558 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+558 -> 559 [label="[E][e]"]
+559 -> 560 [label="[0x00-/][:-@][[-^][`][{-~]"]
+559 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+560 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1242"]
+561 -> 151 [label="[0x00-@][B-D][F-`][b-d][f-0xFF]"]
+561 -> 562 [label="[A][a]"]
+561 -> 563 [label="[E][e]"]
+562 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+562 -> 569 [label="[N][n]"]
+563 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+563 -> 564 [label="[A][a]"]
+564 -> 151 [label="[0x00-C][E-c][e-0xFF]"]
+564 -> 565 [label="[D][d]"]
+565 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+565 -> 566 [label="[O][o]"]
+566 -> 151 [label="[0x00-E][G-e][g-0xFF]"]
+566 -> 567 [label="[F][f]"]
+567 -> 568 [label="[0x00-/][:-@][[-^][`][{-~]"]
+567 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+568 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1368"]
+569 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+569 -> 570 [label="[C][c]"]
+570 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+570 -> 571 [label="[E][e]"]
+571 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+571 -> 572 [label="[O][o]"]
+572 -> 151 [label="[0x00-E][G-e][g-0xFF]"]
+572 -> 573 [label="[F][f]"]
+573 -> 574 [label="[0x00-/][:-@][[-^][`][{-~]"]
+573 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+574 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1194"]
+575 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+575 -> 576 [label="[L][l]"]
+576 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+576 -> 577 [label="[E][e]"]
+577 -> 151 [label="[0x00-L][N-l][n-0xFF]"]
+577 -> 578 [label="[M][m]"]
+578 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+578 -> 579 [label="[E][e]"]
+579 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+579 -> 580 [label="[N][n]"]
+580 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+580 -> 581 [label="[T][t]"]
+581 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+581 -> 582 [label="[S][s]"]
+582 -> 583 [label="[0x00-/][:-@][[-^][`][{-~]"]
+582 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+583 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1254"]
+584 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+584 -> 592 [label="[R][r]"]
+585 -> 151 [label="[0x00-@][B-X][Z-`][b-x][z-0xFF]"]
+585 -> 588 [label="[A][a]"]
+585 -> 586 [label="[Y][y]"]
+586 -> 587 [label="[0x00-/][:-@][[-^][`][{-~]"]
+586 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+587 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1126"]
+588 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+588 -> 589 [label="[I][i]"]
+589 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+589 -> 590 [label="[T][t]"]
+590 -> 591 [label="[0x00-/][:-@][[-^][`][{-~]"]
+590 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+591 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1246"]
+592 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+592 -> 593 [label="[O][o]"]
+593 -> 151 [label="[0x00-V][X-v][x-0xFF]"]
+593 -> 594 [label="[W][w]"]
+594 -> 595 [label="[0x00-/][:-@][[-^][`][{-~]"]
+594 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+595 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1138"]
+596 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+596 -> 597 [label="[E][e]"]
+597 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+597 -> 598 [label="[L][l]"]
+598 -> 151 [label="[0x00-C][E-c][e-0xFF]"]
+598 -> 599 [label="[D][d]"]
+599 -> 600 [label="[0x00-/][:-@][[-^][`][{-~]"]
+599 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+600 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1122"]
+601 -> 151 [label="[0x00-P][R-S][U-p][r-s][u-0xFF]"]
+601 -> 603 [label="[Q][q]"]
+601 -> 602 [label="[T][t]"]
+602 -> 151 [label="[0x00-T][V-t][v-0xFF]"]
+602 -> 615 [label="[U][u]"]
+603 -> 151 [label="[0x00-T][V-t][v-0xFF]"]
+603 -> 604 [label="[U][u]"]
+604 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+604 -> 605 [label="[I][i]"]
+605 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+605 -> 606 [label="[R][r]"]
+606 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+606 -> 607 [label="[E][e]"]
+607 -> 608 [label="[0x00-/][:-@][[-^][`][{-~]"]
+607 -> 150 [label="[0-9][A-Z][a-z][0x7F-0xFF]"]
+607 -> 609 [label="[_]"]
+608 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1352"]
+609 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+609 -> 610 [label="[O][o]"]
+610 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+610 -> 611 [label="[N][n]"]
+611 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+611 -> 612 [label="[C][c]"]
+612 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+612 -> 613 [label="[E][e]"]
+613 -> 614 [label="[0x00-/][:-@][[-^][`][{-~]"]
+613 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+614 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1356"]
+615 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+615 -> 616 [label="[R][r]"]
+616 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+616 -> 617 [label="[N][n]"]
+617 -> 618 [label="[0x00-/][:-@][[-^][`][{-~]"]
+617 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+618 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1118"]
+619 -> 151 [label="[0x00-K][M-R][U-k][m-r][u-0xFF]"]
+619 -> 642 [label="[L][l]"]
+619 -> 641 [label="[S][s]"]
+619 -> 640 [label="[T][t]"]
+620 -> 151 [label="[0x00-@][B-N][P-`][b-n][p-0xFF]"]
+620 -> 632 [label="[A][a]"]
+620 -> 633 [label="[O][o]"]
+621 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+621 -> 622 [label="[N][n]"]
+622 -> 151 [label="[0x00-R][U-r][u-0xFF]"]
+622 -> 623 [label="[S][s]"]
+622 -> 624 [label="[T][t]"]
+623 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+623 -> 630 [label="[T][t]"]
+624 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+624 -> 625 [label="[I][i]"]
+625 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+625 -> 626 [label="[N][n]"]
+626 -> 151 [label="[0x00-T][V-t][v-0xFF]"]
+626 -> 627 [label="[U][u]"]
+627 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+627 -> 628 [label="[E][e]"]
+628 -> 629 [label="[0x00-/][:-@][[-^][`][{-~]"]
+628 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+629 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1222"]
+630 -> 631 [label="[0x00-/][:-@][[-^][`][{-~]"]
+630 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+631 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1114"]
+632 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+632 -> 637 [label="[S][s]"]
+633 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+633 -> 634 [label="[N][n]"]
+634 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+634 -> 635 [label="[E][e]"]
+635 -> 636 [label="[0x00-/][:-@][[-^][`][{-~]"]
+635 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+636 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1304"]
+637 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+637 -> 638 [label="[S][s]"]
+638 -> 639 [label="[0x00-/][:-@][[-^][`][{-~]"]
+638 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+639 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1238"]
+640 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+640 -> 651 [label="[C][c]"]
+641 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+641 -> 649 [label="[E][e]"]
+642 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+642 -> 643 [label="[L][l]"]
+643 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+643 -> 644 [label="[A][a]"]
+644 -> 151 [label="[0x00-A][C-a][c-0xFF]"]
+644 -> 645 [label="[B][b]"]
+645 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+645 -> 646 [label="[L][l]"]
+646 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+646 -> 647 [label="[E][e]"]
+647 -> 648 [label="[0x00-/][:-@][[-^][`][{-~]"]
+647 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+648 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1428"]
+649 -> 650 [label="[0x00-/][:-@][[-^][`][{-~]"]
+649 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+650 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1210"]
+651 -> 151 [label="[0x00-G][I-g][i-0xFF]"]
+651 -> 652 [label="[H][h]"]
+652 -> 653 [label="[0x00-/][:-@][[-^][`][{-~]"]
+652 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+653 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1130"]
+654 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+654 -> 671 [label="[N][n]"]
+655 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+655 -> 664 [label="[R][r]"]
+656 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+656 -> 657 [label="[N][n]"]
+657 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+657 -> 658 [label="[C][c]"]
+658 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+658 -> 659 [label="[T][t]"]
+659 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+659 -> 660 [label="[I][i]"]
+660 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+660 -> 661 [label="[O][o]"]
+661 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+661 -> 662 [label="[N][n]"]
+662 -> 663 [label="[0x00-/][:-@][[-^][`][{-~]"]
+662 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+663 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1110"]
+664 -> 665 [label="[0x00-/][:-@][[-^][`][{-~]"]
+664 -> 150 [label="[0-9][A-D][F-Z][_][a-d][f-z][0x7F-0xFF]"]
+664 -> 666 [label="[E][e]"]
+665 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1170"]
+666 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+666 -> 667 [label="[A][a]"]
+667 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+667 -> 668 [label="[C][c]"]
+668 -> 151 [label="[0x00-G][I-g][i-0xFF]"]
+668 -> 669 [label="[H][h]"]
+669 -> 670 [label="[0x00-/][:-@][[-^][`][{-~]"]
+669 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+670 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1178"]
+671 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+671 -> 672 [label="[A][a]"]
+672 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+672 -> 673 [label="[L][l]"]
+673 -> 674 [label="[0x00-/][:-@][[-^][`][{-~]"]
+673 -> 150 [label="[0-9][A-K][M-Z][_][a-k][m-z][0x7F-0xFF]"]
+673 -> 675 [label="[L][l]"]
+674 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1396"]
+675 -> 151 [label="[0x00-X][Z-x][z-0xFF]"]
+675 -> 676 [label="[Y][y]"]
+676 -> 677 [label="[0x00-/][:-@][[-^][`][{-~]"]
+676 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+677 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1134"]
+678 -> 151 [label="[0x00-B][D-E][G-b][d-e][g-0xFF]"]
+678 -> 684 [label="[C][c]"]
+678 -> 685 [label="[F][f]"]
+679 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+679 -> 682 [label="[E][e]"]
+680 -> 681 [label="[0x00-/][:-@][[-^][`][{-~]"]
+680 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+681 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1166"]
+682 -> 683 [label="[0x00-/][:-@][[-^][`][{-~]"]
+682 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+683 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1106"]
+684 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+684 -> 691 [label="[L][l]"]
+685 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+685 -> 686 [label="[A][a]"]
+686 -> 151 [label="[0x00-T][V-t][v-0xFF]"]
+686 -> 687 [label="[U][u]"]
+687 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+687 -> 688 [label="[L][l]"]
+688 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+688 -> 689 [label="[T][t]"]
+689 -> 690 [label="[0x00-/][:-@][[-^][`][{-~]"]
+689 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+690 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1214"]
+691 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+691 -> 692 [label="[A][a]"]
+692 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+692 -> 693 [label="[R][r]"]
+693 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+693 -> 694 [label="[E][e]"]
+694 -> 695 [label="[0x00-/][:-@][[-^][`][{-~]"]
+694 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+695 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1186"]
+696 -> 151 [label="[0x00-G][I-g][i-0xFF]"]
+696 -> 758 [label="[H][h]"]
+697 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+697 -> 752 [label="[S][s]"]
+698 -> 151 [label="[0x00-O][Q-o][q-0xFF]"]
+698 -> 748 [label="[P][p]"]
+699 -> 151 [label="[0x00-C][E-c][e-0xFF]"]
+699 -> 714 [label="[D][d]"]
+700 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+700 -> 711 [label="[A][a]"]
+701 -> 151 [label="[0x00-H][J-S][U-h][j-s][u-0xFF]"]
+701 -> 702 [label="[I][i]"]
+701 -> 703 [label="[T][t]"]
+702 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+702 -> 709 [label="[T][t]"]
+703 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+703 -> 704 [label="[E][e]"]
+704 -> 151 [label="[0x00-M][O-m][o-0xFF]"]
+704 -> 705 [label="[N][n]"]
+705 -> 151 [label="[0x00-C][E-c][e-0xFF]"]
+705 -> 706 [label="[D][d]"]
+706 -> 151 [label="[0x00-R][T-r][t-0xFF]"]
+706 -> 707 [label="[S][s]"]
+707 -> 708 [label="[0x00-/][:-@][[-^][`][{-~]"]
+707 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+708 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1250"]
+709 -> 710 [label="[0x00-/][:-@][[-^][`][{-~]"]
+709 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+710 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1102"]
+711 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+711 -> 712 [label="[L][l]"]
+712 -> 713 [label="[0x00-/][:-@][[-^][`][{-~]"]
+712 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+713 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1340"]
+714 -> 151 [label="[0x00-C][E][G-H][J-R][T-V][X-c][e][g-h][j-r][t-v][x-0xFF]"]
+714 -> 715 [label="[D][d]"]
+714 -> 716 [label="[F][f]"]
+714 -> 717 [label="[I][i]"]
+714 -> 718 [label="[S][s]"]
+714 -> 719 [label="[W][w]"]
+715 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+715 -> 741 [label="[E][e]"]
+716 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+716 -> 733 [label="[O][o]"]
+717 -> 151 [label="[0x00-E][G-e][g-0xFF]"]
+717 -> 731 [label="[F][f]"]
+718 -> 151 [label="[0x00-V][X-v][x-0xFF]"]
+718 -> 725 [label="[W][w]"]
+719 -> 151 [label="[0x00-G][I-g][i-0xFF]"]
+719 -> 720 [label="[H][h]"]
+720 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+720 -> 721 [label="[I][i]"]
+721 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+721 -> 722 [label="[L][l]"]
+722 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+722 -> 723 [label="[E][e]"]
+723 -> 724 [label="[0x00-/][:-@][[-^][`][{-~]"]
+723 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+724 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1162"]
+725 -> 151 [label="[0x00-H][J-h][j-0xFF]"]
+725 -> 726 [label="[I][i]"]
+726 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+726 -> 727 [label="[T][t]"]
+727 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+727 -> 728 [label="[C][c]"]
+728 -> 151 [label="[0x00-G][I-g][i-0xFF]"]
+728 -> 729 [label="[H][h]"]
+729 -> 730 [label="[0x00-/][:-@][[-^][`][{-~]"]
+729 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+730 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1206"]
+731 -> 732 [label="[0x00-/][:-@][[-^][`][{-~]"]
+731 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+732 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1150"]
+733 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+733 -> 734 [label="[R][r]"]
+734 -> 735 [label="[0x00-/][:-@][[-^][`][{-~]"]
+734 -> 150 [label="[0-9][A-D][F-Z][_][a-d][f-z][0x7F-0xFF]"]
+734 -> 736 [label="[E][e]"]
+735 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1174"]
+736 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+736 -> 737 [label="[A][a]"]
+737 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+737 -> 738 [label="[C][c]"]
+738 -> 151 [label="[0x00-G][I-g][i-0xFF]"]
+738 -> 739 [label="[H][h]"]
+739 -> 740 [label="[0x00-/][:-@][[-^][`][{-~]"]
+739 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+740 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1182"]
+741 -> 151 [label="[0x00-B][D-b][d-0xFF]"]
+741 -> 742 [label="[C][c]"]
+742 -> 151 [label="[0x00-K][M-k][m-0xFF]"]
+742 -> 743 [label="[L][l]"]
+743 -> 151 [label="[0x00-@][B-`][b-0xFF]"]
+743 -> 744 [label="[A][a]"]
+744 -> 151 [label="[0x00-Q][S-q][s-0xFF]"]
+744 -> 745 [label="[R][r]"]
+745 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+745 -> 746 [label="[E][e]"]
+746 -> 747 [label="[0x00-/][:-@][[-^][`][{-~]"]
+746 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+747 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1190"]
+748 -> 151 [label="[0x00-S][U-s][u-0xFF]"]
+748 -> 749 [label="[T][t]"]
+749 -> 151 [label="[0x00-X][Z-x][z-0xFF]"]
+749 -> 750 [label="[Y][y]"]
+750 -> 751 [label="[0x00-/][:-@][[-^][`][{-~]"]
+750 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+751 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1380"]
+752 -> 151 [label="[0x00-D][F-d][f-0xFF]"]
+752 -> 753 [label="[E][e]"]
+753 -> 754 [label="[0x00-/][:-@][[-^][`][{-~]"]
+753 -> 150 [label="[0-9][A-H][J-Z][_][a-h][j-z][0x7F-0xFF]"]
+753 -> 755 [label="[I][i]"]
+754 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1154"]
+755 -> 151 [label="[0x00-E][G-e][g-0xFF]"]
+755 -> 756 [label="[F][f]"]
+756 -> 757 [label="[0x00-/][:-@][[-^][`][{-~]"]
+756 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+757 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1146"]
+758 -> 151 [label="[0x00-N][P-n][p-0xFF]"]
+758 -> 759 [label="[O][o]"]
+759 -> 760 [label="[0x00-/][:-@][[-^][`][{-~]"]
+759 -> 150 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+760 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1230"]
+/* *********************************** */
+ST_LOOKING_FOR_PROPERTY -> 762
+762 -> 769 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-,][.-@][[-^][`][{-~]"]
+762 -> 763 [label="[0x09-0x0A][0x0D][ ]"]
+762 -> 765 [label="[-]"]
+762 -> 767 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+763 -> 775
+764 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1263"]
+765 -> 766 [label="[0x00-=][?-0xFF]"]
+765 -> 772 [label="[>]"]
+766 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1278"]
+767 -> 771
+768 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1272"]
+769 -> 766
+770 -> 771
+771 -> 768 [label="[0x00-/][:-@][[-^][`][{-~]"]
+771 -> 770 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+772 -> 773
+773 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1268"]
+774 -> 775
+775 -> 764 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F][!-0xFF]"]
+775 -> 774 [label="[0x09-0x0A][0x0D][ ]"]
+/* *********************************** */
+ST_LOOKING_FOR_VARNAME -> 777
+777 -> 780 [label="[0x00-@][[-^][`][{-~]"]
+777 -> 778 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+778 -> 779 [label="[0x00-/][:-@][\\-^][`][{-|][~]"]
+778 -> 782 [label="[0-9][A-[][_][a-z][}][0x7F-0xFF]"]
+779 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1579"]
+780 -> 779
+781 -> 782
+782 -> 783 [label="[0x00-/][:-@][\\-^][`][{-|][~]"]
+782 -> 781 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+782 -> 784 [label="[[][}]"]
+783 -> 779
+784 -> 785
+785 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1570"]
+/* *********************************** */
+ST_NOWDOC -> 787
+787 -> 788
+788 -> 789
+789 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2292"]
+/* *********************************** */
+ST_VAR_OFFSET -> 791
+791 -> 804 [label="[0x00-0x08][0x0B-0x0C][0x0E-0x1F]"]
+791 -> 800 [label="[0x09-0x0A][0x0D][ ][#]['][\\]"]
+791 -> 799 [label="[!-\"][%-&][(-/][:-@][[][^][`][{-~]"]
+791 -> 795 [label="[$]"]
+791 -> 792 [label="[0]"]
+791 -> 794 [label="[1-9]"]
+791 -> 802 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+791 -> 797 [label="[0x5D]"]
+792 -> 793 [label="[0x00-/][:-A][C-W][Y-a][c-w][y-0xFF]"]
+792 -> 816 [label="[0-9]"]
+792 -> 813 [label="[B][b]"]
+792 -> 815 [label="[X][x]"]
+793 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1681"]
+794 -> 812
+795 -> 796 [label="[0x00-@][[-^][`][{-~]"]
+795 -> 808 [label="[A-Z][_][a-z][0x7F-0xFF]"]
+796 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1841"]
+797 -> 798
+798 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1836"]
+799 -> 796
+800 -> 801
+801 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1846"]
+802 -> 807
+803 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1854"]
+804 -> 805
+805 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:2349"]
+806 -> 807
+807 -> 803 [label="[0x00-/][:-@][[-^][`][{-~]"]
+807 -> 806 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+808 -> 809
+809 -> 810 [label="[0x00-/][:-@][[-^][`][{-~]"]
+809 -> 808 [label="[0-9][A-Z][_][a-z][0x7F-0xFF]"]
+810 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1831"]
+811 -> 812
+812 -> 793 [label="[0x00-/][:-0xFF]"]
+812 -> 811 [label="[0-9]"]
+813 -> 814 [label="[0x00-/][2-0xFF]"]
+813 -> 821 [label="[0-1]"]
+814 -> 793
+815 -> 814 [label="[0x00-/][:-@][G-`][g-0xFF]"]
+815 -> 819 [label="[0-9][A-F][a-f]"]
+816 -> 817
+817 -> 818 [label="[0x00-/][:-0xFF]"]
+817 -> 816 [label="[0-9]"]
+818 [label="php20150211_zend_language_scanner.cDF--case-inverted.re:1697"]
+819 -> 820
+820 -> 818 [label="[0x00-/][:-@][G-`][g-0xFF]"]
+820 -> 819 [label="[0-9][A-F][a-f]"]
+821 -> 822
+822 -> 818 [label="[0x00-/][2-0xFF]"]
+822 -> 821 [label="[0-1]"]
+}
--- /dev/null
+/*
+ +----------------------------------------------------------------------+
+ | Zend Engine |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1998-2015 Zend Technologies Ltd. (http://www.zend.com) |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.00 of the Zend license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.zend.com/license/2_00.txt. |
+ | If you did not receive a copy of the Zend license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@zend.com so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Marcus Boerger <helly@php.net> |
+ | Nuno Lopes <nlopess@php.net> |
+ | Scott MacVicar <scottmac@php.net> |
+ | Flex version authors: |
+ | Andi Gutmans <andi@zend.com> |
+ | Zeev Suraski <zeev@zend.com> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id$ */
+
+#if 0
+# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
+#else
+# define YYDEBUG(s, c)
+#endif
+
+#include "zend_language_scanner_defs.h"
+
+#include <errno.h>
+#include "zend.h"
+#ifdef PHP_WIN32
+# include <Winuser.h>
+#endif
+#include "zend_alloc.h"
+#include <zend_language_parser.h>
+#include "zend_compile.h"
+#include "zend_language_scanner.h"
+#include "zend_highlight.h"
+#include "zend_constants.h"
+#include "zend_variables.h"
+#include "zend_operators.h"
+#include "zend_API.h"
+#include "zend_strtod.h"
+#include "zend_exceptions.h"
+#include "zend_virtual_cwd.h"
+#include "tsrm_config_common.h"
+
+#define YYCTYPE unsigned char
+#define YYFILL(n) { if ((YYCURSOR + n) >= (YYLIMIT + ZEND_MMAP_AHEAD)) { return 0; } }
+#define YYCURSOR SCNG(yy_cursor)
+#define YYLIMIT SCNG(yy_limit)
+#define YYMARKER SCNG(yy_marker)
+
+#define YYGETCONDITION() SCNG(yy_state)
+#define YYSETCONDITION(s) SCNG(yy_state) = s
+
+#define STATE(name) yyc##name
+
+/* emulate flex constructs */
+#define BEGIN(state) YYSETCONDITION(STATE(state))
+#define YYSTATE YYGETCONDITION()
+#define yytext ((char*)SCNG(yy_text))
+#define yyleng SCNG(yy_leng)
+#define yyless(x) do { YYCURSOR = (unsigned char*)yytext + x; \
+ yyleng = (unsigned int)x; } while(0)
+#define yymore() goto yymore_restart
+
+/* perform sanity check. If this message is triggered you should
+ increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */
+/*!max:re2c */
+#if ZEND_MMAP_AHEAD < YYMAXFILL
+# error ZEND_MMAP_AHEAD should be greater than or equal to YYMAXFILL
+#endif
+
+#ifdef HAVE_STDARG_H
+# include <stdarg.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+/* Globals Macros */
+#define SCNG LANG_SCNG
+#ifdef ZTS
+ZEND_API ts_rsrc_id language_scanner_globals_id;
+#else
+ZEND_API zend_php_scanner_globals language_scanner_globals;
+#endif
+
+#define HANDLE_NEWLINES(s, l) \
+do { \
+ char *p = (s), *boundary = p+(l); \
+ \
+ while (p<boundary) { \
+ if (*p == '\n' || (*p == '\r' && (*(p+1) != '\n'))) { \
+ CG(zend_lineno)++; \
+ } \
+ p++; \
+ } \
+} while (0)
+
+#define HANDLE_NEWLINE(c) \
+{ \
+ if (c == '\n' || c == '\r') { \
+ CG(zend_lineno)++; \
+ } \
+}
+
+/* To save initial string length after scanning to first variable */
+#define SET_DOUBLE_QUOTES_SCANNED_LENGTH(len) SCNG(scanned_string_len) = (len)
+#define GET_DOUBLE_QUOTES_SCANNED_LENGTH() SCNG(scanned_string_len)
+
+#define IS_LABEL_START(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || (c) == '_' || (c) >= 0x7F)
+
+#define ZEND_IS_OCT(c) ((c)>='0' && (c)<='7')
+#define ZEND_IS_HEX(c) (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F'))
+
+BEGIN_EXTERN_C()
+
+static size_t encoding_filter_script_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length)
+{
+ const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding();
+ ZEND_ASSERT(internal_encoding);
+ return zend_multibyte_encoding_converter(to, to_length, from, from_length, internal_encoding, LANG_SCNG(script_encoding));
+}
+
+static size_t encoding_filter_script_to_intermediate(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length)
+{
+ return zend_multibyte_encoding_converter(to, to_length, from, from_length, zend_multibyte_encoding_utf8, LANG_SCNG(script_encoding));
+}
+
+static size_t encoding_filter_intermediate_to_script(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length)
+{
+ return zend_multibyte_encoding_converter(to, to_length, from, from_length,
+LANG_SCNG(script_encoding), zend_multibyte_encoding_utf8);
+}
+
+static size_t encoding_filter_intermediate_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length)
+{
+ const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding();
+ ZEND_ASSERT(internal_encoding);
+ return zend_multibyte_encoding_converter(to, to_length, from, from_length,
+internal_encoding, zend_multibyte_encoding_utf8);
+}
+
+
+static void _yy_push_state(int new_state)
+{
+ zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION());
+ YYSETCONDITION(new_state);
+}
+
+#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm)
+
+static void yy_pop_state(void)
+{
+ int *stack_state = zend_stack_top(&SCNG(state_stack));
+ YYSETCONDITION(*stack_state);
+ zend_stack_del_top(&SCNG(state_stack));
+}
+
+static void yy_scan_buffer(char *str, unsigned int len)
+{
+ YYCURSOR = (YYCTYPE*)str;
+ YYLIMIT = YYCURSOR + len;
+ if (!SCNG(yy_start)) {
+ SCNG(yy_start) = YYCURSOR;
+ }
+}
+
+void startup_scanner(void)
+{
+ CG(parse_error) = 0;
+ CG(doc_comment) = NULL;
+ zend_stack_init(&SCNG(state_stack), sizeof(int));
+ zend_ptr_stack_init(&SCNG(heredoc_label_stack));
+}
+
+static void heredoc_label_dtor(zend_heredoc_label *heredoc_label) {
+ efree(heredoc_label->label);
+}
+
+void shutdown_scanner(void)
+{
+ CG(parse_error) = 0;
+ RESET_DOC_COMMENT();
+ zend_stack_destroy(&SCNG(state_stack));
+ zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1);
+ zend_ptr_stack_destroy(&SCNG(heredoc_label_stack));
+}
+
+ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state)
+{
+ lex_state->yy_leng = SCNG(yy_leng);
+ lex_state->yy_start = SCNG(yy_start);
+ lex_state->yy_text = SCNG(yy_text);
+ lex_state->yy_cursor = SCNG(yy_cursor);
+ lex_state->yy_marker = SCNG(yy_marker);
+ lex_state->yy_limit = SCNG(yy_limit);
+
+ lex_state->state_stack = SCNG(state_stack);
+ zend_stack_init(&SCNG(state_stack), sizeof(int));
+
+ lex_state->heredoc_label_stack = SCNG(heredoc_label_stack);
+ zend_ptr_stack_init(&SCNG(heredoc_label_stack));
+
+ lex_state->in = SCNG(yy_in);
+ lex_state->yy_state = YYSTATE;
+ lex_state->filename = zend_get_compiled_filename();
+ lex_state->lineno = CG(zend_lineno);
+
+ lex_state->script_org = SCNG(script_org);
+ lex_state->script_org_size = SCNG(script_org_size);
+ lex_state->script_filtered = SCNG(script_filtered);
+ lex_state->script_filtered_size = SCNG(script_filtered_size);
+ lex_state->input_filter = SCNG(input_filter);
+ lex_state->output_filter = SCNG(output_filter);
+ lex_state->script_encoding = SCNG(script_encoding);
+
+ lex_state->ast = CG(ast);
+ lex_state->ast_arena = CG(ast_arena);
+}
+
+ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state)
+{
+ SCNG(yy_leng) = lex_state->yy_leng;
+ SCNG(yy_start) = lex_state->yy_start;
+ SCNG(yy_text) = lex_state->yy_text;
+ SCNG(yy_cursor) = lex_state->yy_cursor;
+ SCNG(yy_marker) = lex_state->yy_marker;
+ SCNG(yy_limit) = lex_state->yy_limit;
+
+ zend_stack_destroy(&SCNG(state_stack));
+ SCNG(state_stack) = lex_state->state_stack;
+
+ zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1);
+ zend_ptr_stack_destroy(&SCNG(heredoc_label_stack));
+ SCNG(heredoc_label_stack) = lex_state->heredoc_label_stack;
+
+ SCNG(yy_in) = lex_state->in;
+ YYSETCONDITION(lex_state->yy_state);
+ CG(zend_lineno) = lex_state->lineno;
+ zend_restore_compiled_filename(lex_state->filename);
+
+ if (SCNG(script_filtered)) {
+ efree(SCNG(script_filtered));
+ SCNG(script_filtered) = NULL;
+ }
+ SCNG(script_org) = lex_state->script_org;
+ SCNG(script_org_size) = lex_state->script_org_size;
+ SCNG(script_filtered) = lex_state->script_filtered;
+ SCNG(script_filtered_size) = lex_state->script_filtered_size;
+ SCNG(input_filter) = lex_state->input_filter;
+ SCNG(output_filter) = lex_state->output_filter;
+ SCNG(script_encoding) = lex_state->script_encoding;
+
+ CG(ast) = lex_state->ast;
+ CG(ast_arena) = lex_state->ast_arena;
+
+ RESET_DOC_COMMENT();
+}
+
+ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle)
+{
+ zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles);
+ /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */
+ file_handle->opened_path = NULL;
+ if (file_handle->free_filename) {
+ file_handle->filename = NULL;
+ }
+}
+
+#define BOM_UTF32_BE "\x00\x00\xfe\xff"
+#define BOM_UTF32_LE "\xff\xfe\x00\x00"
+#define BOM_UTF16_BE "\xfe\xff"
+#define BOM_UTF16_LE "\xff\xfe"
+#define BOM_UTF8 "\xef\xbb\xbf"
+
+static const zend_encoding *zend_multibyte_detect_utf_encoding(const unsigned char *script, size_t script_size)
+{
+ const unsigned char *p;
+ int wchar_size = 2;
+ int le = 0;
+
+ /* utf-16 or utf-32? */
+ p = script;
+ assert(p >= script);
+ while ((size_t)(p-script) < script_size) {
+ p = memchr(p, 0, script_size-(p-script)-2);
+ if (!p) {
+ break;
+ }
+ if (*(p+1) == '\0' && *(p+2) == '\0') {
+ wchar_size = 4;
+ break;
+ }
+
+ /* searching for UTF-32 specific byte orders, so this will do */
+ p += 4;
+ }
+
+ /* BE or LE? */
+ p = script;
+ assert(p >= script);
+ while ((size_t)(p-script) < script_size) {
+ if (*p == '\0' && *(p+wchar_size-1) != '\0') {
+ /* BE */
+ le = 0;
+ break;
+ } else if (*p != '\0' && *(p+wchar_size-1) == '\0') {
+ /* LE* */
+ le = 1;
+ break;
+ }
+ p += wchar_size;
+ }
+
+ if (wchar_size == 2) {
+ return le ? zend_multibyte_encoding_utf16le : zend_multibyte_encoding_utf16be;
+ } else {
+ return le ? zend_multibyte_encoding_utf32le : zend_multibyte_encoding_utf32be;
+ }
+
+ return NULL;
+}
+
+static const zend_encoding* zend_multibyte_detect_unicode(void)
+{
+ const zend_encoding *script_encoding = NULL;
+ int bom_size;
+ unsigned char *pos1, *pos2;
+
+ if (LANG_SCNG(script_org_size) < sizeof(BOM_UTF32_LE)-1) {
+ return NULL;
+ }
+
+ /* check out BOM */
+ if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_BE, sizeof(BOM_UTF32_BE)-1)) {
+ script_encoding = zend_multibyte_encoding_utf32be;
+ bom_size = sizeof(BOM_UTF32_BE)-1;
+ } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_LE, sizeof(BOM_UTF32_LE)-1)) {
+ script_encoding = zend_multibyte_encoding_utf32le;
+ bom_size = sizeof(BOM_UTF32_LE)-1;
+ } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_BE, sizeof(BOM_UTF16_BE)-1)) {
+ script_encoding = zend_multibyte_encoding_utf16be;
+ bom_size = sizeof(BOM_UTF16_BE)-1;
+ } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_LE, sizeof(BOM_UTF16_LE)-1)) {
+ script_encoding = zend_multibyte_encoding_utf16le;
+ bom_size = sizeof(BOM_UTF16_LE)-1;
+ } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF8, sizeof(BOM_UTF8)-1)) {
+ script_encoding = zend_multibyte_encoding_utf8;
+ bom_size = sizeof(BOM_UTF8)-1;
+ }
+
+ if (script_encoding) {
+ /* remove BOM */
+ LANG_SCNG(script_org) += bom_size;
+ LANG_SCNG(script_org_size) -= bom_size;
+
+ return script_encoding;
+ }
+
+ /* script contains NULL bytes -> auto-detection */
+ if ((pos1 = memchr(LANG_SCNG(script_org), 0, LANG_SCNG(script_org_size)))) {
+ /* check if the NULL byte is after the __HALT_COMPILER(); */
+ pos2 = LANG_SCNG(script_org);
+
+ while (pos1 - pos2 >= sizeof("__HALT_COMPILER();")-1) {
+ pos2 = memchr(pos2, '_', pos1 - pos2);
+ if (!pos2) break;
+ pos2++;
+ if (strncasecmp((char*)pos2, "_HALT_COMPILER", sizeof("_HALT_COMPILER")-1) == 0) {
+ pos2 += sizeof("_HALT_COMPILER")-1;
+ while (*pos2 == ' ' ||
+ *pos2 == '\t' ||
+ *pos2 == '\r' ||
+ *pos2 == '\n') {
+ pos2++;
+ }
+ if (*pos2 == '(') {
+ pos2++;
+ while (*pos2 == ' ' ||
+ *pos2 == '\t' ||
+ *pos2 == '\r' ||
+ *pos2 == '\n') {
+ pos2++;
+ }
+ if (*pos2 == ')') {
+ pos2++;
+ while (*pos2 == ' ' ||
+ *pos2 == '\t' ||
+ *pos2 == '\r' ||
+ *pos2 == '\n') {
+ pos2++;
+ }
+ if (*pos2 == ';') {
+ return NULL;
+ }
+ }
+ }
+ }
+ }
+ /* make best effort if BOM is missing */
+ return zend_multibyte_detect_utf_encoding(LANG_SCNG(script_org), LANG_SCNG(script_org_size));
+ }
+
+ return NULL;
+}
+
+static const zend_encoding* zend_multibyte_find_script_encoding(void)
+{
+ const zend_encoding *script_encoding;
+
+ if (CG(detect_unicode)) {
+ /* check out bom(byte order mark) and see if containing wchars */
+ script_encoding = zend_multibyte_detect_unicode();
+ if (script_encoding != NULL) {
+ /* bom or wchar detection is prior to 'script_encoding' option */
+ return script_encoding;
+ }
+ }
+
+ /* if no script_encoding specified, just leave alone */
+ if (!CG(script_encoding_list) || !CG(script_encoding_list_size)) {
+ return NULL;
+ }
+
+ /* if multiple encodings specified, detect automagically */
+ if (CG(script_encoding_list_size) > 1) {
+ return zend_multibyte_encoding_detector(LANG_SCNG(script_org), LANG_SCNG(script_org_size), CG(script_encoding_list), CG(script_encoding_list_size));
+ }
+
+ return CG(script_encoding_list)[0];
+}
+
+ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding)
+{
+ const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding();
+ const zend_encoding *script_encoding = onetime_encoding ? onetime_encoding: zend_multibyte_find_script_encoding();
+
+ if (!script_encoding) {
+ return FAILURE;
+ }
+
+ /* judge input/output filter */
+ LANG_SCNG(script_encoding) = script_encoding;
+ LANG_SCNG(input_filter) = NULL;
+ LANG_SCNG(output_filter) = NULL;
+
+ if (!internal_encoding || LANG_SCNG(script_encoding) == internal_encoding) {
+ if (!zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) {
+ /* and if not, work around w/ script_encoding -> utf-8 -> script_encoding conversion */
+ LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate;
+ LANG_SCNG(output_filter) = encoding_filter_intermediate_to_script;
+ } else {
+ LANG_SCNG(input_filter) = NULL;
+ LANG_SCNG(output_filter) = NULL;
+ }
+ return SUCCESS;
+ }
+
+ if (zend_multibyte_check_lexer_compatibility(internal_encoding)) {
+ LANG_SCNG(input_filter) = encoding_filter_script_to_internal;
+ LANG_SCNG(output_filter) = NULL;
+ } else if (zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) {
+ LANG_SCNG(input_filter) = NULL;
+ LANG_SCNG(output_filter) = encoding_filter_script_to_internal;
+ } else {
+ /* both script and internal encodings are incompatible w/ flex */
+ LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate;
+ LANG_SCNG(output_filter) = encoding_filter_intermediate_to_internal;
+ }
+
+ return 0;
+}
+
+ZEND_API int open_file_for_scanning(zend_file_handle *file_handle)
+{
+ const char *file_path = NULL;
+ char *buf;
+ size_t size, offset = 0;
+ zend_string *compiled_filename;
+
+ /* The shebang line was read, get the current position to obtain the buffer start */
+ if (CG(start_lineno) == 2 && file_handle->type == ZEND_HANDLE_FP && file_handle->handle.fp) {
+ if ((offset = ftell(file_handle->handle.fp)) == -1) {
+ offset = 0;
+ }
+ }
+
+ if (zend_stream_fixup(file_handle, &buf, &size) == FAILURE) {
+ return FAILURE;
+ }
+
+ zend_llist_add_element(&CG(open_files), file_handle);
+ if (file_handle->handle.stream.handle >= (void*)file_handle && file_handle->handle.stream.handle <= (void*)(file_handle+1)) {
+ zend_file_handle *fh = (zend_file_handle*)zend_llist_get_last(&CG(open_files));
+ size_t diff = (char*)file_handle->handle.stream.handle - (char*)file_handle;
+ fh->handle.stream.handle = (void*)(((char*)fh) + diff);
+ file_handle->handle.stream.handle = fh->handle.stream.handle;
+ }
+
+ /* Reset the scanner for scanning the new file */
+ SCNG(yy_in) = file_handle;
+ SCNG(yy_start) = NULL;
+
+ if (size != -1) {
+ if (CG(multibyte)) {
+ SCNG(script_org) = (unsigned char*)buf;
+ SCNG(script_org_size) = size;
+ SCNG(script_filtered) = NULL;
+
+ zend_multibyte_set_filter(NULL);
+
+ if (SCNG(input_filter)) {
+ if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size))) {
+ zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "
+ "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));
+ }
+ buf = (char*)SCNG(script_filtered);
+ size = SCNG(script_filtered_size);
+ }
+ }
+ SCNG(yy_start) = (unsigned char *)buf - offset;
+ yy_scan_buffer(buf, (unsigned int)size);
+ } else {
+ zend_error_noreturn(E_COMPILE_ERROR, "zend_stream_mmap() failed");
+ }
+
+ BEGIN(INITIAL);
+
+ if (file_handle->opened_path) {
+ file_path = file_handle->opened_path;
+ } else {
+ file_path = file_handle->filename;
+ }
+
+ compiled_filename = zend_string_init(file_path, strlen(file_path), 0);
+ zend_set_compiled_filename(compiled_filename);
+ zend_string_release(compiled_filename);
+
+ if (CG(start_lineno)) {
+ CG(zend_lineno) = CG(start_lineno);
+ CG(start_lineno) = 0;
+ } else {
+ CG(zend_lineno) = 1;
+ }
+
+ RESET_DOC_COMMENT();
+ CG(increment_lineno) = 0;
+ return SUCCESS;
+}
+END_EXTERN_C()
+
+
+ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type)
+{
+ zend_lex_state original_lex_state;
+ zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
+ zend_op_array *original_active_op_array = CG(active_op_array);
+ int compiler_result;
+ zend_bool compilation_successful=0;
+ zval retval_zv;
+ zend_bool original_in_compilation = CG(in_compilation);
+
+ ZVAL_LONG(&retval_zv, 1);
+
+ zend_save_lexical_state(&original_lex_state);
+
+ if (open_file_for_scanning(file_handle)==FAILURE) {
+ if (type==ZEND_REQUIRE) {
+ zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename);
+ zend_bailout();
+ } else {
+ zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename);
+ }
+ compilation_successful=0;
+ } else {
+ init_op_array(op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE);
+ CG(in_compilation) = 1;
+ CG(active_op_array) = op_array;
+ zend_stack_push(&CG(context_stack), (void *) &CG(context));
+ zend_init_compiler_context();
+ CG(ast_arena) = zend_arena_create(1024 * 32);
+ compiler_result = zendparse();
+ if (compiler_result != 0) { /* parser error */
+ zend_bailout();
+ }
+ if (zend_ast_process) {
+ zend_ast_process(CG(ast));
+ }
+ zend_compile_top_stmt(CG(ast));
+ zend_ast_destroy(CG(ast));
+ zend_arena_destroy(CG(ast_arena));
+ zend_do_end_compilation();
+ zend_emit_final_return(&retval_zv);
+ CG(in_compilation) = original_in_compilation;
+ compilation_successful=1;
+ }
+
+ CG(active_op_array) = original_active_op_array;
+ if (compilation_successful) {
+ pass_two(op_array);
+ zend_release_labels(0);
+ } else {
+ efree_size(op_array, sizeof(zend_op_array));
+ op_array = NULL;
+ }
+
+ zend_restore_lexical_state(&original_lex_state);
+ return op_array;
+}
+
+
+zend_op_array *compile_filename(int type, zval *filename)
+{
+ zend_file_handle file_handle;
+ zval tmp;
+ zend_op_array *retval;
+ char *opened_path = NULL;
+
+ if (Z_TYPE_P(filename) != IS_STRING) {
+ tmp = *filename;
+ zval_copy_ctor(&tmp);
+ convert_to_string(&tmp);
+ filename = &tmp;
+ }
+ file_handle.filename = Z_STRVAL_P(filename);
+ file_handle.free_filename = 0;
+ file_handle.type = ZEND_HANDLE_FILENAME;
+ file_handle.opened_path = NULL;
+ file_handle.handle.fp = NULL;
+
+ retval = zend_compile_file(&file_handle, type);
+ if (retval && file_handle.handle.stream.handle) {
+ if (!file_handle.opened_path) {
+ file_handle.opened_path = opened_path = estrndup(Z_STRVAL_P(filename), Z_STRLEN_P(filename));
+ }
+
+ zend_hash_str_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path));
+
+ if (opened_path) {
+ efree(opened_path);
+ }
+ }
+ zend_destroy_file_handle(&file_handle);
+
+ if (filename==&tmp) {
+ zval_dtor(&tmp);
+ }
+ return retval;
+}
+
+ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename)
+{
+ char *buf;
+ size_t size, old_len;
+ zend_string *new_compiled_filename;
+
+ /* enforce ZEND_MMAP_AHEAD trailing NULLs for flex... */
+ old_len = Z_STRLEN_P(str);
+ Z_STR_P(str) = zend_string_realloc(Z_STR_P(str), old_len + ZEND_MMAP_AHEAD, 0);
+ Z_TYPE_INFO_P(str) = IS_STRING_EX;
+ memset(Z_STRVAL_P(str) + old_len, 0, ZEND_MMAP_AHEAD + 1);
+
+ SCNG(yy_in) = NULL;
+ SCNG(yy_start) = NULL;
+
+ buf = Z_STRVAL_P(str);
+ size = old_len;
+
+ if (CG(multibyte)) {
+ SCNG(script_org) = (unsigned char*)buf;
+ SCNG(script_org_size) = size;
+ SCNG(script_filtered) = NULL;
+
+ zend_multibyte_set_filter(zend_multibyte_get_internal_encoding());
+
+ if (SCNG(input_filter)) {
+ if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size))) {
+ zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "
+ "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));
+ }
+ buf = (char*)SCNG(script_filtered);
+ size = SCNG(script_filtered_size);
+ }
+ }
+
+ yy_scan_buffer(buf, (unsigned int)size);
+
+ new_compiled_filename = zend_string_init(filename, strlen(filename), 0);
+ zend_set_compiled_filename(new_compiled_filename);
+ zend_string_release(new_compiled_filename);
+ CG(zend_lineno) = 1;
+ CG(increment_lineno) = 0;
+ RESET_DOC_COMMENT();
+ return SUCCESS;
+}
+
+
+ZEND_API size_t zend_get_scanned_file_offset(void)
+{
+ size_t offset = SCNG(yy_cursor) - SCNG(yy_start);
+ if (SCNG(input_filter)) {
+ size_t original_offset = offset, length = 0;
+ do {
+ unsigned char *p = NULL;
+ if ((size_t)-1 == SCNG(input_filter)(&p, &length, SCNG(script_org), offset)) {
+ return (size_t)-1;
+ }
+ efree(p);
+ if (length > original_offset) {
+ offset--;
+ } else if (length < original_offset) {
+ offset++;
+ }
+ } while (original_offset != length);
+ }
+ return offset;
+}
+
+
+zend_op_array *compile_string(zval *source_string, char *filename)
+{
+ zend_lex_state original_lex_state;
+ zend_op_array *op_array = NULL;
+ zval tmp;
+ zend_bool original_in_compilation = CG(in_compilation);
+
+ if (Z_STRLEN_P(source_string)==0) {
+ return NULL;
+ }
+
+ ZVAL_DUP(&tmp, source_string);
+ convert_to_string(&tmp);
+ source_string = &tmp;
+
+ CG(in_compilation) = 1;
+ zend_save_lexical_state(&original_lex_state);
+ if (zend_prepare_string_for_scanning(source_string, filename) == SUCCESS) {
+ CG(ast) = NULL;
+ CG(ast_arena) = zend_arena_create(1024 * 32);
+ BEGIN(ST_IN_SCRIPTING);
+
+ if (!zendparse()) {
+ zend_op_array *original_active_op_array = CG(active_op_array);
+ op_array = emalloc(sizeof(zend_op_array));
+ init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE);
+ CG(active_op_array) = op_array;
+
+ zend_stack_push(&CG(context_stack), (void *) &CG(context));
+ zend_init_compiler_context();
+ if (zend_ast_process) {
+ zend_ast_process(CG(ast));
+ }
+ zend_compile_top_stmt(CG(ast));
+ zend_do_end_compilation();
+ zend_emit_final_return(NULL);
+ pass_two(op_array);
+ zend_release_labels(0);
+
+ CG(active_op_array) = original_active_op_array;
+ }
+
+ zend_ast_destroy(CG(ast));
+ zend_arena_destroy(CG(ast_arena));
+ }
+
+ zend_restore_lexical_state(&original_lex_state);
+ zval_dtor(&tmp);
+ CG(in_compilation) = original_in_compilation;
+ return op_array;
+}
+
+
+BEGIN_EXTERN_C()
+int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini)
+{
+ zend_lex_state original_lex_state;
+ zend_file_handle file_handle;
+
+ file_handle.type = ZEND_HANDLE_FILENAME;
+ file_handle.filename = filename;
+ file_handle.free_filename = 0;
+ file_handle.opened_path = NULL;
+ zend_save_lexical_state(&original_lex_state);
+ if (open_file_for_scanning(&file_handle)==FAILURE) {
+ zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename);
+ zend_restore_lexical_state(&original_lex_state);
+ return FAILURE;
+ }
+ zend_highlight(syntax_highlighter_ini);
+ if (SCNG(script_filtered)) {
+ efree(SCNG(script_filtered));
+ SCNG(script_filtered) = NULL;
+ }
+ zend_destroy_file_handle(&file_handle);
+ zend_restore_lexical_state(&original_lex_state);
+ return SUCCESS;
+}
+
+int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name)
+{
+ zend_lex_state original_lex_state;
+ zval tmp = *str;
+
+ str = &tmp;
+ zval_copy_ctor(str);
+ zend_save_lexical_state(&original_lex_state);
+ if (zend_prepare_string_for_scanning(str, str_name)==FAILURE) {
+ zend_restore_lexical_state(&original_lex_state);
+ return FAILURE;
+ }
+ BEGIN(INITIAL);
+ zend_highlight(syntax_highlighter_ini);
+ if (SCNG(script_filtered)) {
+ efree(SCNG(script_filtered));
+ SCNG(script_filtered) = NULL;
+ }
+ zend_restore_lexical_state(&original_lex_state);
+ zval_dtor(str);
+ return SUCCESS;
+}
+
+ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding)
+{
+ size_t length;
+ unsigned char *new_yy_start;
+
+ /* convert and set */
+ if (!SCNG(input_filter)) {
+ if (SCNG(script_filtered)) {
+ efree(SCNG(script_filtered));
+ SCNG(script_filtered) = NULL;
+ }
+ SCNG(script_filtered_size) = 0;
+ length = SCNG(script_org_size);
+ new_yy_start = SCNG(script_org);
+ } else {
+ if ((size_t)-1 == SCNG(input_filter)(&new_yy_start, &length, SCNG(script_org), SCNG(script_org_size))) {
+ zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "
+ "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));
+ }
+ if (SCNG(script_filtered)) {
+ efree(SCNG(script_filtered));
+ }
+ SCNG(script_filtered) = new_yy_start;
+ SCNG(script_filtered_size) = length;
+ }
+
+ SCNG(yy_cursor) = new_yy_start + (SCNG(yy_cursor) - SCNG(yy_start));
+ SCNG(yy_marker) = new_yy_start + (SCNG(yy_marker) - SCNG(yy_start));
+ SCNG(yy_text) = new_yy_start + (SCNG(yy_text) - SCNG(yy_start));
+ SCNG(yy_limit) = new_yy_start + length;
+
+ SCNG(yy_start) = new_yy_start;
+}
+
+
+// TODO: avoid reallocation ???
+# define zend_copy_value(zendlval, yytext, yyleng) \
+ if (SCNG(output_filter)) { \
+ size_t sz = 0; \
+ char *s = NULL; \
+ SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng); \
+ ZVAL_STRINGL(zendlval, s, sz); \
+ efree(s); \
+ } else { \
+ ZVAL_STRINGL(zendlval, yytext, yyleng); \
+ }
+
+static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quote_type)
+{
+ register char *s, *t;
+ char *end;
+
+ ZVAL_STRINGL(zendlval, str, len);
+
+ /* convert escape sequences */
+ s = t = Z_STRVAL_P(zendlval);
+ end = s+Z_STRLEN_P(zendlval);
+ while (s<end) {
+ if (*s=='\\') {
+ s++;
+ if (s >= end) {
+ *t++ = '\\';
+ break;
+ }
+
+ switch(*s) {
+ case 'n':
+ *t++ = '\n';
+ Z_STRLEN_P(zendlval)--;
+ break;
+ case 'r':
+ *t++ = '\r';
+ Z_STRLEN_P(zendlval)--;
+ break;
+ case 't':
+ *t++ = '\t';
+ Z_STRLEN_P(zendlval)--;
+ break;
+ case 'f':
+ *t++ = '\f';
+ Z_STRLEN_P(zendlval)--;
+ break;
+ case 'v':
+ *t++ = '\v';
+ Z_STRLEN_P(zendlval)--;
+ break;
+ case 'e':
+#ifdef PHP_WIN32
+ *t++ = VK_ESCAPE;
+#else
+ *t++ = '\e';
+#endif
+ Z_STRLEN_P(zendlval)--;
+ break;
+ case '"':
+ case '`':
+ if (*s != quote_type) {
+ *t++ = '\\';
+ *t++ = *s;
+ break;
+ }
+ case '\\':
+ case '$':
+ *t++ = *s;
+ Z_STRLEN_P(zendlval)--;
+ break;
+ case 'x':
+ case 'X':
+ if (ZEND_IS_HEX(*(s+1))) {
+ char hex_buf[3] = { 0, 0, 0 };
+
+ Z_STRLEN_P(zendlval)--; /* for the 'x' */
+
+ hex_buf[0] = *(++s);
+ Z_STRLEN_P(zendlval)--;
+ if (ZEND_IS_HEX(*(s+1))) {
+ hex_buf[1] = *(++s);
+ Z_STRLEN_P(zendlval)--;
+ }
+ *t++ = (char) ZEND_STRTOL(hex_buf, NULL, 16);
+ } else {
+ *t++ = '\\';
+ *t++ = *s;
+ }
+ break;
+ /* UTF-8 codepoint escape, format: /\\u\{\x+\}/ */
+ case 'u':
+ {
+ /* cache where we started so we can parse after validating */
+ char *start = s + 1;
+ size_t len = 0;
+ zend_bool valid = 1;
+ unsigned long codepoint;
+ size_t byte_len = 0;
+
+ if (*start != '{') {
+ /* we silently let this pass to avoid breaking code
+ * with JSON in string literals (e.g. "\"\u202e\""
+ */
+ *t++ = '\\';
+ *t++ = 'u';
+ break;
+ } else {
+ /* on the other hand, invalid \u{blah} errors */
+ s++;
+ len++;
+ s++;
+ while (*s != '}') {
+ if (!ZEND_IS_HEX(*s)) {
+ valid = 0;
+ break;
+ } else {
+ len++;
+ }
+ s++;
+ }
+ if (*s == '}') {
+ valid = 1;
+ len++;
+ }
+ }
+
+ /* \u{} is invalid */
+ if (len <= 2) {
+ valid = 0;
+ }
+
+ if (!valid) {
+ zend_error(E_COMPILE_ERROR, "Invalid UTF-8 codepoint escape sequence");
+ }
+
+ errno = 0;
+ codepoint = strtoul(start + 1, NULL, 16);
+
+ /* per RFC 3629, UTF-8 can only represent 21 bits */
+ if (codepoint > 0x10FFFF || errno) {
+ zend_error_noreturn(E_COMPILE_ERROR, "Invalid UTF-8 codepoint escape sequence: Codepoint too large");
+ }
+
+ /* based on https://en.wikipedia.org/wiki/UTF-8#Sample_code */
+ if (codepoint < 0x80) {
+ byte_len = 1;
+ *t++ = codepoint;
+ } else if (codepoint <= 0x7FF) {
+ byte_len = 2;
+ *t++ = (codepoint >> 6) + 0xC0;
+ *t++ = (codepoint & 0x3F) + 0x80;
+ } else if (codepoint <= 0xFFFF) {
+ byte_len = 3;
+ *t++ = (codepoint >> 12) + 0xE0;
+ *t++ = ((codepoint >> 6) & 0x3F) + 0x80;
+ *t++ = (codepoint & 0x3F) + 0x80;
+ } else if (codepoint <= 0x10FFFF) {
+ byte_len = 4;
+ *t++ = (codepoint >> 18) + 0xF0;
+ *t++ = ((codepoint >> 12) & 0x3F) + 0x80;
+ *t++ = ((codepoint >> 6) & 0x3F) + 0x80;
+ *t++ = (codepoint & 0x3F) + 0x80;
+ }
+
+ Z_STRLEN_P(zendlval) -= 2; /* \u */
+ Z_STRLEN_P(zendlval) -= (len - byte_len);
+ }
+ break;
+ default:
+ /* check for an octal */
+ if (ZEND_IS_OCT(*s)) {
+ char octal_buf[4] = { 0, 0, 0, 0 };
+
+ octal_buf[0] = *s;
+ Z_STRLEN_P(zendlval)--;
+ if (ZEND_IS_OCT(*(s+1))) {
+ octal_buf[1] = *(++s);
+ Z_STRLEN_P(zendlval)--;
+ if (ZEND_IS_OCT(*(s+1))) {
+ octal_buf[2] = *(++s);
+ Z_STRLEN_P(zendlval)--;
+ }
+ }
+ *t++ = (char) ZEND_STRTOL(octal_buf, NULL, 8);
+ } else {
+ *t++ = '\\';
+ *t++ = *s;
+ }
+ break;
+ }
+ } else {
+ *t++ = *s;
+ }
+
+ if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
+ CG(zend_lineno)++;
+ }
+ s++;
+ }
+ *t = 0;
+ if (SCNG(output_filter)) {
+ size_t sz = 0;
+ unsigned char *str;
+ // TODO: avoid realocation ???
+ s = Z_STRVAL_P(zendlval);
+ SCNG(output_filter)(&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval));
+ zval_ptr_dtor(zendlval);
+ ZVAL_STRINGL(zendlval, (char *) str, sz);
+ efree(str);
+ }
+}
+
+
+int lex_scan(zval *zendlval)
+{
+restart:
+ SCNG(yy_text) = YYCURSOR;
+
+/*!re2c
+re2c:yyfill:check = 0;
+LNUM [0-9]+
+DNUM ([0-9]*"."[0-9]+)|([0-9]+"."[0-9]*)
+EXPONENT_DNUM (({LNUM}|{DNUM})[eE][+-]?{LNUM})
+HNUM "0x"[0-9a-fA-F]+
+BNUM "0b"[01]+
+LABEL [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
+WHITESPACE [ \n\r\t]+
+TABS_AND_SPACES [ \t]*
+TOKENS [;:,.\[\]()|^&+-/*=%!~$<>?@]
+ANY_CHAR [^]
+NEWLINE ("\r"|"\n"|"\r\n")
+
+/* compute yyleng before each rule */
+<!*> := yyleng = YYCURSOR - SCNG(yy_text);
+
+<ST_IN_SCRIPTING>"exit" {
+ return T_EXIT;
+}
+
+<ST_IN_SCRIPTING>"die" {
+ return T_EXIT;
+}
+
+<ST_IN_SCRIPTING>"function" {
+ return T_FUNCTION;
+}
+
+<ST_IN_SCRIPTING>"const" {
+ return T_CONST;
+}
+
+<ST_IN_SCRIPTING>"return" {
+ return T_RETURN;
+}
+
+<ST_IN_SCRIPTING>"yield" {
+ return T_YIELD;
+}
+
+<ST_IN_SCRIPTING>"try" {
+ return T_TRY;
+}
+
+<ST_IN_SCRIPTING>"catch" {
+ return T_CATCH;
+}
+
+<ST_IN_SCRIPTING>"finally" {
+ return T_FINALLY;
+}
+
+<ST_IN_SCRIPTING>"throw" {
+ return T_THROW;
+}
+
+<ST_IN_SCRIPTING>"if" {
+ return T_IF;
+}
+
+<ST_IN_SCRIPTING>"elseif" {
+ return T_ELSEIF;
+}
+
+<ST_IN_SCRIPTING>"endif" {
+ return T_ENDIF;
+}
+
+<ST_IN_SCRIPTING>"else" {
+ return T_ELSE;
+}
+
+<ST_IN_SCRIPTING>"while" {
+ return T_WHILE;
+}
+
+<ST_IN_SCRIPTING>"endwhile" {
+ return T_ENDWHILE;
+}
+
+<ST_IN_SCRIPTING>"do" {
+ return T_DO;
+}
+
+<ST_IN_SCRIPTING>"for" {
+ return T_FOR;
+}
+
+<ST_IN_SCRIPTING>"endfor" {
+ return T_ENDFOR;
+}
+
+<ST_IN_SCRIPTING>"foreach" {
+ return T_FOREACH;
+}
+
+<ST_IN_SCRIPTING>"endforeach" {
+ return T_ENDFOREACH;
+}
+
+<ST_IN_SCRIPTING>"declare" {
+ return T_DECLARE;
+}
+
+<ST_IN_SCRIPTING>"enddeclare" {
+ return T_ENDDECLARE;
+}
+
+<ST_IN_SCRIPTING>"instanceof" {
+ return T_INSTANCEOF;
+}
+
+<ST_IN_SCRIPTING>"as" {
+ return T_AS;
+}
+
+<ST_IN_SCRIPTING>"switch" {
+ return T_SWITCH;
+}
+
+<ST_IN_SCRIPTING>"endswitch" {
+ return T_ENDSWITCH;
+}
+
+<ST_IN_SCRIPTING>"case" {
+ return T_CASE;
+}
+
+<ST_IN_SCRIPTING>"default" {
+ return T_DEFAULT;
+}
+
+<ST_IN_SCRIPTING>"break" {
+ return T_BREAK;
+}
+
+<ST_IN_SCRIPTING>"continue" {
+ return T_CONTINUE;
+}
+
+<ST_IN_SCRIPTING>"goto" {
+ return T_GOTO;
+}
+
+<ST_IN_SCRIPTING>"echo" {
+ return T_ECHO;
+}
+
+<ST_IN_SCRIPTING>"print" {
+ return T_PRINT;
+}
+
+<ST_IN_SCRIPTING>"class" {
+ return T_CLASS;
+}
+
+<ST_IN_SCRIPTING>"interface" {
+ return T_INTERFACE;
+}
+
+<ST_IN_SCRIPTING>"trait" {
+ return T_TRAIT;
+}
+
+<ST_IN_SCRIPTING>"extends" {
+ return T_EXTENDS;
+}
+
+<ST_IN_SCRIPTING>"implements" {
+ return T_IMPLEMENTS;
+}
+
+<ST_IN_SCRIPTING>"->" {
+ yy_push_state(ST_LOOKING_FOR_PROPERTY);
+ return T_OBJECT_OPERATOR;
+}
+
+<ST_IN_SCRIPTING,ST_LOOKING_FOR_PROPERTY>{WHITESPACE}+ {
+ HANDLE_NEWLINES(yytext, yyleng);
+ return T_WHITESPACE;
+}
+
+<ST_LOOKING_FOR_PROPERTY>"->" {
+ return T_OBJECT_OPERATOR;
+}
+
+<ST_LOOKING_FOR_PROPERTY>{LABEL} {
+ yy_pop_state();
+ zend_copy_value(zendlval, yytext, yyleng);
+ return T_STRING;
+}
+
+<ST_LOOKING_FOR_PROPERTY>{ANY_CHAR} {
+ yyless(0);
+ yy_pop_state();
+ goto restart;
+}
+
+<ST_IN_SCRIPTING>"::" {
+ return T_PAAMAYIM_NEKUDOTAYIM;
+}
+
+<ST_IN_SCRIPTING>"\\" {
+ return T_NS_SEPARATOR;
+}
+
+<ST_IN_SCRIPTING>"..." {
+ return T_ELLIPSIS;
+}
+
+<ST_IN_SCRIPTING>"??" {
+ return T_COALESCE;
+}
+
+<ST_IN_SCRIPTING>"new" {
+ return T_NEW;
+}
+
+<ST_IN_SCRIPTING>"clone" {
+ return T_CLONE;
+}
+
+<ST_IN_SCRIPTING>"var" {
+ return T_VAR;
+}
+
+<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("int"|"integer"){TABS_AND_SPACES}")" {
+ return T_INT_CAST;
+}
+
+<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("real"|"double"|"float"){TABS_AND_SPACES}")" {
+ return T_DOUBLE_CAST;
+}
+
+<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("string"|"binary"){TABS_AND_SPACES}")" {
+ return T_STRING_CAST;
+}
+
+<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}"array"{TABS_AND_SPACES}")" {
+ return T_ARRAY_CAST;
+}
+
+<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}"object"{TABS_AND_SPACES}")" {
+ return T_OBJECT_CAST;
+}
+
+<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("bool"|"boolean"){TABS_AND_SPACES}")" {
+ return T_BOOL_CAST;
+}
+
+<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("unset"){TABS_AND_SPACES}")" {
+ return T_UNSET_CAST;
+}
+
+<ST_IN_SCRIPTING>"eval" {
+ return T_EVAL;
+}
+
+<ST_IN_SCRIPTING>"include" {
+ return T_INCLUDE;
+}
+
+<ST_IN_SCRIPTING>"include_once" {
+ return T_INCLUDE_ONCE;
+}
+
+<ST_IN_SCRIPTING>"require" {
+ return T_REQUIRE;
+}
+
+<ST_IN_SCRIPTING>"require_once" {
+ return T_REQUIRE_ONCE;
+}
+
+<ST_IN_SCRIPTING>"namespace" {
+ return T_NAMESPACE;
+}
+
+<ST_IN_SCRIPTING>"use" {
+ return T_USE;
+}
+
+<ST_IN_SCRIPTING>"insteadof" {
+ return T_INSTEADOF;
+}
+
+<ST_IN_SCRIPTING>"global" {
+ return T_GLOBAL;
+}
+
+<ST_IN_SCRIPTING>"isset" {
+ return T_ISSET;
+}
+
+<ST_IN_SCRIPTING>"empty" {
+ return T_EMPTY;
+}
+
+<ST_IN_SCRIPTING>"__halt_compiler" {
+ return T_HALT_COMPILER;
+}
+
+<ST_IN_SCRIPTING>"static" {
+ return T_STATIC;
+}
+
+<ST_IN_SCRIPTING>"abstract" {
+ return T_ABSTRACT;
+}
+
+<ST_IN_SCRIPTING>"final" {
+ return T_FINAL;
+}
+
+<ST_IN_SCRIPTING>"private" {
+ return T_PRIVATE;
+}
+
+<ST_IN_SCRIPTING>"protected" {
+ return T_PROTECTED;
+}
+
+<ST_IN_SCRIPTING>"public" {
+ return T_PUBLIC;
+}
+
+<ST_IN_SCRIPTING>"unset" {
+ return T_UNSET;
+}
+
+<ST_IN_SCRIPTING>"=>" {
+ return T_DOUBLE_ARROW;
+}
+
+<ST_IN_SCRIPTING>"list" {
+ return T_LIST;
+}
+
+<ST_IN_SCRIPTING>"array" {
+ return T_ARRAY;
+}
+
+<ST_IN_SCRIPTING>"callable" {
+ return T_CALLABLE;
+}
+
+<ST_IN_SCRIPTING>"++" {
+ return T_INC;
+}
+
+<ST_IN_SCRIPTING>"--" {
+ return T_DEC;
+}
+
+<ST_IN_SCRIPTING>"===" {
+ return T_IS_IDENTICAL;
+}
+
+<ST_IN_SCRIPTING>"!==" {
+ return T_IS_NOT_IDENTICAL;
+}
+
+<ST_IN_SCRIPTING>"==" {
+ return T_IS_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"!="|"<>" {
+ return T_IS_NOT_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"<=" {
+ return T_IS_SMALLER_OR_EQUAL;
+}
+
+<ST_IN_SCRIPTING>">=" {
+ return T_IS_GREATER_OR_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"+=" {
+ return T_PLUS_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"-=" {
+ return T_MINUS_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"*=" {
+ return T_MUL_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"*\*" {
+ return T_POW;
+}
+
+<ST_IN_SCRIPTING>"*\*=" {
+ return T_POW_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"/=" {
+ return T_DIV_EQUAL;
+}
+
+<ST_IN_SCRIPTING>".=" {
+ return T_CONCAT_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"%=" {
+ return T_MOD_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"<<=" {
+ return T_SL_EQUAL;
+}
+
+<ST_IN_SCRIPTING>">>=" {
+ return T_SR_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"&=" {
+ return T_AND_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"|=" {
+ return T_OR_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"^=" {
+ return T_XOR_EQUAL;
+}
+
+<ST_IN_SCRIPTING>"||" {
+ return T_BOOLEAN_OR;
+}
+
+<ST_IN_SCRIPTING>"&&" {
+ return T_BOOLEAN_AND;
+}
+
+<ST_IN_SCRIPTING>"OR" {
+ return T_LOGICAL_OR;
+}
+
+<ST_IN_SCRIPTING>"AND" {
+ return T_LOGICAL_AND;
+}
+
+<ST_IN_SCRIPTING>"XOR" {
+ return T_LOGICAL_XOR;
+}
+
+<ST_IN_SCRIPTING>"<<" {
+ return T_SL;
+}
+
+<ST_IN_SCRIPTING>">>" {
+ return T_SR;
+}
+
+<ST_IN_SCRIPTING>{TOKENS} {
+ return yytext[0];
+}
+
+
+<ST_IN_SCRIPTING>"{" {
+ yy_push_state(ST_IN_SCRIPTING);
+ return '{';
+}
+
+
+<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"${" {
+ yy_push_state(ST_LOOKING_FOR_VARNAME);
+ return T_DOLLAR_OPEN_CURLY_BRACES;
+}
+
+
+<ST_IN_SCRIPTING>"}" {
+ RESET_DOC_COMMENT();
+ if (!zend_stack_is_empty(&SCNG(state_stack))) {
+ yy_pop_state();
+ }
+ return '}';
+}
+
+
+<ST_LOOKING_FOR_VARNAME>{LABEL}[[}] {
+ yyless(yyleng - 1);
+ zend_copy_value(zendlval, yytext, yyleng);
+ yy_pop_state();
+ yy_push_state(ST_IN_SCRIPTING);
+ return T_STRING_VARNAME;
+}
+
+
+<ST_LOOKING_FOR_VARNAME>{ANY_CHAR} {
+ yyless(0);
+ yy_pop_state();
+ yy_push_state(ST_IN_SCRIPTING);
+ goto restart;
+}
+
+<ST_IN_SCRIPTING>{BNUM} {
+ char *bin = yytext + 2; /* Skip "0b" */
+ int len = yyleng - 2;
+ char *end;
+
+ /* Skip any leading 0s */
+ while (*bin == '0') {
+ ++bin;
+ --len;
+ }
+
+ if (len < SIZEOF_ZEND_LONG * 8) {
+ if (len == 0) {
+ ZVAL_LONG(zendlval, 0);
+ } else {
+ errno = 0;
+ ZVAL_LONG(zendlval, ZEND_STRTOL(bin, &end, 2));
+ ZEND_ASSERT(!errno && end == yytext + yyleng);
+ }
+ return T_LNUMBER;
+ } else {
+ ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, (const char **)&end));
+ /* errno isn't checked since we allow HUGE_VAL/INF overflow */
+ ZEND_ASSERT(end == yytext + yyleng);
+ return T_DNUMBER;
+ }
+}
+
+<ST_IN_SCRIPTING>{LNUM} {
+ char *end;
+ if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
+ errno = 0;
+ ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 0));
+ /* This isn't an assert, we need to ensure 019 isn't valid octal
+ * Because the lexing itself doesn't do that for us
+ */
+ if (end != yytext + yyleng) {
+ zend_error_noreturn(E_COMPILE_ERROR, "Invalid numeric literal");
+ }
+ ZEND_ASSERT(!errno);
+ } else {
+ errno = 0;
+ ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 0));
+ if (errno == ERANGE) { /* Overflow */
+ errno = 0;
+ if (yytext[0] == '0') { /* octal overflow */
+ errno = 0;
+ ZVAL_DOUBLE(zendlval, zend_oct_strtod(yytext, (const char **)&end));
+ } else {
+ ZVAL_DOUBLE(zendlval, zend_strtod(yytext, (const char **)&end));
+ }
+ /* Also not an assert for the same reason */
+ if (end != yytext + yyleng) {
+ zend_error_noreturn(E_COMPILE_ERROR, "Invalid numeric literal");
+ }
+ ZEND_ASSERT(!errno);
+ return T_DNUMBER;
+ }
+ /* Also not an assert for the same reason */
+ if (end != yytext + yyleng) {
+ zend_error_noreturn(E_COMPILE_ERROR, "Invalid numeric literal");
+ }
+ ZEND_ASSERT(!errno);
+ }
+ return T_LNUMBER;
+}
+
+<ST_IN_SCRIPTING>{HNUM} {
+ char *hex = yytext + 2; /* Skip "0x" */
+ int len = yyleng - 2;
+ char *end;
+
+ /* Skip any leading 0s */
+ while (*hex == '0') {
+ hex++;
+ len--;
+ }
+
+ if (len < SIZEOF_ZEND_LONG * 2 || (len == SIZEOF_ZEND_LONG * 2 && *hex <= '7')) {
+ if (len == 0) {
+ ZVAL_LONG(zendlval, 0);
+ } else {
+ errno = 0;
+ ZVAL_LONG(zendlval, ZEND_STRTOL(hex, &end, 16));
+ ZEND_ASSERT(!errno && end == hex + len);
+ }
+ return T_LNUMBER;
+ } else {
+ ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, (const char **)&end));
+ /* errno isn't checked since we allow HUGE_VAL/INF overflow */
+ ZEND_ASSERT(end == hex + len);
+ return T_DNUMBER;
+ }
+}
+
+<ST_VAR_OFFSET>[0]|([1-9][0-9]*) { /* Offset could be treated as a long */
+ if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) {
+ char *end;
+ errno = 0;
+ ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 10));
+ if (errno == ERANGE) {
+ goto string;
+ }
+ ZEND_ASSERT(end == yytext + yyleng);
+ } else {
+string:
+ ZVAL_STRINGL(zendlval, yytext, yyleng);
+ }
+ return T_NUM_STRING;
+}
+
+<ST_VAR_OFFSET>{LNUM}|{HNUM}|{BNUM} { /* Offset must be treated as a string */
+ ZVAL_STRINGL(zendlval, yytext, yyleng);
+ return T_NUM_STRING;
+}
+
+<ST_IN_SCRIPTING>{DNUM}|{EXPONENT_DNUM} {
+ const char *end;
+
+ ZVAL_DOUBLE(zendlval, zend_strtod(yytext, &end));
+ /* errno isn't checked since we allow HUGE_VAL/INF overflow */
+ ZEND_ASSERT(end == yytext + yyleng);
+ return T_DNUMBER;
+}
+
+<ST_IN_SCRIPTING>"__CLASS__" {
+ return T_CLASS_C;
+}
+
+<ST_IN_SCRIPTING>"__TRAIT__" {
+ return T_TRAIT_C;
+}
+
+<ST_IN_SCRIPTING>"__FUNCTION__" {
+ return T_FUNC_C;
+}
+
+<ST_IN_SCRIPTING>"__METHOD__" {
+ return T_METHOD_C;
+}
+
+<ST_IN_SCRIPTING>"__LINE__" {
+ return T_LINE;
+}
+
+<ST_IN_SCRIPTING>"__FILE__" {
+ return T_FILE;
+}
+
+<ST_IN_SCRIPTING>"__DIR__" {
+ return T_DIR;
+}
+
+<ST_IN_SCRIPTING>"__NAMESPACE__" {
+ return T_NS_C;
+}
+
+
+<INITIAL>"<?=" {
+ BEGIN(ST_IN_SCRIPTING);
+ return T_OPEN_TAG_WITH_ECHO;
+}
+
+
+<INITIAL>"<?php"([ \t]|{NEWLINE}) {
+ HANDLE_NEWLINE(yytext[yyleng-1]);
+ BEGIN(ST_IN_SCRIPTING);
+ return T_OPEN_TAG;
+}
+
+
+<INITIAL>"<?" {
+ if (CG(short_tags)) {
+ BEGIN(ST_IN_SCRIPTING);
+ return T_OPEN_TAG;
+ } else {
+ goto inline_char_handler;
+ }
+}
+
+<INITIAL>{ANY_CHAR} {
+ if (YYCURSOR > YYLIMIT) {
+ return 0;
+ }
+
+inline_char_handler:
+
+ while (1) {
+ YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR);
+
+ YYCURSOR = ptr ? ptr + 1 : YYLIMIT;
+
+ if (YYCURSOR >= YYLIMIT) {
+ break;
+ }
+
+ if (*YYCURSOR == '?') {
+ if (CG(short_tags) || !strncasecmp((char*)YYCURSOR + 1, "php", 3) || (*(YYCURSOR + 1) == '=')) { /* Assume [ \t\n\r] follows "php" */
+
+ YYCURSOR--;
+ break;
+ }
+ }
+ }
+
+ yyleng = YYCURSOR - SCNG(yy_text);
+
+ if (SCNG(output_filter)) {
+ size_t readsize;
+ char *s = NULL;
+ size_t sz = 0;
+ // TODO: avoid reallocation ???
+ readsize = SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng);
+ ZVAL_STRINGL(zendlval, s, sz);
+ efree(s);
+ if (readsize < yyleng) {
+ yyless(readsize);
+ }
+ } else {
+ ZVAL_STRINGL(zendlval, yytext, yyleng);
+ }
+ HANDLE_NEWLINES(yytext, yyleng);
+ return T_INLINE_HTML;
+}
+
+
+/* Make sure a label character follows "->", otherwise there is no property
+ * and "->" will be taken literally
+ */
+<ST_DOUBLE_QUOTES,ST_HEREDOC,ST_BACKQUOTE>"$"{LABEL}"->"[a-zA-Z_\x7f-\xff] {
+ yyless(yyleng - 3);
+ yy_push_state(ST_LOOKING_FOR_PROPERTY);
+ zend_copy_value(zendlval, (yytext+1), (yyleng-1));
+ return T_VARIABLE;
+}
+
+/* A [ always designates a variable offset, regardless of what follows
+ */
+<ST_DOUBLE_QUOTES,ST_HEREDOC,ST_BACKQUOTE>"$"{LABEL}"[" {
+ yyless(yyleng - 1);
+ yy_push_state(ST_VAR_OFFSET);
+ zend_copy_value(zendlval, (yytext+1), (yyleng-1));
+ return T_VARIABLE;
+}
+
+<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_HEREDOC,ST_BACKQUOTE,ST_VAR_OFFSET>"$"{LABEL} {
+ zend_copy_value(zendlval, (yytext+1), (yyleng-1));
+ return T_VARIABLE;
+}
+
+<ST_VAR_OFFSET>"]" {
+ yy_pop_state();
+ return ']';
+}
+
+<ST_VAR_OFFSET>{TOKENS}|[{}"`] {
+ /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
+ return yytext[0];
+}
+
+<ST_VAR_OFFSET>[ \n\r\t\\'#] {
+ /* Invalid rule to return a more explicit parse error with proper line number */
+ yyless(0);
+ yy_pop_state();
+ ZVAL_NULL(zendlval);
+ return T_ENCAPSED_AND_WHITESPACE;
+}
+
+<ST_IN_SCRIPTING,ST_VAR_OFFSET>{LABEL} {
+ zend_copy_value(zendlval, yytext, yyleng);
+ return T_STRING;
+}
+
+
+<ST_IN_SCRIPTING>"#"|"//" {
+ while (YYCURSOR < YYLIMIT) {
+ switch (*YYCURSOR++) {
+ case '\r':
+ if (*YYCURSOR == '\n') {
+ YYCURSOR++;
+ }
+ /* fall through */
+ case '\n':
+ CG(zend_lineno)++;
+ break;
+ case '?':
+ if (*YYCURSOR == '>') {
+ YYCURSOR--;
+ break;
+ }
+ /* fall through */
+ default:
+ continue;
+ }
+
+ break;
+ }
+
+ yyleng = YYCURSOR - SCNG(yy_text);
+
+ return T_COMMENT;
+}
+
+<ST_IN_SCRIPTING>"/*"|"/**"{WHITESPACE} {
+ int doc_com;
+
+ if (yyleng > 2) {
+ doc_com = 1;
+ RESET_DOC_COMMENT();
+ } else {
+ doc_com = 0;
+ }
+
+ while (YYCURSOR < YYLIMIT) {
+ if (*YYCURSOR++ == '*' && *YYCURSOR == '/') {
+ break;
+ }
+ }
+
+ if (YYCURSOR < YYLIMIT) {
+ YYCURSOR++;
+ } else {
+ zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno));
+ }
+
+ yyleng = YYCURSOR - SCNG(yy_text);
+ HANDLE_NEWLINES(yytext, yyleng);
+
+ if (doc_com) {
+ CG(doc_comment) = zend_string_init(yytext, yyleng, 0);
+ return T_DOC_COMMENT;
+ }
+
+ return T_COMMENT;
+}
+
+<ST_IN_SCRIPTING>"?>"{NEWLINE}? {
+ BEGIN(INITIAL);
+ return T_CLOSE_TAG; /* implicit ';' at php-end tag */
+}
+
+
+<ST_IN_SCRIPTING>b?['] {
+ register char *s, *t;
+ char *end;
+ int bprefix = (yytext[0] != '\'') ? 1 : 0;
+
+ while (1) {
+ if (YYCURSOR < YYLIMIT) {
+ if (*YYCURSOR == '\'') {
+ YYCURSOR++;
+ yyleng = YYCURSOR - SCNG(yy_text);
+
+ break;
+ } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) {
+ YYCURSOR++;
+ }
+ } else {
+ yyleng = YYLIMIT - SCNG(yy_text);
+
+ /* Unclosed single quotes; treat similar to double quotes, but without a separate token
+ * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..."
+ * rule, which continued in ST_IN_SCRIPTING state after the quote */
+ ZVAL_NULL(zendlval);
+ return T_ENCAPSED_AND_WHITESPACE;
+ }
+ }
+
+ ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2);
+
+ /* convert escape sequences */
+ s = t = Z_STRVAL_P(zendlval);
+ end = s+Z_STRLEN_P(zendlval);
+ while (s<end) {
+ if (*s=='\\') {
+ s++;
+
+ switch(*s) {
+ case '\\':
+ case '\'':
+ *t++ = *s;
+ Z_STRLEN_P(zendlval)--;
+ break;
+ default:
+ *t++ = '\\';
+ *t++ = *s;
+ break;
+ }
+ } else {
+ *t++ = *s;
+ }
+
+ if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
+ CG(zend_lineno)++;
+ }
+ s++;
+ }
+ *t = 0;
+
+ if (SCNG(output_filter)) {
+ size_t sz = 0;
+ char *str = NULL;
+ s = Z_STRVAL_P(zendlval);
+ // TODO: avoid reallocation ???
+ SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval));
+ ZVAL_STRINGL(zendlval, str, sz);
+ }
+ return T_CONSTANT_ENCAPSED_STRING;
+}
+
+
+<ST_IN_SCRIPTING>b?["] {
+ int bprefix = (yytext[0] != '"') ? 1 : 0;
+
+ while (YYCURSOR < YYLIMIT) {
+ switch (*YYCURSOR++) {
+ case '"':
+ yyleng = YYCURSOR - SCNG(yy_text);
+ zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"');
+ return T_CONSTANT_ENCAPSED_STRING;
+ case '$':
+ if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
+ break;
+ }
+ continue;
+ case '{':
+ if (*YYCURSOR == '$') {
+ break;
+ }
+ continue;
+ case '\\':
+ if (YYCURSOR < YYLIMIT) {
+ YYCURSOR++;
+ }
+ /* fall through */
+ default:
+ continue;
+ }
+
+ YYCURSOR--;
+ break;
+ }
+
+ /* Remember how much was scanned to save rescanning */
+ SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng);
+
+ YYCURSOR = SCNG(yy_text) + yyleng;
+
+ BEGIN(ST_DOUBLE_QUOTES);
+ return '"';
+}
+
+
+<ST_IN_SCRIPTING>b?"<<<"{TABS_AND_SPACES}({LABEL}|([']{LABEL}['])|(["]{LABEL}["])){NEWLINE} {
+ char *s;
+ int bprefix = (yytext[0] != '<') ? 1 : 0;
+ zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label));
+
+ CG(zend_lineno)++;
+ heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0);
+ s = yytext+bprefix+3;
+ while ((*s == ' ') || (*s == '\t')) {
+ s++;
+ heredoc_label->length--;
+ }
+
+ if (*s == '\'') {
+ s++;
+ heredoc_label->length -= 2;
+
+ BEGIN(ST_NOWDOC);
+ } else {
+ if (*s == '"') {
+ s++;
+ heredoc_label->length -= 2;
+ }
+
+ BEGIN(ST_HEREDOC);
+ }
+
+ heredoc_label->label = estrndup(s, heredoc_label->length);
+
+ /* Check for ending label on the next line */
+ if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) {
+ YYCTYPE *end = YYCURSOR + heredoc_label->length;
+
+ if (*end == ';') {
+ end++;
+ }
+
+ if (*end == '\n' || *end == '\r') {
+ BEGIN(ST_END_HEREDOC);
+ }
+ }
+
+ zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label);
+
+ return T_START_HEREDOC;
+}
+
+
+<ST_IN_SCRIPTING>[`] {
+ BEGIN(ST_BACKQUOTE);
+ return '`';
+}
+
+
+<ST_END_HEREDOC>{ANY_CHAR} {
+ zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
+
+ YYCURSOR += heredoc_label->length - 1;
+ yyleng = heredoc_label->length;
+
+ heredoc_label_dtor(heredoc_label);
+ efree(heredoc_label);
+
+ BEGIN(ST_IN_SCRIPTING);
+ return T_END_HEREDOC;
+}
+
+
+<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"{$" {
+ Z_LVAL_P(zendlval) = (zend_long) '{';
+ yy_push_state(ST_IN_SCRIPTING);
+ yyless(1);
+ return T_CURLY_OPEN;
+}
+
+
+<ST_DOUBLE_QUOTES>["] {
+ BEGIN(ST_IN_SCRIPTING);
+ return '"';
+}
+
+<ST_BACKQUOTE>[`] {
+ BEGIN(ST_IN_SCRIPTING);
+ return '`';
+}
+
+
+<ST_DOUBLE_QUOTES>{ANY_CHAR} {
+ if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
+ YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
+ SET_DOUBLE_QUOTES_SCANNED_LENGTH(0);
+
+ goto double_quotes_scan_done;
+ }
+
+ if (YYCURSOR > YYLIMIT) {
+ return 0;
+ }
+ if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
+ YYCURSOR++;
+ }
+
+ while (YYCURSOR < YYLIMIT) {
+ switch (*YYCURSOR++) {
+ case '"':
+ break;
+ case '$':
+ if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
+ break;
+ }
+ continue;
+ case '{':
+ if (*YYCURSOR == '$') {
+ break;
+ }
+ continue;
+ case '\\':
+ if (YYCURSOR < YYLIMIT) {
+ YYCURSOR++;
+ }
+ /* fall through */
+ default:
+ continue;
+ }
+
+ YYCURSOR--;
+ break;
+ }
+
+double_quotes_scan_done:
+ yyleng = YYCURSOR - SCNG(yy_text);
+
+ zend_scan_escape_string(zendlval, yytext, yyleng, '"');
+ return T_ENCAPSED_AND_WHITESPACE;
+}
+
+
+<ST_BACKQUOTE>{ANY_CHAR} {
+ if (YYCURSOR > YYLIMIT) {
+ return 0;
+ }
+ if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
+ YYCURSOR++;
+ }
+
+ while (YYCURSOR < YYLIMIT) {
+ switch (*YYCURSOR++) {
+ case '`':
+ break;
+ case '$':
+ if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
+ break;
+ }
+ continue;
+ case '{':
+ if (*YYCURSOR == '$') {
+ break;
+ }
+ continue;
+ case '\\':
+ if (YYCURSOR < YYLIMIT) {
+ YYCURSOR++;
+ }
+ /* fall through */
+ default:
+ continue;
+ }
+
+ YYCURSOR--;
+ break;
+ }
+
+ yyleng = YYCURSOR - SCNG(yy_text);
+
+ zend_scan_escape_string(zendlval, yytext, yyleng, '`');
+ return T_ENCAPSED_AND_WHITESPACE;
+}
+
+
+<ST_HEREDOC>{ANY_CHAR} {
+ int newline = 0;
+
+ zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));
+
+ if (YYCURSOR > YYLIMIT) {
+ return 0;
+ }
+
+ YYCURSOR--;
+
+ while (YYCURSOR < YYLIMIT) {
+ switch (*YYCURSOR++) {
+ case '\r':
+ if (*YYCURSOR == '\n') {
+ YYCURSOR++;
+ }
+ /* fall through */
+ case '\n':
+ /* Check for ending label on the next line */
+ if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {
+ YYCTYPE *end = YYCURSOR + heredoc_label->length;
+
+ if (*end == ';') {
+ end++;
+ }
+
+ if (*end == '\n' || *end == '\r') {
+ /* newline before label will be subtracted from returned text, but
+ * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
+ if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') {
+ newline = 2; /* Windows newline */
+ } else {
+ newline = 1;
+ }
+
+ CG(increment_lineno) = 1; /* For newline before label */
+ BEGIN(ST_END_HEREDOC);
+
+ goto heredoc_scan_done;
+ }
+ }
+ continue;
+ case '$':
+ if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
+ break;
+ }
+ continue;
+ case '{':
+ if (*YYCURSOR == '$') {
+ break;
+ }
+ continue;
+ case '\\':
+ if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') {
+ YYCURSOR++;
+ }
+ /* fall through */
+ default:
+ continue;
+ }
+
+ YYCURSOR--;
+ break;
+ }
+
+heredoc_scan_done:
+ yyleng = YYCURSOR - SCNG(yy_text);
+
+ zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0);
+ return T_ENCAPSED_AND_WHITESPACE;
+}
+
+
+<ST_NOWDOC>{ANY_CHAR} {
+ int newline = 0;
+
+ zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));
+
+ if (YYCURSOR > YYLIMIT) {
+ return 0;
+ }
+
+ YYCURSOR--;
+
+ while (YYCURSOR < YYLIMIT) {
+ switch (*YYCURSOR++) {
+ case '\r':
+ if (*YYCURSOR == '\n') {
+ YYCURSOR++;
+ }
+ /* fall through */
+ case '\n':
+ /* Check for ending label on the next line */
+ if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {
+ YYCTYPE *end = YYCURSOR + heredoc_label->length;
+
+ if (*end == ';') {
+ end++;
+ }
+
+ if (*end == '\n' || *end == '\r') {
+ /* newline before label will be subtracted from returned text, but
+ * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
+ if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') {
+ newline = 2; /* Windows newline */
+ } else {
+ newline = 1;
+ }
+
+ CG(increment_lineno) = 1; /* For newline before label */
+ BEGIN(ST_END_HEREDOC);
+
+ goto nowdoc_scan_done;
+ }
+ }
+ /* fall through */
+ default:
+ continue;
+ }
+ }
+
+nowdoc_scan_done:
+ yyleng = YYCURSOR - SCNG(yy_text);
+
+ zend_copy_value(zendlval, yytext, yyleng - newline);
+ HANDLE_NEWLINES(yytext, yyleng - newline);
+ return T_ENCAPSED_AND_WHITESPACE;
+}
+
+
+<ST_IN_SCRIPTING,ST_VAR_OFFSET>{ANY_CHAR} {
+ if (YYCURSOR > YYLIMIT) {
+ return 0;
+ }
+
+ zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
+ goto restart;
+}
+
+*/
+}