mirror of
https://github.com/nikic/PHP-Parser.git
synced 2025-04-21 14:31:57 +02:00
This makes us match the PHP 8.2 handling of readonly. Handling of "readonly" functions is moved to the parser to allow distinguishing them from readonly properties with DNF types. We have to uglify the grammar to avoid some shift/reduce conflicts. Thank you WordPress. (cherry-picked from 0dd85ebd34d7463d53ec92035105b04799a687e1)
What do all those files mean?
php5.y
: PHP 5 grammar written in a pseudo languagephp7.y
: PHP 7 grammar written in a pseudo languagetokens.y
: Tokens definition shared between PHP 5 and PHP 7 grammarsparser.template
: Akmyacc
parser prototype file for PHPtokens.template
: Akmyacc
prototype file for theTokens
classrebuildParsers.php
: Preprocesses the grammar and builds the parser usingkmyacc
.phpy pseudo language
The .y
file is a normal grammar in kmyacc
(yacc
) style, with some transformations
applied to it:
- Nodes are created using the syntax
Name[..., ...]
. This is transformed intonew Name(..., ..., attributes())
- Some function-like constructs are resolved (see
rebuildParsers.php
for a list)
Building the parser
Run php grammar/rebuildParsers.php
to rebuild the parsers. Additional options:
- The
KMYACC
environment variable can be used to specify an alternativekmyacc
binary. By default thephpyacc
dev dependency will be used. To use the originalkmyacc
, you need to compile moriyoshi's fork. - The
--debug
option enables emission of debug symbols and creates they.output
file. - The
--keep-tmp-grammar
option preserves the preprocessed grammar file.