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