/**
  * @param StringStream $stream
  * @return string
  */
 private function getFullString(StringStream $stream) : string
 {
     $stream->start();
     $string = '';
     do {
         $string .= $stream->current();
         $stream->next();
     } while (!$stream->isEnd());
     return $string;
 }
 /**
  * @param string $tokenName
  */
 private function defaultExtractor(string $tokenName)
 {
     if (!array_key_exists($tokenName, $this->tokens)) {
         $this->tokens[$tokenName] = '';
     }
     start:
     $char = $this->stream->currentAscii();
     if ($char->isPrintableChar() && !$char->isWhiteSpace()) {
         $this->tokens[$tokenName] .= $this->stream->current();
         $this->stream->next();
         goto start;
     }
 }
 /**
  * @param string $variableName
  */
 private function extractGlobalVariableValue(string $variableName)
 {
     $this->{$variableName} = '';
     start:
     $char = $this->stream->currentAscii();
     $this->{$variableName} .= '';
     if ($char->isLetter() || $char->isDigit() || $char->is(AsciiChar::UNDERSCORE) || $char->is(AsciiChar::DOT) || $char->is(AsciiChar::HYPHEN) || $char->is(AsciiChar::AT_SYMBOL) || $char->is(AsciiChar::ASTERISK)) {
         $this->{$variableName} .= $this->stream->current();
         $this->stream->next();
         goto start;
     } elseif ($char->isWhiteSpace()) {
         return;
     } else {
         throw new SyntaxErrorException($this->stream);
     }
 }