code: private function matchOr(array &$chars, $current, $expected, $type, $orElse)
      {
          if (next($chars) === $expected) {
              next($chars);
              return [
                  'type'  => $type,
                  'pos'   => key($chars) - 1,
                  'value' => $current . $expected
              ];
          }
  
          return [
              'type'  => $orElse,
              'pos'   => key($chars) - 1,
              'value' => $current
          ];
      }
docs: Returns a token based on whether or not the next token matches the
  expected value. If it does, a token of "$type" is returned. Otherwise,
  a token of "$orElse" type is returned.
  
  @param array  $chars    Array of characters by reference.
  @param string $current  The current character.
  @param string $expected Expected character.
  @param string $type     Expected result type.
  @param string $orElse   Otherwise return a token of this type.
  
  @return array Returns a conditional token.