Example #1
0
 public function __construct(Parser $p)
 {
     $t = new Parser\Sequence();
     $t->add(new Parser\CharClass(array('+', '-')));
     $t->add($p);
     $t->setHandler(new Handler\Signed());
     parent::__construct($t);
 }
Example #2
0
 /**
  * @dataProvider operatorProvider
  */
 public function testOperator($expression, $expected)
 {
     $sum = new P\Sequence();
     $sum->add((new P\Number())->setHandler(new H\Value()));
     $sum->add(new P\CharClass(array('+', '-', '*', '/', '^')));
     $sum->add((new P\Number())->setHandler(new H\Value()));
     $sum->setHandler(new H\Operator());
     $this->assertEquals($expected, $this->evaluate($sum, $expression));
 }
Example #3
0
 protected function sum(Parser $t)
 {
     $tail = new P\Sequence();
     $tail->add(new P\CharClass(array('+', '-')));
     $tail->add($t);
     $tail->setHandler(new H\Operator());
     $p = new P\Sequence();
     $p->add($t);
     $p->add(new P\Repeat($tail));
     return $p;
 }
Example #4
0
 public function testMayBe()
 {
     $p = new I\Parser\MayBe(new I\Parser\Word('token'));
     $scan = self::scanner('notokenhere');
     $ctx = $scan->getContext();
     $this->assertTrue($p->scan($scan));
     $this->assertEquals(0, $ctx->size());
     $scan = self::scanner('token is presented');
     $ctx = $scan->getContext();
     $this->assertTrue($p->scan($scan));
     $this->assertEquals(1, $ctx->size());
     $p = new I\Parser\Sequence();
     $p->add(new I\Parser\MayBe(new I\Parser\CharClass(array('-', '+'))));
     $p->add(new I\Parser\Number());
     $scan = self::scanner('-5 +7 18');
     $ctx = $scan->getContext();
     $this->assertTrue($p->scan($scan));
     $this->assertEquals('5', $ctx->pop());
     $this->assertEquals('-', $ctx->pop());
     $this->assertTrue($p->scan($scan));
     $this->assertEquals('7', $ctx->pop());
     $this->assertEquals('+', $ctx->pop());
     $this->assertTrue($p->scan($scan));
     $this->assertEquals('18', $ctx->pop());
 }