1
0
mirror of https://github.com/danog/PHP-Parser.git synced 2024-11-27 04:14:44 +01:00
Go to file
nikic 337da5648c Fix XML unserializer
The subNodes array was not initialized, so for empty nodes it would just
be null. Due to the addition of attributes for nodes those have to be
initialized too.
2012-04-04 14:06:08 +02:00
doc Update docs to mention emulative lexer 2012-02-21 19:02:04 +01:00
grammar Clarify that parser is autogenerated 2012-03-02 00:43:34 +01:00
lib Fix XML unserializer 2012-04-04 14:06:08 +02:00
test Fix XML unserializer 2012-04-04 14:06:08 +02:00
test_old Make old testrunner PHP 5.2 compatible 2012-01-15 16:55:01 +01:00
.travis.yml Add Travis config file 2012-03-17 13:18:16 +01: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.