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
 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.º 3
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;
 }