A PHP parser written in PHP
Go to file
Nikita Popov 2b6804aa50 Throw on nested array in NodeTraverser
The AST never uses deeply nested arrays, so don't support this in
the node traverser. Throw an exception instead.
2017-02-03 22:11:31 +01:00
bin Add php-parse --with-positions 2016-12-09 22:41:46 +01:00
doc Update docs 2016-10-29 13:37:47 +02:00
grammar Drop useNopStatements option 2017-01-20 22:29:41 +01:00
lib Throw on nested array in NodeTraverser 2017-02-03 22:11:31 +01:00
test Throw on nested array in NodeTraverser 2017-02-03 22:11:31 +01:00
test_old Update run-php-src to use 7.1.0 2016-12-11 16:47:47 +01:00
.gitignore Use composer PSR-4 autoloader 2015-09-16 22:02:00 +09:00
.travis.yml Allow failures on HHVM 2017-01-19 23:05:13 +01:00
CHANGELOG.md Add originalName attribute in NameResolver 2016-12-22 20:25:02 +01:00
composer.json Drop support for PHP 5.5 2017-01-19 20:55:08 +01:00
LICENSE fix typos 2011-06-26 18:45:19 +02:00
phpunit.xml.dist Split parsing tests into code tests and other stuff 2015-06-20 11:44:29 +02:00
README.md Bump development version to 4.0 2017-01-19 20:48:57 +01:00
UPGRADE-1.0.md Fix typos 2014-09-12 14:44:32 +02:00
UPGRADE-2.0.md Release PHP-Parser 2.0.0 2015-12-04 16:28:43 +01:00
UPGRADE-3.0.md Add UPGRADE note about NameResolver changes 2016-12-07 20:09:23 +01:00
UPGRADE-4.0.md Update doc comments after previous comment 2017-01-26 00:16:54 +01:00

PHP Parser

Build Status Coverage Status

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

Documentation for version 3.x (stable; for running on PHP >= 5.5; for parsing PHP 5.2 to PHP 7.1).

Documentation for version 2.x (stable; for running on PHP >= 5.4; for parsing PHP 5.2 to PHP 7.0).

Documentation for version 1.x (unsupported; for running on PHP >= 5.3; for parsing PHP 5.2 to PHP 5.6).

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:

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

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

array(
    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).

Installation

The preferred installation method is composer:

php composer.phar require nikic/php-parser

Documentation

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

Component documentation:

  1. Error handling
  2. Lexer