1: <?php declare(strict_types=1);
2:
3: namespace PhpParser;
4:
5: use PhpParser\Parser\Php7;
6: use PhpParser\Parser\Php8;
7:
8: class 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: