Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
 function trigger(Scanner $scanner)
 {
     if ($scanner->tokenType() != Scanner::WORD) {
         return false;
     }
     if (is_null($this->word)) {
         return true;
     }
     return $this->word == $scanner->token();
 }
Ejemplo n.º 5
0
 /**
  * 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;
 }