예제 #1
0
 /**
  * @return SimplifyVisitor
  */
 public function testVisitor4()
 {
     $visitor = new TypeVisitor(VariableNode::class);
     $this->assertFalse($visitor->visit(Tree::add(2, 3)));
     $this->assertFalse($visitor->visit(Tree::pow(2, 3)));
     $this->assertFalse($visitor->visit(Tree::mult(2, 3)));
     $this->assertFalse($visitor->visit(Tree::init(3)));
     $this->assertTrue($visitor->visit(Tree::init('x')));
 }
예제 #2
0
 public function visitBinaryMultiplicationNode(BinaryMultiplicationNode $node)
 {
     if ($this->isZeroVisitor->visit($node)) {
         return new ConstantNode(0);
     }
     $a = $this->visit($node->getA());
     $b = $this->visit($node->getB());
     if ($this->isOneVisitor->visit($a)) {
         return $b;
     }
     if ($this->isOneVisitor->visit($b)) {
         return $a;
     }
     if ($this->isConstantVisitor->visit($a)) {
         if ($this->isConstantVisitor->visit($b)) {
             return new ConstantNode($this->evaluationVisitor->visit($a) * $this->evaluationVisitor->visit($b));
         }
     }
     return new BinaryMultiplicationNode($a, $b);
 }