'TEXT', 2 => 'SMARTY', 3 => 'LITERAL', 4 => 'DOUBLEQUOTEDSTRING', 5 => 'CHILDBODY');
    public $smarty_token_names = array(        // Text for parser error messages
                                               'IDENTITY'        => '===',
                                               'NONEIDENTITY'    => '!==',
                                               'EQUALS'          => '==',
                                               'NOTEQUALS'       => '!=',
                                               'GREATEREQUAL'    => '(>=,ge)',
                                               'LESSEQUAL'       => '(<=,le)',
                                               'GREATERTHAN'     => '(>,gt)',
                                               'LESSTHAN'        => '(<,lt)',
                                               'MOD'             => '(%,mod)',
                                               'NOT'             => '(!,not)',
                                               'LAND'            => '(&&,and)',
                                               'LOR'             => '(||,or)',
                                               'LXOR'            => 'xor',
                                               'OPENP'           => '(',
                                               'CLOSEP'          => ')',
                                               'OPENB'           => '[',
                                               'CLOSEB'          => ']',
                                               'PTR'             => '->',
                                               'APTR'            => '=>',
                                               'EQUAL'           => '=',
                                               'NUMBER'          => 'number',
                                               'UNIMATH'         => '+" , "-',
                                               'MATH'            => '*" , "/" , "%',
                                               'INCDEC'          => '++" , "--',
                                               'SPACE'           => ' ',
                                               'DOLLAR'          => '$',
                                               'SEMICOLON'       => ';',
                                               'COLON'           => ':',
                                               'DOUBLECOLON'     => '::',
                                               'AT'              => '@',
                                               'HATCH'           => '#',
                                               'QUOTE'           => '"',
                                               'BACKTICK'        => '`',
                                               'VERT'            => '|',
                                               'DOT'             => '.',
                                               'COMMA'           => '","',
                                               'ANDSYM'          => '"&"',
                                               'QMARK'           => '"?"',
                                               'ID'              => 'identifier',
                                               'TEXT'            => 'text',
                                               'FAKEPHPSTARTTAG' => 'Fake PHP start tag',
                                               'PHPSTARTTAG'     => 'PHP start tag',
                                               'PHPENDTAG'       => 'PHP end tag',
                                               'LITERALSTART'    => 'Literal start',
                                               'LITERALEND'      => 'Literal end',
                                               'LDELSLASH'       => 'closing tag',
                                               'COMMENT'         => 'comment',
                                               'AS'              => 'as',
                                               'TO'              => 'to',
    );
    function __construct($data, $compiler)
    {
        //        $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data);
        $this->data = $data;
        $this->counter = 0;
        if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
            $this->counter += strlen($match[0]);
        }
        $this->line = 1;
        $this->smarty = $compiler->smarty;
        $this->compiler = $compiler;
        $this->ldel = preg_quote($this->smarty->left_delimiter, '/');
        $this->ldel_length = strlen($this->smarty->left_delimiter);
        $this->rdel = preg_quote($this->smarty->right_delimiter, '/');
        $this->rdel_length = strlen($this->smarty->right_delimiter);
        $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter;
        $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter;
    }
    public function PrintTrace()
    {
        $this->yyTraceFILE = fopen('php://output', 'w');
        $this->yyTracePrompt = '
';
    }
    private $_yy_state = 1;
    private $_yy_stack = array();
    public function yylex()
    {
        return $this->{'yylex' . $this->_yy_state}();
    }
    public function yypushstate($state)
    {
        if ($this->yyTraceFILE) {
            fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
        }
        array_push($this->_yy_stack, $this->_yy_state);
        $this->_yy_state = $state;
        if ($this->yyTraceFILE) {
            fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
        }
    }
    public function yypopstate()
    {
        if ($this->yyTraceFILE) {
            fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
        }
        $this->_yy_state = array_pop($this->_yy_stack);
        if ($this->yyTraceFILE) {
            fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
        }
    }
    public function yybegin($state)
    {
        $this->_yy_state = $state;
        if ($this->yyTraceFILE) {
            fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
        }
    }
    public function yylex1()
    {
        $tokenMap = array(
            1  => 0,
            2  => 1,
            4  => 0,
            5  => 0,
            6  => 0,
            7  => 1,
            9  => 0,
            10 => 0,
            11 => 0,
            12 => 0,
            13 => 0,
            14 => 2,
            17 => 0,
            18 => 0,
            19 => 0,
            20 => 0,
            21 => 0,
            22 => 0,
        );
        if ($this->counter >= strlen($this->data)) {
            return false; // end of input
        }
        $yy_global_pattern = "/\G(\\{\\})|\G(" . $this->ldel . "\\*([\S\s]*?)\\*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G((