mirror of
https://github.com/nikic/PHP-Parser.git
synced 2025-01-29 13:17:36 +01:00
4b497045e0
The Lexer now only provides the tokens to the parser, while the parser is responsible for determining which attributes are placed on notes. This only needs to be done when the attributes are actually needed, rather than for all tokens. This removes the usedAttributes lexer option (and lexer options entirely). The attributes are now enabled unconditionally. They have less overhead now, and the need to explicitly enable them for some use cases (e.g. formatting-preserving printing) doesn't seem like a good tradeoff anymore. There are some additional changes to the Lexer interface that should be done after this, and the docs / upgrading guide haven't been adjusted yet.
What do all those files mean?
php.y
: PHP 5-8 grammar written in a pseudo languageparser.template
: Akmyacc
parser prototype file for PHPrebuildParsers.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.