protected function doScan(Scanner $scanner) { $type = $scanner->tokenType(); $start_state = null; foreach ($this->parsers as $parser) { $start_state = $scanner->getState(); if ($type == $parser->trigger($scanner) && $parser->scan($scanner)) { return true; } } $scanner->setState($start_state); return false; }
protected function doScan(Scanner $scanner) { $quotechar = $scanner->tokenType(); $ret = false; $string = ""; while ($token = $scanner->nextToken()) { if ($token == $quotechar) { $ret = true; break; } $string .= $scanner->token(); } if ($string && !$this->discard) { $scanner->getContext()->pushResult($string); } return $ret; }
final function scan(Scanner $scanner) { if ($scanner->tokenType() == Scanner::SOF) { $scanner->nextToken(); } $ret = $this->doScan($scanner); if ($ret && !$this->discard && $this->term()) { $this->push($scanner); } if ($ret) { $this->invokeHandler($scanner); } if ($this->term() && $ret) { $this->next($scanner); } $this->report("::scan returning {$ret}"); return $ret; }
function trigger(Scanner $scanner) { if ($scanner->tokenType() != Scanner::WORD) { return false; } if (is_null($this->word)) { return true; } return $this->word == $scanner->token(); }
/** * sign: '!' sign | '+' sign | '-' sign | index */ private static function parseSign(Scanner $scanner) { switch ($scanner->tokenType()) { case '!': $scanner->nextToken(); $result = new NotExpression(self::parseSign($scanner)); break; case '+': $scanner->nextToken(); $result = self::parseSign($scanner); break; case '-': $scanner->nextToken(); $result = new MinusExpression(self::parseSign($scanner)); break; default: $result = self::parseIndex($scanner); } return $result; }