mirror of
https://github.com/phabelio/PHP-Parser.git
synced 2024-11-26 20:14:46 +01:00
c758510a37
With the introduction of intersection types, PHP now lexes the token '&' either as T_AMPERSAND_(NOT_)FOLLOWED_BY_VAR_OR_VARARG. This completely breaks parsing of any code containing '&'. Fix this by canonicalizing to the new token format (unconditionally, independent of emulation) and adjusting the parser to use the two new tokens. This doesn't add actual support for intersection types yet. |
||
---|---|---|
.. | ||
parser.template | ||
php5.y | ||
php7.y | ||
phpyLang.php | ||
README.md | ||
rebuildParsers.php | ||
tokens.template | ||
tokens.y |
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.