⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searchcommandparser.php.svn-base

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
    const YYERRORSYMBOL = 26;    const YYERRSYMDT = 'yy0';    const YYFALLBACK = 0;    /** The next table maps tokens into fallback tokens.  If a construct     * like the following:     *      *      %fallback ID X Y Z.     *     * appears in the grammer, then ID becomes a fallback token for X, Y,     * and Z.  Whenever one of the tokens X, Y, or Z is input to the parser     * but it does not parse, the type of the token is changed to ID and     * the parse is retried before an error is thrown.     */    static public $yyFallback = array(    );    /**     * Turn parser tracing on by giving a stream to which to write the trace     * and a prompt to preface each trace message.  Tracing is turned off     * by making either argument NULL      *     * Inputs:     *      * - A stream resource to which trace output should be written.     *   If NULL, then tracing is turned off.     * - A prefix string written at the beginning of every     *   line of trace output.  If NULL, then tracing is     *   turned off.     *     * Outputs:     *      * - None.     * @param resource     * @param string     */    static function Trace($TraceFILE, $zTracePrompt)    {        if (!$TraceFILE) {            $zTracePrompt = 0;        } elseif (!$zTracePrompt) {            $TraceFILE = 0;        }        self::$yyTraceFILE = $TraceFILE;        self::$yyTracePrompt = $zTracePrompt;    }    /**     * Output debug information to output (php://output stream)     */    static function PrintTrace()    {        self::$yyTraceFILE = fopen('php://output', 'w');        self::$yyTracePrompt = '';    }    /**     * @var resource|0     */    static public $yyTraceFILE;    /**     * String to prepend to debug output     * @var string|0     */    static public $yyTracePrompt;    /**     * @var int     */    public $yyidx;                    /* Index of top element in stack */    /**     * @var int     */    public $yyerrcnt;                 /* Shifts left before out of the error */    /**     * @var array     */    public $yystack = array();  /* The parser's stack */    /**     * For tracing shifts, the names of all terminals and nonterminals     * are required.  The following table supplies these names     * @var array     */    static public $yyTokenName = array(   '$',             'OPOR',          'OPAND',         'NOT',           'IS',            'CONTAIN',       'LIKE',          'BETWEEN',       'START',         'END',           'GT',            'LE',            'LT',            'GE',            'PAR_OPEN',      'PAR_CLOSE',     'DOES',          'CONTAINS',      'COLON',         'SQUARE_OPEN',   'SQUARE_CLOSE',  'TERMINAL',      'VALUE',         'COMMA',         'WITH',          'IS_NOT',        'error',         'expr',          'cmdline',       'terminal',      'operator',      'value',         'notop',         'valuelist',       );    /**     * For tracing reduce actions, the names of all rules are required.     * @var array     */    static public $yyRuleName = array( /*   0 */ "cmdline ::= expr", /*   1 */ "expr ::= expr OPAND expr", /*   2 */ "expr ::= expr OPOR expr", /*   3 */ "expr ::= NOT expr", /*   4 */ "expr ::= PAR_OPEN expr PAR_CLOSE", /*   5 */ "expr ::= terminal operator value", /*   6 */ "expr ::= terminal notop BETWEEN value OPAND value", /*   7 */ "expr ::= terminal notop LIKE value", /*   8 */ "expr ::= terminal IS notop value", /*   9 */ "expr ::= terminal DOES notop CONTAINS value", /*  10 */ "expr ::= terminal COLON value", /*  11 */ "notop ::=", /*  12 */ "notop ::= NOT", /*  13 */ "terminal ::= SQUARE_OPEN value SQUARE_CLOSE SQUARE_OPEN value SQUARE_CLOSE", /*  14 */ "terminal ::= TERMINAL", /*  15 */ "value ::= VALUE", /*  16 */ "value ::= PAR_OPEN valuelist PAR_CLOSE", /*  17 */ "valuelist ::= VALUE COMMA valuelist", /*  18 */ "valuelist ::= VALUE", /*  19 */ "operator ::= CONTAINS", /*  20 */ "operator ::= LT", /*  21 */ "operator ::= GT", /*  22 */ "operator ::= LE", /*  23 */ "operator ::= GE", /*  24 */ "operator ::= START WITH", /*  25 */ "operator ::= END WITH", /*  26 */ "operator ::= IS_NOT",    );    /**     * This function returns the symbolic name associated with a token     * value.     * @param int     * @return string     */    function tokenName($tokenType)    {        if ($tokenType === 0) {            return 'End of Input';        }        if ($tokenType > 0 && $tokenType < count(self::$yyTokenName)) {            return self::$yyTokenName[$tokenType];        } else {            return "Unknown";        }    }    /**     * The following function deletes the value associated with a     * symbol.  The symbol can be either a terminal or nonterminal.     * @param int the symbol code     * @param mixed the symbol's value     */    static function yy_destructor($yymajor, $yypminor)    {        switch ($yymajor) {        /* Here is inserted the actions which take place when a        ** terminal or non-terminal is destroyed.  This can happen        ** when the symbol is popped from the stack during a        ** reduce or during error processing or when a parser is         ** being destroyed before it is finished parsing.        **        ** Note: during a reduce, the only symbols destroyed are those        ** which appear on the RHS of the rule, but which are not used        ** inside the C code.        */            default:  break;   /* If no destructor action specified: do nothing */        }    }    /**     * Pop the parser's stack once.     *     * If there is a destructor routine associated with the token which     * is popped from the stack, then call it.     *     * Return the major token number for the symbol popped.     * @param SearchCommandParseryyParser     * @return int     */    function yy_pop_parser_stack()    {        if (!count($this->yystack)) {            return;        }        $yytos = array_pop($this->yystack);        if (self::$yyTraceFILE && $this->yyidx >= 0) {            fwrite(self::$yyTraceFILE,                self::$yyTracePrompt . 'Popping ' . self::$yyTokenName[$yytos->major] .                    "\n");        }        $yymajor = $yytos->major;        self::yy_destructor($yymajor, $yytos->minor);        $this->yyidx--;        return $yymajor;    }    /**     * Deallocate and destroy a parser.  Destructors are all called for     * all stack elements before shutting the parser down.     */    function __destruct()    {        while ($this->yyidx >= 0) {            $this->yy_pop_parser_stack();        }        if (is_resource(self::$yyTraceFILE)) {            fclose(self::$yyTraceFILE);        }    }    /**     * Based on the current state and parser stack, get a list of all     * possible lookahead tokens     * @param int     * @return array     */    function yy_get_expected_tokens($token)    {        $state = $this->yystack[$this->yyidx]->stateno;        $expected = self::$yyExpectedTokens[$state];        if (in_array($token, self::$yyExpectedTokens[$state], true)) {            return $expected;        }        $stack = $this->yystack;        $yyidx = $this->yyidx;        do {            $yyact = $this->yy_find_shift_action($token);            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {                // reduce action                $done = 0;                do {                    if ($done++ == 100) {                        $this->yyidx = $yyidx;                        $this->yystack = $stack;                        // too much recursion prevents proper detection                        // so give up                        return array_unique($expected);                    }                    $yyruleno = $yyact - self::YYNSTATE;                    $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];                    $nextstate = $this->yy_find_reduce_action(                        $this->yystack[$this->yyidx]->stateno,                        self::$yyRuleInfo[$yyruleno]['lhs']);                    if (isset(self::$yyExpectedTokens[$nextstate])) {                        $expected += self::$yyExpectedTokens[$nextstate];                            if (in_array($token,                                  self::$yyExpectedTokens[$nextstate], true)) {                            $this->yyidx = $yyidx;                            $this->yystack = $stack;                            return array_unique($expected);                        }                    }                    if ($nextstate < self::YYNSTATE) {                        // we need to shift a non-terminal                        $this->yyidx++;                        $x = new SearchCommandParseryyStackEntry;                        $x->stateno = $nextstate;                        $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];                        $this->yystack[$this->yyidx] = $x;                        continue 2;                    } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {                        $this->yyidx = $yyidx;                        $this->yystack = $stack;                        // the last token was just ignored, we can't accept                        // by ignoring input, this is in essence ignoring a                        // syntax error!                        return array_unique($expected);                    } elseif ($nextstate === self::YY_NO_ACTION) {                        $this->yyidx = $yyidx;                        $this->yystack = $stack;                        // input accepted, but not shifted (I guess)                        return $expected;                    } else {                        $yyact = $nextstate;                    }                } while (true);            }            break;        } while (true);        return array_unique($expected);    }    /**     * Based on the parser state and current parser stack, determine whether     * the lookahead token is possible.     *      * The parser will convert the token value to an error token if not.  This     * catches some unusual edge cases where the parser would fail.     * @param int     * @return bool     */    function yy_is_expected_token($token)    {        if ($token === 0) {            return true; // 0 is not part of this        }        $state = $this->yystack[$this->yyidx]->stateno;        if (in_array($token, self::$yyExpectedTokens[$state], true)) {            return true;        }        $stack = $this->yystack;        $yyidx = $this->yyidx;        do {            $yyact = $this->yy_find_shift_action($token);            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {                // reduce action                $done = 0;                do {                    if ($done++ == 100) {                        $this->yyidx = $yyidx;                        $this->yystack = $stack;                        // too much recursion prevents proper detection                        // so give up                        return true;                    }                    $yyruleno = $yyact - self::YYNSTATE;                    $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];                    $nextstate = $this->yy_find_reduce_action(                        $this->yystack[$this->yyidx]->stateno,                        self::$yyRuleInfo[$yyruleno]['lhs']);                    if (isset(self::$yyExpectedTokens[$nextstate]) &&                          in_array($token, self::$yyExpectedTokens[$nextstate], true)) {                        $this->yyidx = $yyidx;                        $this->yystack = $stack;                        return true;                    }                    if ($nextstate < self::YYNSTATE) {                        // we need to shift a non-terminal                        $this->yyidx++;                        $x = new SearchCommandParseryyStackEntry;                        $x->stateno = $nextstate;                        $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -