1<?php declare(strict_types=1); 2 3namespace PhpParser; 4 5use PhpParser\Parser\Php7; 6use PhpParser\Parser\Php8; 7 8class ParserFactory { 9 /** 10 * Create a parser targeting the given version on a best-effort basis. The parser will generally 11 * accept code for the newest supported version, but will try to accommodate code that becomes 12 * invalid in newer versions or changes in interpretation. 13 */ 14 public function createForVersion(PhpVersion $version): Parser { 15 if ($version->isHostVersion()) { 16 $lexer = new Lexer(); 17 } else { 18 $lexer = new Lexer\Emulative($version); 19 } 20 if ($version->id >= 80000) { 21 return new Php8($lexer, $version); 22 } 23 return new Php7($lexer, $version); 24 } 25 26 /** 27 * Create a parser targeting the newest version supported by this library. Code for older 28 * versions will be accepted if there have been no relevant backwards-compatibility breaks in 29 * PHP. 30 */ 31 public function createForNewestSupportedVersion(): Parser { 32 return $this->createForVersion(PhpVersion::getNewestSupported()); 33 } 34 35 /** 36 * Create a parser targeting the host PHP version, that is the PHP version we're currently 37 * running on. This parser will not use any token emulation. 38 */ 39 public function createForHostVersion(): Parser { 40 return $this->createForVersion(PhpVersion::getHostVersion()); 41 } 42} 43