rector/vendor/nikic/php-parser/grammar/rebuildParsers.php
Tomas Votruba b2218b1dc3 Updated Rector to commit a7fe982fcbe5901a7e072ec3911cdd201536eb01
a7fe982fcb [Renaming] Handle Rename before AttributeGroup on RenameClassRector (#1481)
2021-12-14 08:14:22 +00:00

65 lines
2.3 KiB
PHP

<?php
namespace RectorPrefix20211214;
require __DIR__ . '/phpyLang.php';
$grammarFileToName = [__DIR__ . '/php5.y' => 'Php5', __DIR__ . '/php7.y' => 'Php7'];
$tokensFile = __DIR__ . '/tokens.y';
$tokensTemplate = __DIR__ . '/tokens.template';
$skeletonFile = __DIR__ . '/parser.template';
$tmpGrammarFile = __DIR__ . '/tmp_parser.phpy';
$tmpResultFile = __DIR__ . '/tmp_parser.php';
$resultDir = __DIR__ . '/../lib/PhpParser/Parser';
$tokensResultsFile = $resultDir . '/Tokens.php';
$kmyacc = \getenv('KMYACC');
if (!$kmyacc) {
// Use phpyacc from dev dependencies by default.
$kmyacc = __DIR__ . '/../vendor/bin/phpyacc';
}
$options = \array_flip($argv);
$optionDebug = isset($options['--debug']);
$optionKeepTmpGrammar = isset($options['--keep-tmp-grammar']);
///////////////////
/// Main script ///
///////////////////
$tokens = \file_get_contents($tokensFile);
foreach ($grammarFileToName as $grammarFile => $name) {
echo "Building temporary {$name} grammar file.\n";
$grammarCode = \file_get_contents($grammarFile);
$grammarCode = \str_replace('%tokens', $tokens, $grammarCode);
$grammarCode = \RectorPrefix20211214\preprocessGrammar($grammarCode);
\file_put_contents($tmpGrammarFile, $grammarCode);
$additionalArgs = $optionDebug ? '-t -v' : '';
echo "Building {$name} parser.\n";
$output = \RectorPrefix20211214\execCmd("{$kmyacc} {$additionalArgs} -m {$skeletonFile} -p {$name} {$tmpGrammarFile}");
$resultCode = \file_get_contents($tmpResultFile);
$resultCode = \RectorPrefix20211214\removeTrailingWhitespace($resultCode);
\RectorPrefix20211214\ensureDirExists($resultDir);
\file_put_contents("{$resultDir}/{$name}.php", $resultCode);
\unlink($tmpResultFile);
echo "Building token definition.\n";
$output = \RectorPrefix20211214\execCmd("{$kmyacc} -m {$tokensTemplate} {$tmpGrammarFile}");
\rename($tmpResultFile, $tokensResultsFile);
if (!$optionKeepTmpGrammar) {
\unlink($tmpGrammarFile);
}
}
////////////////////////////////
/// Utility helper functions ///
////////////////////////////////
function ensureDirExists($dir)
{
if (!\is_dir($dir)) {
\mkdir($dir, 0777, \true);
}
}
function execCmd($cmd)
{
$output = \trim(\shell_exec("{$cmd} 2>&1"));
if ($output !== "") {
echo "> " . $cmd . "\n";
echo $output;
}
return $output;
}