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 caa5c0cc76 Graceful handling for "special" errors
Nearly all special errors are now handled gracefully, i.e. the
parser will be able to continue after encountering them. In some
cases the associated error range has been improved using the new
end attribute stack.

To achieve this the error handling code has been moved out of the
node constructors and into special methods in the parser.
2016-10-09 12:38:18 +02:00
bin Add Error::getMessageWithColumnInfo() 2016-09-30 18:24:43 +02:00
doc Update some PHP version numbers 2016-07-22 17:07:56 +02:00
grammar Graceful handling for "special" errors 2016-10-09 12:38:18 +02:00
lib Graceful handling for "special" errors 2016-10-09 12:38:18 +02:00
test Graceful handling for "special" errors 2016-10-09 12:38:18 +02:00
test_old Run test_old using php -n 2016-04-10 21:09:02 +09:00
.gitignore Use composer PSR-4 autoloader 2015-09-16 22:02:00 +09:00
.travis.yml Remove support for PHP 5.4 2016-07-05 22:29:41 +02:00
CHANGELOG.md Add NodeAbstract::setDocComment() 2016-09-17 20:51:22 +02:00
composer.json Use phpunit 5 if we can rather than 4 (#301) 2016-09-16 17:41:21 +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 Update some PHP version numbers 2016-07-22 17:07:56 +02:00
UPGRADE-1.0.md Fix typos 2014-09-12 14:44:32 +02:00
UPGRADE-2.0.md Release PHP-Parser 2.0.0 2015-12-04 16:28:43 +01:00
UPGRADE-3.0.md Add upgrading information 2016-07-25 15:09:21 +02:00

PHP Parser

Build Status Coverage Status

This is a PHP 5.2 to PHP 7.1 parser written in PHP. Its purpose is to simplify static code analysis and manipulation.

Documentation for version 2.x (stable; for running on PHP >= 5.4; for parsing PHP 5.2 to PHP 7.0).

Documentation for version 1.x (unsupported; for running on PHP >= 5.3; for parsing PHP 5.2 to PHP 5.6).

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

Installation

The preferred installation method is composer:

php composer.phar require nikic/php-parser

Documentation

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

Component documentation:

  1. Error
  2. Lexer