]> granicus.if.org Git - re2c/commitdiff
Simplified .dot codegen:
authorUlya Trofimovich <skvadrik@gmail.com>
Sat, 7 Mar 2015 20:00:06 +0000 (20:00 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Sat, 7 Mar 2015 20:00:06 +0000 (20:00 +0000)
- draw a single arrow for all transitions between two given states
- label all arrows with corresponding character ranges in square
  brackests (no "default" label, single characters also appear in
  square brackets)
- .dot output became much smaller, thus pictures are drawn faster
  and generally look better: e.g. it takes ~10x less time to draw
  PHP lexer and the resulting graph is shaped better.

18 files changed:
re2c/cases.cc
re2c/cases.h
re2c/code.cc
re2c/output.cc
re2c/output.h
re2c/print.cc
re2c/test/bug47_dot_escapes.D.c
re2c/test/dot.D.c
re2c/test/dot2.D.c
re2c/test/dot_backslash.D.c [new file with mode: 0644]
re2c/test/dot_backslash.D.re [new file with mode: 0644]
re2c/test/dot_conditions.Dc.c
re2c/test/dot_ranges.D.c [new file with mode: 0644]
re2c/test/dot_ranges.D.re [new file with mode: 0644]
re2c/test/php20150211_zend_ini_scanner.cDF--case-inverted.c [new file with mode: 0644]
re2c/test/php20150211_zend_ini_scanner.cDF--case-inverted.re [new file with mode: 0644]
re2c/test/php20150211_zend_language_scanner.cDF--case-inverted.c [new file with mode: 0644]
re2c/test/php20150211_zend_language_scanner.cDF--case-inverted.re [new file with mode: 0644]

index e1fc3465b87dbb72a4a8947f7306543de2bcafc0..4cb50dfb0a0debbccecaf700296b64dd37bf9b0f 100644 (file)
@@ -4,15 +4,12 @@ namespace re2c {
 
 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;
        }
 }
@@ -37,7 +34,7 @@ uint Cases::size () const
        return cases_size;
 }
 
-State * Cases::default_case () const
+State * Cases::default_state () const
 {
        return def;
 }
index 52ec707f049831124d86b3d389113e2f609eb701..d0d6a0cad3e59826c2707c0386337f3e4b34b9ce 100644 (file)
@@ -25,7 +25,7 @@ public:
        Cases (const Span * s, uint n);
        ~Cases ();
        uint size () const;
-       State * default_case () const;
+       State * default_state () const;
        const Case & operator [] (uint i) const;
 };
 
index fb247c0c89906889db341a392c684b7e951160ee..8aaa8d68c60d0ba9507d46ad19f5f3dd80a6f0fd 100644 (file)
@@ -787,95 +787,8 @@ void Go::genLinear(OutputFile & o, uint ind, const State *from, const State *nex
        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)
@@ -891,7 +804,6 @@ static bool genCases (OutputFile & o, uint ind, const std::vector<std::pair<uint
                                        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)
@@ -900,76 +812,26 @@ static bool genCases (OutputFile & o, uint ind, const std::vector<std::pair<uint
                        }
                }
        }
-
-       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;
        }
 }
 
@@ -1000,12 +862,15 @@ void Go::genSwitch(OutputFile & o, uint ind, const State *from, const State *nex
 
                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";
        }
 }
index 2ef17419d77386665d868e0aa83aaf22dbab0f66..49ddf8dcfe970e53eb0cf8541d67fa3331aeada2 100644 (file)
@@ -99,6 +99,11 @@ void OutputFile::write_char_hex (uint 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;
index 7bed5802d7b51ae7f60b7d6a320a7e1f634c7f28..18dc7e3512920244dabb25bd1ca769068601f3c8 100644 (file)
@@ -60,6 +60,7 @@ struct OutputFile
        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 ();
index 8394cc4dea0dbf44ec93e9a328275e00f9f5460c..a2017b339c1981e404302375d97eae427c58f019 100644 (file)
@@ -10,15 +10,13 @@ void prtChOrHex(std::ostream& o, uint c)
 {
        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 << '"';
        }
 }
 
@@ -103,7 +101,7 @@ void prtCh(std::ostream& o, uint c)
                break;
 
                case '\\':
