A PHP parser written in PHP

Installs: 6 930 051

Dependents: 194

Stars: 1 822

Watchers: 154

Forks: 250

Open Issues: 13

Language: PHP

v2.0.0alpha1 2015-07-14 19:13 UTC


This is a PHP 5.2 to PHP 5.6 parser written in PHP. Its purpose is to simplify static code analysis and manipulation.

Documentation for version 1.x (stable; for running on PHP >= 5.3).

Documentation for version 0.9.x (unsupported; for running on PHP 5.2).

In a Nutshell

The parser turns PHP source code into an abstract syntax tree. For example, if you pass the following code into the parser:

echo 'Hi', 'World';
hello\world('foo', 'bar' . 'baz');

You'll get a syntax tree looking roughly like this:

    0: Stmt_Echo(
        exprs: array(
            0: Scalar_String(
                value: Hi
            1: Scalar_String(
                value: World
    1: Expr_FuncCall(
        name: Name(
            parts: array(
                0: hello
                1: world
        args: array(
            0: Arg(
                value: Scalar_String(
                    value: foo
                byRef: false
            1: Arg(
                value: Expr_Concat(
                    left: Scalar_String(
                        value: bar
                    right: Scalar_String(
                        value: baz
                byRef: false

You can then work with this syntax tree, for example to statically analyze the code (e.g. to find programming errors or security issues).

Additionally, you can convert a syntax tree back to PHP code. This allows you to do code preprocessing (like automatedly porting code to older PHP versions).


  1. Introduction
  2. Installation
  3. Usage of basic components
  4. Other node tree representations
  5. Code generation

Component documentation:

  1. Lexer