public function shift(): ?self
    {
        $further = $this->further;
        if (!$further) {
            return null;
        }
        $passed = $this->passed;

        $passed[] = array_shift($further);
        return new static($this->subject, $passed, $further, $this->eof, $this->tag);
    }
public function shift(): ?self
    {
        $further = $this->further;
        if (!$further) {
            return null;
        }
        $passed = $this->passed;

        $passed[] = array_shift($further);
        return new static($this->subject, $passed, $further, $this->eof, $this->tag);
    }
public function shift ( ) : ? self { $ further = $ this -> further ; if ( ! $ further ) { return null ; } $ passed = $ this -> passed ; $ passed [ ] = array_shift ( $ further ) ; return new static ( $ this -> subject , $ passed , $ further , $ this -> eof , $ this -> tag ) ; }
Create new Item by shifting current position to the next symbol
@return static|null Returns new Item with current position shifted to the next symbol.
Returns `null` then there is not next expected symbol.
Create new Item by shifting current position to the next symbol