TeamTNT\TNTSearch\Support\Expression::toPostfix PHP Method

toPostfix() public method

public toPostfix ( $exp )
    public function toPostfix($exp)
    {
        $postfix = [];
        $stack = [];
        $tokens = $this->lex($exp);
        foreach ($tokens as $token) {
            if ($this->isOperand($token)) {
                $postfix[] = $token;
            } else {
                if ($token == ")") {
                    while (($top = array_pop($stack)) != "(") {
                        $postfix[] = $top;
                    }
                } else {
                    while (count($stack) && !(end($stack) == "(") && $this->priority(end($stack)) >= $this->priority($token)) {
                        $postfix[] = array_pop($stack);
                    }
                    $stack[] = $token;
                }
            }
        }
        while (!empty($stack)) {
            $postfix[] = array_pop($stack);
        }
        return $postfix;
    }

Usage Example

コード例 #1
0
ファイル: ExpressionTest.php プロジェクト: teamtnt/tntsearch
 public function testToPostfix()
 {
     $exp = new Expression();
     $this->assertEquals(['a', 'b', '&', 'c', '|'], $exp->toPostfix("a&b|c"));
     $this->assertEquals(['aw', 'bw', '&', 'cw', '|'], $exp->toPostfix("aw&bw|cw"));
     $this->assertEquals(['a', 'b', 'd', 'c', '&', '|', '&'], $exp->toPostfix("a&(b|d&c)"));
     $this->assertEquals(['a', 'b', '|'], $exp->toPostfix("a|b"));
     $this->assertEquals(['great', 'awsome', '|'], $exp->toPostfix("great|awsome"));
     $this->assertEquals(['great', 'awsome', '|'], $exp->toPostfix("great or awsome"));
     $this->assertEquals(['great', 'awsome', '&'], $exp->toPostfix("great awsome"));
     $this->assertEquals(['email', 'test', '&', 'com', '&'], $exp->toPostfix("email test com"));
     $this->assertEquals(['email', 'test', '&', 'com', '&'], $exp->toPostfix("*****@*****.**"));
     $this->assertEquals(['first', 'last', '&', 'something', 'else', '&', '|'], $exp->toPostfix("(first last) or (something else)"));
 }
All Usage Examples Of TeamTNT\TNTSearch\Support\Expression::toPostfix