Ejemplo n.º 1
0
 protected function doScan(Scanner $scan)
 {
     $start = $scan->getState();
     $int = $scan->token();
     $scan->next();
     if ($scan->token() !== '.') {
         $scan->setState($start);
         $res = is_null($this->number) || $this->number == $int;
         if ($res) {
             $scan->getContext()->push($int);
             // echo "$int | Parsed. Next token is not a point\n";
             // } else {
             // echo "$int | Next token is not a point. Doesn't match {$this->number}\n";
         }
         return $res;
     }
     if (!$scan->next() || $scan->type() !== Scanner::NUMBER) {
         $scan->setState($start);
         // echo "$int | Fail: not number after /\d+\./ \n";
         return false;
     }
     $frac = $scan->token();
     if (!is_null($this->number)) {
         if ("{$int}.{$frac}" != $this->number) {
             $scan->setState($start);
             // echo "$int.$frac | Parsed float doesn't match {$this->number}\n";
             return false;
         }
     }
     $scan->getContext()->push("{$int}.{$frac}");
     // echo "$int.$frac | Parsed\n";
     return true;
 }
Ejemplo n.º 2
0
 protected function doScan(Scanner $scan)
 {
     $q = $scan->type();
     $ok = false;
     $escape = false;
     $str = '';
     while ($scan->next()) {
         if ($escape) {
             $escape = false;
         } else {
             if ($scan->token() === '\\') {
                 $escape = true;
                 continue;
             }
             if ($q === $scan->type()) {
                 $ok = true;
                 break;
             }
         }
         $str .= $scan->token();
     }
     if ($ok && !$this->discard) {
         $scan->getContext()->push($str);
     }
     return $ok;
 }
Ejemplo n.º 3
0
 public function testScan()
 {
     $scan = new I\Scanner(new I\StringReader("1+2"), $ctx = new I\Context());
     $scan->next();
     $this->assertSame('1', $scan->token());
     $scan->next();
     $this->assertSame('+', $scan->token());
     $scan->next();
     $this->assertSame('2', $scan->token());
 }
Ejemplo n.º 4
0
 public function trigger(Scanner $scanner)
 {
     if ($scanner->type() !== Scanner::CHAR) {
         return false;
     }
     if (is_null($this->char)) {
         return true;
     }
     return $scanner->token() == $this->char;
 }
Ejemplo n.º 5
0
 public function trigger(Scanner $scanner)
 {
     if ($scanner->type() !== Scanner::NUMBER) {
         return false;
     }
     if (is_null($this->num)) {
         return true;
     }
     return $scanner->token() == $this->num;
 }
Ejemplo n.º 6
0
 public function trigger(Scanner $scanner)
 {
     if ($scanner->type() !== Scanner::WORD) {
         return false;
     }
     if (is_null($this->word)) {
         return true;
     }
     return $scanner->token() == $this->word;
 }
Ejemplo n.º 7
0
 public function trigger(Scanner $scan)
 {
     return in_array($scan->token(), $this->chars);
 }