data = $data; $this->counter = 0; $this->line = 1; $this->smarty = $smarty; } public static function &instance($new_instance = null) { static $instance = null; if (isset($new_instance) && is_object($new_instance)) $instance = $new_instance; return $instance; } private $_yy_state = 1; private $_yy_stack = array(); function yylex() { return $this->{'yylex' . $this->_yy_state}(); } function yypushstate($state) { array_push($this->_yy_stack, $this->_yy_state); $this->_yy_state = $state; } function yypopstate() { $this->_yy_state = array_pop($this->_yy_stack); } function yybegin($state) { $this->_yy_state = $state; } function yylex1() { $tokenMap = array ( 1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 1, 10 => 1, 12 => 0, 13 => 0, 14 => 0, 15 => 0, ); if ($this->counter >= strlen($this->data)) { return false; // end of input } $yy_global_pattern = "/^(#)|^('[^'\\\\\\\\]*(?:\\\\\\\\.[^'\\\\\\\\]*)*')|^(\"\"\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\"\"\")|^(\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")|^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)/"; do { if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) { $yysubmatches = $yymatches; $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns if (!count($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . 'an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state START'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number if ($tokenMap[$this->token]) { // extract sub-patterns for passing to lex function $yysubmatches = array_slice($yysubmatches, $this->token + 1, $tokenMap[$this->token]); } else { $yysubmatches = array(); } $this->value = current($yymatches); // token value $r = $this->{'yy_r1_' . $this->token}($yysubmatches); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } else { $yy_yymore_patterns = array( 1 => array(0, "^('[^'\\\\\\\\]*(?:\\\\\\\\.[^'\\\\\\\\]*)*')|^(\"\"\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\"\"\")|^(\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")|^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), 2 => array(0, "^(\"\"\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\"\"\")|^(\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")|^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), 3 => array(0, "^(\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")|^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), 4 => array(0, "^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), 5 => array(0, "^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), 6 => array(0, "^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), 7 => array(0, "^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), 8 => array(1, "^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), 10 => array(2, "^([\s]+)|^(\\.)|^(\\w+)|^(.)"), 12 => array(2, "^(\\.)|^(\\w+)|^(.)"), 13 => array(2, "^(\\w+)|^(.)"), 14 => array(2, "^(.)"), 15 => array(2, ""), ); // yymore is needed do { if (!strlen($yy_yymore_patterns[$this->token][1])) { throw new Exception('cannot do yymore for the last token'); } $yysubmatches = array(); if (preg_match('/' . $yy_yymore_patterns[$this->token][1] . '/', substr($this->data, $this->counter), $yymatches)) { $yysubmatches = $yymatches; $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns next($yymatches); // skip global match $this->token += key($yymatches) + $yy_yymore_patterns[$this->token][0]; // token number $this->value = current($yymatches); // token value $this->line = substr_count($this->value, "\n"); if ($tokenMap[$this->token]) { // extract sub-patterns for passing to lex function $yysubmatches = array_slice($yysubmatches, $this->token + 1, $tokenMap[$this->token]); } else { $yysubmatches = array(); } } $r = $this->{'yy_r1_' . $this->token}($yysubmatches); } while ($r !== null && !is_bool($r)); if ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } else { // accept $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); return true; } } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); } break; } while (true); } // end function const START = 1; function yy_r1_1($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; } function yy_r1_2($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_SI_QSTR; } function yy_r1_3($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_ML_QSTR; } function yy_r1_4($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_DO_QSTR; } function yy_r1_5($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; } function yy_r1_6($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; } function yy_r1_7($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; } function yy_r1_8($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_NUMBER; } function yy_r1_10($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_EOL; } function yy_r1_12($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_SPACE; } function yy_r1_13($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_DOT; } function yy_r1_14($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_ID; } function yy_r1_15($yy_subpatterns) { $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; } }