php-parser/grammar
Nikita Popov bc21514ecf Move token constants into separate class
As these are shared between Php5 and Php7 parsers they should be
in some common place, otherwise we'd have to always reference either
one or the other.
2015-06-13 18:39: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 Move token constants into separate class 2015-06-13 18:39:55 +02:00
php7.y Move token constants into separate class 2015-06-13 18:39:55 +02:00
README.md Move token constants into separate class 2015-06-13 18:39:55 +02:00
rebuildParsers.php Move token constants into separate class 2015-06-13 18:39:55 +02: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
  • analyze.php: Analyzes the grammer and outputs some info about it
  • rebuildParser.php: Preprocesses the grammar and builds the parser using kmyacc
  • parser.template: A kmyacc parser prototype file for PHP

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