Esempio n. 1
0
 /**
  * Creates parser
  */
 public function __construct()
 {
     parent::__construct([self::STATE_QUERY_ELEMENT, self::STATE_INCLUDED_RANGE_START, self::STATE_INCLUDED_RANGE_FIRST_TERM, self::STATE_INCLUDED_RANGE_TO_TERM, self::STATE_INCLUDED_RANGE_LAST_TERM, self::STATE_INCLUDED_RANGE_END, self::STATE_EXCLUDED_RANGE_START, self::STATE_EXCLUDED_RANGE_FIRST_TERM, self::STATE_EXCLUDED_RANGE_TO_TERM, self::STATE_EXCLUDED_RANGE_LAST_TERM, self::STATE_EXCLUDED_RANGE_END], QueryToken::getTypes());
     $this->addTransitions([[self::STATE_QUERY_ELEMENT, QueryToken::TYPE_WORD, self::STATE_QUERY_ELEMENT], [self::STATE_QUERY_ELEMENT, QueryToken::TYPE_PHRASE, self::STATE_QUERY_ELEMENT], [self::STATE_QUERY_ELEMENT, QueryToken::TYPE_NUMBER, self::STATE_QUERY_ELEMENT], [self::STATE_QUERY_ELEMENT, QueryToken::TYPE_DATE, self::STATE_QUERY_ELEMENT], [self::STATE_QUERY_ELEMENT, QueryToken::TYPE_OPERATOR, self::STATE_QUERY_ELEMENT], [self::STATE_QUERY_ELEMENT, QueryToken::TYPE_AND_OPERATOR, self::STATE_QUERY_ELEMENT], [self::STATE_QUERY_ELEMENT, QueryToken::TYPE_OR_OPERATOR, self::STATE_QUERY_ELEMENT], [self::STATE_QUERY_ELEMENT, QueryToken::TYPE_NOT_OPERATOR, self::STATE_QUERY_ELEMENT], [self::STATE_QUERY_ELEMENT, QueryToken::TYPE_LEFT_SQUARE_BRACKET, self::STATE_INCLUDED_RANGE_START], [self::STATE_QUERY_ELEMENT, QueryToken::TYPE_LEFT_PARENTHESIS, self::STATE_EXCLUDED_RANGE_START]]);
     $this->addTransitions([[self::STATE_INCLUDED_RANGE_START, QueryToken::TYPE_WORD, self::STATE_INCLUDED_RANGE_FIRST_TERM], [self::STATE_INCLUDED_RANGE_START, QueryToken::TYPE_DATE, self::STATE_INCLUDED_RANGE_FIRST_TERM], [self::STATE_INCLUDED_RANGE_START, QueryToken::TYPE_NUMBER, self::STATE_INCLUDED_RANGE_FIRST_TERM], [self::STATE_INCLUDED_RANGE_FIRST_TERM, QueryToken::TYPE_TO_LEXEME, self::STATE_INCLUDED_RANGE_TO_TERM], [self::STATE_INCLUDED_RANGE_TO_TERM, QueryToken::TYPE_WORD, self::STATE_INCLUDED_RANGE_LAST_TERM], [self::STATE_INCLUDED_RANGE_TO_TERM, QueryToken::TYPE_DATE, self::STATE_INCLUDED_RANGE_LAST_TERM], [self::STATE_INCLUDED_RANGE_TO_TERM, QueryToken::TYPE_NUMBER, self::STATE_INCLUDED_RANGE_LAST_TERM], [self::STATE_INCLUDED_RANGE_LAST_TERM, QueryToken::TYPE_RIGHT_SQUARE_BRACKET, self::STATE_INCLUDED_RANGE_END], [self::STATE_INCLUDED_RANGE_LAST_TERM, QueryToken::TYPE_RIGHT_PARENTHESIS, self::STATE_EXCLUDED_RANGE_END]]);
     $this->addTransitions([[self::STATE_EXCLUDED_RANGE_START, QueryToken::TYPE_WORD, self::STATE_EXCLUDED_RANGE_FIRST_TERM], [self::STATE_EXCLUDED_RANGE_START, QueryToken::TYPE_DATE, self::STATE_EXCLUDED_RANGE_FIRST_TERM], [self::STATE_EXCLUDED_RANGE_START, QueryToken::TYPE_NUMBER, self::STATE_EXCLUDED_RANGE_FIRST_TERM], [self::STATE_EXCLUDED_RANGE_FIRST_TERM, QueryToken::TYPE_TO_LEXEME, self::STATE_EXCLUDED_RANGE_TO_TERM], [self::STATE_EXCLUDED_RANGE_TO_TERM, QueryToken::TYPE_WORD, self::STATE_EXCLUDED_RANGE_LAST_TERM], [self::STATE_EXCLUDED_RANGE_TO_TERM, QueryToken::TYPE_DATE, self::STATE_EXCLUDED_RANGE_LAST_TERM], [self::STATE_EXCLUDED_RANGE_TO_TERM, QueryToken::TYPE_NUMBER, self::STATE_EXCLUDED_RANGE_LAST_TERM], [self::STATE_EXCLUDED_RANGE_LAST_TERM, QueryToken::TYPE_RIGHT_PARENTHESIS, self::STATE_EXCLUDED_RANGE_END], [self::STATE_EXCLUDED_RANGE_LAST_TERM, QueryToken::TYPE_RIGHT_SQUARE_BRACKET, self::STATE_INCLUDED_RANGE_END]]);
     $addTermEntryAction = new FSMAction($this, 'addTermEntry');
     $addPhraseEntryAction = new FSMAction($this, 'addPhraseEntry');
     $operatorAction = new FSMAction($this, 'operator');
     $logicalOperatorAction = new FSMAction($this, 'logicalOperator');
     $subQueryStartAction = new FSMAction($this, 'subQueryStart');
     $subQueryEndAction = new FSMAction($this, 'subQueryEnd');
     $includedRangeFirstTermAction = new FSMAction($this, 'includedRangeFirstTerm');
     $includedRangeLastTermAction = new FSMAction($this, 'includedRangeLastTerm');
     $excludedRangeFirstTermAction = new FSMAction($this, 'excludedRangeFirstTerm');
     $excludedRangeLastTermAction = new FSMAction($this, 'excludedRangeLastTerm');
     $this->addInputAction(self::STATE_QUERY_ELEMENT, QueryToken::TYPE_WORD, $addTermEntryAction);
     $this->addInputAction(self::STATE_QUERY_ELEMENT, QueryToken::TYPE_PHRASE, $addPhraseEntryAction);
     $this->addInputAction(self::STATE_QUERY_ELEMENT, QueryToken::TYPE_OPERATOR, $operatorAction);
     $this->addInputAction(self::STATE_QUERY_ELEMENT, QueryToken::TYPE_AND_OPERATOR, $logicalOperatorAction);
     $this->addInputAction(self::STATE_QUERY_ELEMENT, QueryToken::TYPE_OR_OPERATOR, $logicalOperatorAction);
     $this->addInputAction(self::STATE_QUERY_ELEMENT, QueryToken::TYPE_NOT_OPERATOR, $logicalOperatorAction);
     //$this->addInputAction(self::STATE_QUERY_ELEMENT, QueryToken::TYPE_LEFT_PARENTHESIS, $subQueryStartAction);
     //$this->addInputAction(self::STATE_QUERY_ELEMENT, QueryToken::TYPE_RIGHT_PARENTHESIS, $subQueryEndAction);
     $this->addEntryAction(self::STATE_INCLUDED_RANGE_FIRST_TERM, $includedRangeFirstTermAction);
     $this->addEntryAction(self::STATE_INCLUDED_RANGE_END, $includedRangeLastTermAction);
     $this->addEntryAction(self::STATE_EXCLUDED_RANGE_FIRST_TERM, $excludedRangeFirstTermAction);
     $this->addEntryAction(self::STATE_EXCLUDED_RANGE_END, $excludedRangeLastTermAction);
     if (!$this->lexer instanceof QueryLexerInterface) {
         $this->lexer = Yii::createObject($this->lexer);
     }
 }
 /**
  * @param int $defaultOperator
  * @param array|int $higherPriorityOperator
  */
 public function __construct($defaultOperator, $higherPriorityOperator = QueryParser::OPERATOR_AND)
 {
     $this->_defaultOperator = $defaultOperator;
     $this->_higherPriorityOperator = $higherPriorityOperator;
     parent::__construct([self::ST_START, self::ST_LITERAL, self::ST_NOT_OPERATOR, self::ST_AND_OPERATOR, self::ST_OR_OPERATOR], [self::IN_LITERAL, self::IN_NOT_OPERATOR, self::IN_AND_OPERATOR, self::IN_OR_OPERATOR]);
     $emptyOperatorAction = new FSMAction($this, 'emptyOperatorAction');
     $emptyNotOperatorAction = new FSMAction($this, 'emptyNotOperatorAction');
     $this->addTransitions([[self::ST_START, self::IN_LITERAL, self::ST_LITERAL], [self::ST_START, self::IN_NOT_OPERATOR, self::ST_NOT_OPERATOR], [self::ST_LITERAL, self::IN_AND_OPERATOR, self::ST_AND_OPERATOR], [self::ST_LITERAL, self::IN_OR_OPERATOR, self::ST_OR_OPERATOR], [self::ST_LITERAL, self::IN_LITERAL, self::ST_LITERAL, $emptyOperatorAction], [self::ST_LITERAL, self::IN_NOT_OPERATOR, self::ST_NOT_OPERATOR, $emptyNotOperatorAction], [self::ST_NOT_OPERATOR, self::IN_LITERAL, self::ST_LITERAL], [self::ST_AND_OPERATOR, self::IN_LITERAL, self::ST_LITERAL], [self::ST_AND_OPERATOR, self::IN_NOT_OPERATOR, self::ST_NOT_OPERATOR], [self::ST_OR_OPERATOR, self::IN_LITERAL, self::ST_LITERAL], [self::ST_OR_OPERATOR, self::IN_NOT_OPERATOR, self::ST_NOT_OPERATOR]]);
     $notOperatorAction = new FSMAction($this, 'notOperatorAction');
     $orOperatorAction = new FSMAction($this, 'orOperatorAction');
     $andOperatorAction = new FSMAction($this, 'andOperatorAction');
     $literalAction = new FSMAction($this, 'literalAction');
     $this->addEntryAction(self::ST_NOT_OPERATOR, $notOperatorAction);
     $this->addEntryAction(self::ST_LITERAL, $literalAction);
     //if ($this->_higherPriorityOperator === QueryParser::OPERATOR_AND) {
     $this->addEntryAction(self::ST_OR_OPERATOR, $orOperatorAction);
     //} else {
     $this->addEntryAction(self::ST_AND_OPERATOR, $andOperatorAction);
     //}
 }