/** * 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 = ''; }