php-parser/grammar
Nikita Popov 574665b45b PHP 7.1: list() with keys
Expr\List will now contain ArrayItems instead of plain variables.
I'm reusing ArrayItem, because code handling list() must also handle
arrays, and this allows both to go through the same code path.

This also renames Expr\List->vars to ->items.

TODO: Should Expr\List be dropped in favor of Expr\Array with an
extra flag?
2016-07-09 21:55:55 +02:00
..
analyze.php Move parser to Parser\Php5 2015-05-02 22:50:11 +02:00
parser.template Move token constants into separate class 2015-06-13 18:39:55 +02:00
php5.y PHP 7.1: list() with keys 2016-07-09 21:55:55 +02:00
php7.y PHP 7.1: list() with keys 2016-07-09 21:55:55 +02:00
README.md Various docs fixes 2015-07-14 21:11:54 +02:00
rebuildParsers.php Add string kinds and doc string labels 2016-04-07 12:09:00 +09:00
tokens.template Move token constants into separate class 2015-06-13 18:39:55 +02:00
tokens.y Implement generalized yield operator 2015-06-13 18:11:40 +02:00

What do all those files mean?

  • php5.y: PHP 5 grammar written in a pseudo language
  • php7.y: PHP 7 grammar written in a pseudo language
  • tokens.y: Tokens definition shared between PHP 5 and PHP 7 grammars
  • parser.template: A kmyacc parser prototype file for PHP
  • tokens.template: A kmyacc prototype file for the Tokens class
  • analyze.php: Analyzes the grammer and outputs some info about it
  • rebuildParser.php: Preprocesses the grammar and builds the parser using kmyacc

.phpy pseudo language

The .y 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 into new Name(..., ..., attributes())
  • Some function-like constructs are resolved (see rebuildParser.php for a list)

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 script.

By default only the Parser.php is built. If you want to additionally emit debug symbols and create y.output, run the script with --debug. If you want to retain the preprocessed grammar pass --keep-tmp-grammar.