t3nma c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
..
bin c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
doc c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
grammar c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
lib c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
test c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
test_old c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
.travis.yml c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
CHANGELOG.md c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
LICENSE c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
README.md c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
UPGRADE-1.0.md c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
composer.json c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos
phpunit.xml.dist c527ad0803 [COMPOSER] Add new php-ffmpeg package %!s(int64=4) %!d(string=hai) anos

README.md

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

Documentation

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

Component documentation:

  1. Lexer