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); }
/** * @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)); }
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; }
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()); }