From: Ulya Trofimovich Date: Sat, 7 Mar 2015 20:00:06 +0000 (+0000) Subject: Simplified .dot codegen: X-Git-Tag: 0.15~364 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8a017c71bb974bb49904524e21c5b3ac826ed08a;p=re2c Simplified .dot codegen: - 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. --- diff --git a/re2c/cases.cc b/re2c/cases.cc index e1fc3465..4cb50dfb 100644 --- a/re2c/cases.cc +++ b/re2c/cases.cc @@ -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; } diff --git a/re2c/cases.h b/re2c/cases.h index 52ec707f..d0d6a0ca 100644 --- a/re2c/cases.h +++ b/re2c/cases.h @@ -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; }; diff --git a/re2c/code.cc b/re2c/code.cc index fb247c0c..8aaa8d68 100644 --- a/re2c/code.cc +++ b/re2c/code.cc @@ -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 > & 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 > & 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::vectorlabel << " -> " << 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"; } } diff --git a/re2c/output.cc b/re2c/output.cc index 2ef17419..49ddf8dc 100644 --- a/re2c/output.cc +++ b/re2c/output.cc @@ -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; diff --git a/re2c/output.h b/re2c/output.h index 7bed5802..18dc7e35 100644 --- a/re2c/output.h +++ b/re2c/output.h @@ -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 (); diff --git a/re2c/print.cc b/re2c/print.cc index 8394cc4d..a2017b33 100644 --- a/re2c/print.cc +++ b/re2c/print.cc @@ -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 << "]"; diff --git a/re2c/test/bug47_dot_escapes.D.c b/re2c/test/bug47_dot_escapes.D.c index cd179619..a4c57ebb 100644 --- a/re2c/test/bug47_dot_escapes.D.c +++ b/re2c/test/bug47_dot_escapes.D.c @@ -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 diff --git a/re2c/test/dot.D.c b/re2c/test/dot.D.c index b2b4d5a2..c02fc05d 100644 --- a/re2c/test/dot.D.c +++ b/re2c/test/dot.D.c @@ -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"] } diff --git a/re2c/test/dot2.D.c b/re2c/test/dot2.D.c index 7ea5b34e..9dcb8371 100644 --- a/re2c/test/dot2.D.c +++ b/re2c/test/dot2.D.c @@ -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 index 00000000..d384bef9 --- /dev/null +++ b/re2c/test/dot_backslash.D.c @@ -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 index 00000000..8b85c9b1 --- /dev/null +++ b/re2c/test/dot_backslash.D.re @@ -0,0 +1,5 @@ +/*!re2c + + "\\" { return 1; } + +*/ diff --git a/re2c/test/dot_conditions.Dc.c b/re2c/test/dot_conditions.Dc.c index 6dfa8b16..51b617e1 100644 --- a/re2c/test/dot_conditions.Dc.c +++ b/re2c/test/dot_conditions.Dc.c @@ -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 index 00000000..6c8b1b1e --- /dev/null +++ b/re2c/test/dot_ranges.D.c @@ -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 index 00000000..340c4f5f --- /dev/null +++ b/re2c/test/dot_ranges.D.re @@ -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 index 00000000..d1b503bc --- /dev/null +++ b/re2c/test/php20150211_zend_ini_scanner.cDF--case-inverted.c @@ -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 index 00000000..c82d7938 --- /dev/null +++ b/re2c/test/php20150211_zend_ini_scanner.cDF--case-inverted.re @@ -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 | + | Jani Taskinen | + | Marcus Boerger | + | Nuno Lopes | + | Scott MacVicar | + +----------------------------------------------------------------------+ +*/ + +/* $Id$ */ + +#include +#include "zend.h" +#include "zend_API.h" +#include "zend_globals.h" +#include +#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); + +"[" { /* 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; +} + +"'"{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); +} + +"]"{TABS_AND_SPACES}*{NEWLINE}? { /* End of section */ + BEGIN(INITIAL); + SCNG(lineno)++; + return ']'; +} + +{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); +} + +{TABS_AND_SPACES}*"]" { /* End of section or an option offset */ + BEGIN(INITIAL); + return ']'; +} + +{DOLLAR_CURLY} { /* Variable start */ + yy_push_state(ST_VARNAME); + return TC_DOLLAR_CURLY; +} + +{LABEL} { /* Variable name */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace */ + EAT_TRAILING_WHITESPACE(); + + RETURN_TOKEN(TC_VARNAME, yytext, yyleng); +} + +"}" { /* Variable end */ + yy_pop_state(); + return '}'; +} + +("true"|"on"|"yes"){TABS_AND_SPACES}* { /* TRUE value (when used outside option value/offset this causes parse error!) */ + RETURN_TOKEN(BOOL_TRUE, "1", 1); +} + +("false"|"off"|"no"|"none"){TABS_AND_SPACES}* { /* FALSE value (when used outside option value/offset this causes parse error!)*/ + RETURN_TOKEN(BOOL_FALSE, "", 0); +} + +("null"){TABS_AND_SPACES}* { + RETURN_TOKEN(NULL_NULL, "", 0); +} + +{LABEL} { /* Get option name */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace */ + EAT_TRAILING_WHITESPACE(); + + RETURN_TOKEN(TC_LABEL, yytext, yyleng); +} + +{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 '='; +} + +{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); +} + +{SECTION_RAW_CHARS}+ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} + +{TABS_AND_SPACES}*{NEWLINE} { /* End of option value */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} + +{CONSTANT} { /* Get constant option value */ + RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); +} + +{NUMBER} { /* Get number option value as string */ + RETURN_TOKEN(TC_NUMBER, yytext, yyleng); +} + +{TOKENS} { /* Disallow these chars outside option values */ + return yytext[0]; +} + +{OPERATORS}{TABS_AND_SPACES}* { /* Boolean operators */ + return yytext[0]; +} + +[=] { /* Make = used in option value to trigger error */ + yyless(0); + BEGIN(INITIAL); + return END_OF_LINE; +} + +{VALUE_CHARS}+ { /* Get everything else as option/offset value */ + RETURN_TOKEN(TC_STRING, yytext, yyleng); +} + +{SECTION_VALUE_CHARS}+ { /* Get rest as section/offset value */ + RETURN_TOKEN(TC_STRING, yytext, yyleng); +} + +{TABS_AND_SPACES}*["] { /* Double quoted '"' string start */ + yy_push_state(ST_DOUBLE_QUOTES); + return '"'; +} + +["]{TABS_AND_SPACES}* { /* Double quoted '"' string ends */ + yy_pop_state(); + return '"'; +} + +[^] { /* 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; +} + +{WHITESPACE} { + RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng); +} + +{TABS_AND_SPACES}+ { + /* eat whitespace */ + goto restart; +} + +{TABS_AND_SPACES}*{NEWLINE} { + SCNG(lineno)++; + return END_OF_LINE; +} + +{TABS_AND_SPACES}*[;][^\r\n]*{NEWLINE} { /* Comment */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} + +[^] { /* 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 index 00000000..fc04c330 --- /dev/null +++ b/re2c/test/php20150211_zend_language_scanner.cDF--case-inverted.c @@ -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 index 00000000..0081192d --- /dev/null +++ b/re2c/test/php20150211_zend_language_scanner.cDF--case-inverted.re @@ -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 | + | Nuno Lopes | + | Scott MacVicar | + | Flex version authors: | + | Andi Gutmans | + | Zeev Suraski | + +----------------------------------------------------------------------+ +*/ + +/* $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 +#include "zend.h" +#ifdef PHP_WIN32 +# include +#endif +#include "zend_alloc.h" +#include +#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 +#endif + +#ifdef HAVE_UNISTD_H +# include +#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= '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) { + *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); + +"exit" { + return T_EXIT; +} + +"die" { + return T_EXIT; +} + +"function" { + return T_FUNCTION; +} + +"const" { + return T_CONST; +} + +"return" { + return T_RETURN; +} + +"yield" { + return T_YIELD; +} + +"try" { + return T_TRY; +} + +"catch" { + return T_CATCH; +} + +"finally" { + return T_FINALLY; +} + +"throw" { + return T_THROW; +} + +"if" { + return T_IF; +} + +"elseif" { + return T_ELSEIF; +} + +"endif" { + return T_ENDIF; +} + +"else" { + return T_ELSE; +} + +"while" { + return T_WHILE; +} + +"endwhile" { + return T_ENDWHILE; +} + +"do" { + return T_DO; +} + +"for" { + return T_FOR; +} + +"endfor" { + return T_ENDFOR; +} + +"foreach" { + return T_FOREACH; +} + +"endforeach" { + return T_ENDFOREACH; +} + +"declare" { + return T_DECLARE; +} + +"enddeclare" { + return T_ENDDECLARE; +} + +"instanceof" { + return T_INSTANCEOF; +} + +"as" { + return T_AS; +} + +"switch" { + return T_SWITCH; +} + +"endswitch" { + return T_ENDSWITCH; +} + +"case" { + return T_CASE; +} + +"default" { + return T_DEFAULT; +} + +"break" { + return T_BREAK; +} + +"continue" { + return T_CONTINUE; +} + +"goto" { + return T_GOTO; +} + +"echo" { + return T_ECHO; +} + +"print" { + return T_PRINT; +} + +"class" { + return T_CLASS; +} + +"interface" { + return T_INTERFACE; +} + +"trait" { + return T_TRAIT; +} + +"extends" { + return T_EXTENDS; +} + +"implements" { + return T_IMPLEMENTS; +} + +"->" { + yy_push_state(ST_LOOKING_FOR_PROPERTY); + return T_OBJECT_OPERATOR; +} + +{WHITESPACE}+ { + HANDLE_NEWLINES(yytext, yyleng); + return T_WHITESPACE; +} + +"->" { + return T_OBJECT_OPERATOR; +} + +{LABEL} { + yy_pop_state(); + zend_copy_value(zendlval, yytext, yyleng); + return T_STRING; +} + +{ANY_CHAR} { + yyless(0); + yy_pop_state(); + goto restart; +} + +"::" { + return T_PAAMAYIM_NEKUDOTAYIM; +} + +"\\" { + return T_NS_SEPARATOR; +} + +"..." { + return T_ELLIPSIS; +} + +"??" { + return T_COALESCE; +} + +"new" { + return T_NEW; +} + +"clone" { + return T_CLONE; +} + +"var" { + return T_VAR; +} + +"("{TABS_AND_SPACES}("int"|"integer"){TABS_AND_SPACES}")" { + return T_INT_CAST; +} + +"("{TABS_AND_SPACES}("real"|"double"|"float"){TABS_AND_SPACES}")" { + return T_DOUBLE_CAST; +} + +"("{TABS_AND_SPACES}("string"|"binary"){TABS_AND_SPACES}")" { + return T_STRING_CAST; +} + +"("{TABS_AND_SPACES}"array"{TABS_AND_SPACES}")" { + return T_ARRAY_CAST; +} + +"("{TABS_AND_SPACES}"object"{TABS_AND_SPACES}")" { + return T_OBJECT_CAST; +} + +"("{TABS_AND_SPACES}("bool"|"boolean"){TABS_AND_SPACES}")" { + return T_BOOL_CAST; +} + +"("{TABS_AND_SPACES}("unset"){TABS_AND_SPACES}")" { + return T_UNSET_CAST; +} + +"eval" { + return T_EVAL; +} + +"include" { + return T_INCLUDE; +} + +"include_once" { + return T_INCLUDE_ONCE; +} + +"require" { + return T_REQUIRE; +} + +"require_once" { + return T_REQUIRE_ONCE; +} + +"namespace" { + return T_NAMESPACE; +} + +"use" { + return T_USE; +} + +"insteadof" { + return T_INSTEADOF; +} + +"global" { + return T_GLOBAL; +} + +"isset" { + return T_ISSET; +} + +"empty" { + return T_EMPTY; +} + +"__halt_compiler" { + return T_HALT_COMPILER; +} + +"static" { + return T_STATIC; +} + +"abstract" { + return T_ABSTRACT; +} + +"final" { + return T_FINAL; +} + +"private" { + return T_PRIVATE; +} + +"protected" { + return T_PROTECTED; +} + +"public" { + return T_PUBLIC; +} + +"unset" { + return T_UNSET; +} + +"=>" { + return T_DOUBLE_ARROW; +} + +"list" { + return T_LIST; +} + +"array" { + return T_ARRAY; +} + +"callable" { + return T_CALLABLE; +} + +"++" { + return T_INC; +} + +"--" { + return T_DEC; +} + +"===" { + return T_IS_IDENTICAL; +} + +"!==" { + return T_IS_NOT_IDENTICAL; +} + +"==" { + return T_IS_EQUAL; +} + +"!="|"<>" { + return T_IS_NOT_EQUAL; +} + +"<=" { + return T_IS_SMALLER_OR_EQUAL; +} + +">=" { + return T_IS_GREATER_OR_EQUAL; +} + +"+=" { + return T_PLUS_EQUAL; +} + +"-=" { + return T_MINUS_EQUAL; +} + +"*=" { + return T_MUL_EQUAL; +} + +"*\*" { + return T_POW; +} + +"*\*=" { + return T_POW_EQUAL; +} + +"/=" { + return T_DIV_EQUAL; +} + +".=" { + return T_CONCAT_EQUAL; +} + +"%=" { + return T_MOD_EQUAL; +} + +"<<=" { + return T_SL_EQUAL; +} + +">>=" { + return T_SR_EQUAL; +} + +"&=" { + return T_AND_EQUAL; +} + +"|=" { + return T_OR_EQUAL; +} + +"^=" { + return T_XOR_EQUAL; +} + +"||" { + return T_BOOLEAN_OR; +} + +"&&" { + return T_BOOLEAN_AND; +} + +"OR" { + return T_LOGICAL_OR; +} + +"AND" { + return T_LOGICAL_AND; +} + +"XOR" { + return T_LOGICAL_XOR; +} + +"<<" { + return T_SL; +} + +">>" { + return T_SR; +} + +{TOKENS} { + return yytext[0]; +} + + +"{" { + yy_push_state(ST_IN_SCRIPTING); + return '{'; +} + + +"${" { + yy_push_state(ST_LOOKING_FOR_VARNAME); + return T_DOLLAR_OPEN_CURLY_BRACES; +} + + +"}" { + RESET_DOC_COMMENT(); + if (!zend_stack_is_empty(&SCNG(state_stack))) { + yy_pop_state(); + } + return '}'; +} + + +{LABEL}[[}] { + yyless(yyleng - 1); + zend_copy_value(zendlval, yytext, yyleng); + yy_pop_state(); + yy_push_state(ST_IN_SCRIPTING); + return T_STRING_VARNAME; +} + + +{ANY_CHAR} { + yyless(0); + yy_pop_state(); + yy_push_state(ST_IN_SCRIPTING); + goto restart; +} + +{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; + } +} + +{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; +} + +{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; + } +} + +[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; +} + +{LNUM}|{HNUM}|{BNUM} { /* Offset must be treated as a string */ + ZVAL_STRINGL(zendlval, yytext, yyleng); + return T_NUM_STRING; +} + +{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; +} + +"__CLASS__" { + return T_CLASS_C; +} + +"__TRAIT__" { + return T_TRAIT_C; +} + +"__FUNCTION__" { + return T_FUNC_C; +} + +"__METHOD__" { + return T_METHOD_C; +} + +"__LINE__" { + return T_LINE; +} + +"__FILE__" { + return T_FILE; +} + +"__DIR__" { + return T_DIR; +} + +"__NAMESPACE__" { + return T_NS_C; +} + + +"""{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 + */ +"$"{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 + */ +"$"{LABEL}"[" { + yyless(yyleng - 1); + yy_push_state(ST_VAR_OFFSET); + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + return T_VARIABLE; +} + +"$"{LABEL} { + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + return T_VARIABLE; +} + +"]" { + yy_pop_state(); + return ']'; +} + +{TOKENS}|[{}"`] { + /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ + return yytext[0]; +} + +[ \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; +} + +{LABEL} { + zend_copy_value(zendlval, yytext, yyleng); + return T_STRING; +} + + +"#"|"//" { + 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; +} + +"/*"|"/**"{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; +} + +"?>"{NEWLINE}? { + BEGIN(INITIAL); + return T_CLOSE_TAG; /* implicit ';' at php-end tag */ +} + + +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 (sb?["] { + 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 '"'; +} + + +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; +} + + +[`] { + BEGIN(ST_BACKQUOTE); + return '`'; +} + + +{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; +} + + +"{$" { + Z_LVAL_P(zendlval) = (zend_long) '{'; + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + return T_CURLY_OPEN; +} + + +["] { + BEGIN(ST_IN_SCRIPTING); + return '"'; +} + +[`] { + BEGIN(ST_IN_SCRIPTING); + return '`'; +} + + +{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; +} + + +{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; +} + + +{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; +} + + +{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; +} + + +{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; +} + +*/ +}