Chris@13: = 2.0 — does. Chris@13: * Chris@13: * @return bool Chris@13: */ Chris@13: public function hasKindsSupport() Chris@13: { Chris@17: return \class_exists('PhpParser\ParserFactory'); Chris@13: } Chris@13: Chris@13: /** Chris@13: * Default kind (if supported, based on current interpreter's version). Chris@13: * Chris@13: * @return string|null Chris@13: */ Chris@13: public function getDefaultKind() Chris@13: { Chris@13: if ($this->hasKindsSupport()) { Chris@17: return \version_compare(PHP_VERSION, '7.0', '>=') ? static::ONLY_PHP7 : static::ONLY_PHP5; Chris@13: } Chris@13: } Chris@13: Chris@13: /** Chris@13: * New parser instance with given kind. Chris@13: * Chris@13: * @param string|null $kind One of class constants (only for PHP parser 2.0 and above) Chris@13: * Chris@13: * @return Parser Chris@13: */ Chris@13: public function createParser($kind = null) Chris@13: { Chris@13: if ($this->hasKindsSupport()) { Chris@13: $originalFactory = new OriginalParserFactory(); Chris@13: Chris@13: $kind = $kind ?: $this->getDefaultKind(); Chris@13: Chris@17: if (!\in_array($kind, static::getPossibleKinds())) { Chris@13: throw new \InvalidArgumentException('Unknown parser kind'); Chris@13: } Chris@13: Chris@17: $parser = $originalFactory->create(\constant('PhpParser\ParserFactory::' . $kind)); Chris@13: } else { Chris@13: if ($kind !== null) { Chris@13: throw new \InvalidArgumentException('Install PHP Parser v2.x to specify parser kind'); Chris@13: } Chris@13: Chris@13: $parser = new Parser(new Lexer()); Chris@13: } Chris@13: Chris@13: return $parser; Chris@13: } Chris@13: }