コード例 #1
0
 /**
  * @param Delimiter $delimiter
  */
 public function removeDelimiter(Delimiter $delimiter)
 {
     if ($delimiter->getPrevious() !== null) {
         $delimiter->getPrevious()->setNext($delimiter->getNext());
     }
     if ($delimiter->getNext() === null) {
         // top of stack
         $this->top = $delimiter->getPrevious();
     } else {
         $delimiter->getNext()->setPrevious($delimiter->getPrevious());
     }
 }
コード例 #2
0
 /**
  * @param Delimiter      $closer
  * @param array          $openersBottom
  * @param Delimiter|null $stackBottom
  *
  * @return Delimiter|null
  */
 protected function findFirstMatchingOpener(Delimiter $closer, $openersBottom, Delimiter $stackBottom = null)
 {
     $closerChar = $closer->getChar();
     $opener = $closer->getPrevious();
     while ($opener !== null && $opener !== $stackBottom && $opener !== $openersBottom[$closerChar]) {
         if ($opener->getChar() === $closerChar && $opener->canOpen()) {
             return $opener;
         }
         $opener = $opener->getPrevious();
     }
 }