xjaja 8d50e9d066 Don't drop class statements before error (#952)
When encountering a null statement (indicating that an error occurred),
retain the preceding statements. These were accidentally dropped
previously.

(cherry picked from commit 54103d838734be0499172026525e38cbf6af2711)
2023-10-07 12:22:01 +02:00
..
2023-09-24 21:13:01 +02:00
2022-08-30 20:54:07 +02:00

What do all those files mean?

  • php.y: PHP 5-8 grammar written in a pseudo language
  • parser.template: A kmyacc parser prototype file for PHP
  • rebuildParsers.php: Preprocesses the grammar and builds the parser using kmyacc

.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 into new 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 alternative kmyacc binary. By default the phpyacc dev dependency will be used. To use the original kmyacc, you need to compile moriyoshi's fork.
  • The --debug option enables emission of debug symbols and creates the y.output file.
  • The --keep-tmp-grammar option preserves the preprocessed grammar file.