1
0
mirror of https://github.com/danog/PHP-Parser.git synced 2024-11-30 04:19:30 +01:00
Go to file
Nikita Popov dc85742034 Merge branch '1.x'
Conflicts:
	CHANGELOG.md
	composer.json
	test/PhpParser/ParserTest.php
2015-07-14 19:43:49 +02:00
bin Support UVS in pretty printer 2015-06-13 20:01:01 +02:00
doc Partial docs update 2015-07-14 19:19:32 +02:00
grammar Add support for unicode escape sequences 2015-06-13 20:51:02 +02:00
lib Disable cloning in traverser by default 2015-07-14 17:39:56 +02:00
test Merge branch '1.x' 2015-07-14 19:43:49 +02:00
test_old Fix test_old/run.php error message 2015-07-09 12:38:30 +02:00
.travis.yml Set version to 2.0-dev. Drop PHP 5.3 support 2015-05-02 22:08:03 +02:00
CHANGELOG.md Merge branch '1.x' 2015-07-14 19:43:49 +02:00
composer.json Prepare PHP-Parser 1.4.0 release 2015-07-14 19:31:05 +02: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 Merge branch '1.x' 2015-07-02 18:09:38 +02:00
UPGRADE-1.0.md Fix typos 2014-09-12 14:44:32 +02:00
UPGRADE-2.0.md Partial docs update 2015-07-14 19:19:32 +02:00

PHP Parser

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 2.x-dev (dev; for running on PHP >= 5.4).

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

Documentation

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

Component documentation:

  1. Lexer