-               o << (DFlag ? "\\\\\\\\" : "\\\\");
+               o << "\\\\"; // both .dot and C/C++ code expect "\\"
                break;
 
                default:
@@ -137,6 +135,18 @@ void prtCh(std::ostream& o, uint c)
        }
 }
 
+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)
@@ -148,13 +158,13 @@ void printSpan(std::ostream& o, uint lb, uint 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 << "]";
index cd179619e037bb8d41bbefeea04d90eea39680a4..a4c57ebb0d15f41feb2dc71f630523cd23d3c3d0 100644 (file)
@@ -3,17 +3,17 @@
 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
index b2b4d5a2c1c8bd94292cf25bec0df72b69ae07f2..c02fc05d083c7bef2087d2261570829732d5cbc2 100644 (file)
@@ -3,22 +3,22 @@
 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"]
 }
index 7ea5b34edba87ddf35cc241c8d46db1c297ca013..9dcb83712bd29c94c770359107237aa31fafce95 100644 (file)
@@ -3,8 +3,8 @@
 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
diff --git a/re2c/test/dot_backslash.D.c b/re2c/test/dot_backslash.D.c
new file mode 100644 (file)
index 0000000..d384bef
--- /dev/null
@@ -0,0 +1,10 @@
+/* Generated by re2c */
+
+digraph re2c {
+
+
+1 -> 2 [label="[0x00-[][0x5D-0xFF]"]
+1 -> 3 [label="[\\]"]
+3 -> 4
+4 [label="dot_backslash.D.re:3"]
+}
diff --git a/re2c/test/dot_backslash.D.re b/re2c/test/dot_backslash.D.re
new file mode 100644 (file)
index 0000000..8b85c9b
--- /dev/null
@@ -0,0 +1,5 @@
+/*!re2c
+
+       "\\"    { return 1; }
+
+*/
index 6dfa8b167885471fe3f25950865400e4de65afd9..51b617e174e67c7025cf5965b172653867d8fd09 100644 (file)
@@ -6,29 +6,29 @@ digraph re2c {
 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"]
 }
diff --git a/re2c/test/dot_ranges.D.c b/re2c/test/dot_ranges.D.c
new file mode 100644 (file)
index 0000000..6c8b1b1
--- /dev/null
@@ -0,0 +1,15 @@
+/* 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"]
+}
diff --git a/re2c/test/dot_ranges.D.re b/re2c/test/dot_ranges.D.re
new file mode 100644 (file)
index 0000000..340c4f5
--- /dev/null
@@ -0,0 +1,7 @@
+/*!re2c
+
+       [a-b\xFE-\xFF]  { return 1; }
+       [0-8] | "^"     { return 2; }
+       [^]             { return 3; }
+
+*/
diff --git a/re2c/test/php20150211_zend_ini_scanner.cDF--case-inverted.c b/re2c/test/php20150211_zend_ini_scanner.cDF--case-inverted.c
new file mode 100644 (file)
index 0000000..d1b503b
--- /dev/null
@@ -0,0 +1,722 @@
+/* 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][!-\"][$][&][(-)][;][=][[][^][{-~]"]
+}
diff --git a/re2c/test/php20150211_zend_ini_scanner.cDF--case-inverted.re b/re2c/test/php20150211_zend_ini_scanner.cDF--case-inverted.re
new file mode 100644 (file)
index 0000000..c82d793
--- /dev/null
@@ -0,0 +1,653 @@
+/*
+   +----------------------------------------------------------------------+
+   | 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;
+}
+
+*/
+}
diff --git a/re2c/test/php20150211_zend_language_scanner.cDF--case-inverted.c b/re2c/test/php20150211_zend_language_scanner.cDF--case-inverted.c
new file mode 100644 (file)
index 0000000..fc04c33
--- /dev/null
@@ -0,0 +1,1553 @@
+/* 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]"]
+}
diff --git a/re2c/test/php20150211_zend_language_scanner.cDF--case-inverted.re b/re2c/test/php20150211_zend_language_scanner.cDF--case-inverted.re
new file mode 100644 (file)
index 0000000..0081192
--- /dev/null
@@ -0,0 +1,2359 @@
+/*
+   +----------------------------------------------------------------------+
+   | 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;
+}
+
+*/
+}