mirror of
https://github.com/phabelio/PHP-Parser.git
synced 2024-11-30 04:29:15 +01:00
db3181aff1
The parser didn't account for the additional newline after the content of doc strings, which is left there by the tokenizer for some reason. Additoinally esacape sequences were parsed in nowdoc strings. Additionally this contains some minor changes to the grammar: Some _list nonterminals were refactored to have the possible single elements in a reparate rule and only assemble those single elements. (This reduces duplication and gives better assignment of line number context.) |
||
---|---|---|
.. | ||
analyze.php | ||
kmyacc.php.parser | ||
README.md | ||
rebuildParser.php | ||
zend_language_parser.phpy |
What do all those files mean?
zend_language_parser.y
: Original PHP grammer this parser is based onzend_language_parser.phpy
: PHP grammer written in a pseudo languageanalyze.php
: Analyzes the.phpy
-grammer and outputs some info about itrebuildParser.php
: Preprocesses the.phpy
-grammar and builds the parser usingkmyacc
kmyacc.php.parser
: Akmyacc
parser prototype file for PHP
.phpy pseudo language
The .phpy
file is a normal grammer in kmyacc
(yacc
) style, with some transformations
applied to it:
- Nodes are created using the syntax
Name[..., ...]
. This is transformed intonew PHPParser_Node_Name(..., ..., $line, $docComment)
Name::abc
is transformed toPHPParser_Node_Name::abc
- Some function-like constructs are resolved (see
rebuildParser.php
for a list) - Associative arrays are written as
[key: value, ...]
, which is transformed toarray('key' => value, ...)
Building the parser
In order to rebuild the parser, you need moriyoshi's fork of kmyacc.
After you compiled/installed it, run the rebuildParser.php
file.
By default only the Parser.php is built. If you want to build the Parser/Debug.php and the y.output
file you need to call the file with the debug option: rebuildParser.php?debug
.