A PHP parser written in PHP
Go to file
Máximo Cuadros Ortiz d774dbc1b7 Add optional startFilePos and endFilePos attributes
The lexer can now optionally add startFilePos and endFilePos
attributes, which are offsets in to the lexed code string.

The end offset currently points one past the last character of
the token - this is pending further discussion.

The attributes are not added by default and have to be enabled
using the new 'usedAttributes' lexer option:

	$lexer = new Lexer([
		'usedAttributes' => [
			'comments', 'startLine', 'endLine',
			'startFilePos', 'endFilePos'
		]
	]);
2014-11-27 20:38:29 +01:00
bin Add ability to pass code directly to php-parse.php 2014-09-28 13:14:37 +02:00
doc Release PHP-Parser 1.0.2 2014-11-04 23:12:46 +01:00
grammar Disallow new without a class name 2014-09-28 12:41:35 +02:00
lib Add optional startFilePos and endFilePos attributes 2014-11-27 20:38:29 +01:00
test Add optional startFilePos and endFilePos attributes 2014-11-27 20:38:29 +01:00
test_old Fix a number of other typos 2014-02-12 17:47:34 +01:00
.travis.yml add PHP 5.6 to .travis.yml 2014-08-29 00:44:47 +09:00
CHANGELOG.md Release PHP-Parser 1.0.2 2014-11-04 23:12:46 +01:00
composer.json Specify autoloader in composer.json 2014-02-06 21:39:57 +01:00
LICENSE fix typos 2011-06-26 18:45:19 +02:00
phpunit.xml.dist fix typo (see also issue 93 already fixed) 2014-02-12 17:39:57 +01:00
README.md Release PHP-Parser 1.0.0 2014-09-12 14:48:23 +02:00
UPGRADE-1.0.md Fix typos 2014-09-12 14:44:32 +02:00

PHP Parser

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

Documentation for version 1.0.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:

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