A PHP parser written in PHP
Go to file
nikic e587e3f4c6 Collect normal comments too, not only doc comments
Comments and doc comments are now saved in the 'comments' attribute, as an
array. The are instances of PHPParser_Comment[_Doc].
2012-05-06 17:49:04 +02:00
doc Fix typo 2012-05-04 10:16:44 +02:00
grammar Generalize the attribute generation for nodes 2012-05-05 17:34:27 +02:00
lib Collect normal comments too, not only doc comments 2012-05-06 17:49:04 +02:00
test Collect normal comments too, not only doc comments 2012-05-06 17:49:04 +02:00
test_old Add progress indicator for test_old. 2012-05-05 12:22:23 +02:00
.travis.yml Add Travis config file 2012-03-17 13:18:16 +01:00
CHANGELOG.md Release version 0.9.1 2012-04-24 00:52:11 +02:00
composer.json adds composer.json 2012-01-05 10:46:10 +01:00
LICENSE fix typos 2011-06-26 18:45:19 +02:00
phpunit.xml.dist Remove duplicate bootstrap.php 2012-04-04 13:50:21 +02:00
README.md Tweak readme 2012-02-21 19:58:11 +01:00

PHP Parser

This is a PHP 5.4 (and older) parser written in PHP. It's purpose is to simplify static code analysis and manipulation.

Documentation can be found in the doc/ directory.

Note: This project is experimental, so the API is subject to change.

In a Nutshell

Basically, the parser does nothing more than turn some PHP code into an abstract syntax tree. ("nothing more" is kind of sarcastic here as PHP has a ... uhm, let's just say "not nice" ... grammar, which makes parsing PHP very hard.)

For example, if you stick this code in 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).

So, that's it, in a nutshell. You can find everything else in the docs.