Example #1
0
/**
 * This parses a query.
 *
 * @param OpExpr $expr_str
 * @return array of MatchResult
 */
function parseExpression($expr_str)
{
    $parser = new SearchCommandParser();
    $lexer = new SearchCommandLexer($expr_str);
    //    $parser->PrintTrace();
    $use_internal = false;
    try {
        while ($lexer->yylex()) {
            //print "\n" . $lexer->value  . "\n";
            $parser->doParse($lexer->token, $lexer->value);
            if (!$parser->isExprOk()) {
                $use_internal = true;
                $expr_str = getExpressionLocalityString($expr_str, $lexer->offset, 20);
                throw new Exception(sprintf(_kt("Parsing problem near '%s' in '%s' of expression."), $lexer->value, $expr_str));
            }
        }
        // we are now done
        $parser->doParse(0, 0);
        if (!$parser->isExprOk()) {
            $use_internal = true;
            $expr_str = getExpressionLocalityString($expr_str, $lexer->offset, 20);
            throw new Exception(sprintf(_kt("There is a problem parsing the expression '%s'"), $expr_str));
        }
    } catch (ResolutionException $e) {
        throw $e;
    } catch (Exception $e) {
        if ($use_internal) {
            throw $e;
        }
        $expr_str = getExpressionLocalityString($expr_str, $lexer->offset, 20);
        throw new Exception(sprintf(_kt("Parsing problem near '%s' of expression '%s'."), $lexer->value, $expr_str));
    }
    return $parser->getExprResult();
}
 /**
  * Output debug information to output (php://output stream)
  */
 static function PrintTrace()
 {
     self::$yyTraceFILE = fopen('php://output', 'w');
     self::$yyTracePrompt = '';
 }