A PHP parser written in PHP
Go to file
Nikita Popov 6996db1e3a Build node attributes inside semantic action methods
Minor performance improvement for parsing, also allows to access
attributes with higher granulity in the parser, though this is not
currently done.

* #n can now be used to access the stack position of a token. $n
  is the same as $this->semStack[#n]. (Post-translate $n will
  actually be the stack position.)
* $attributeStack is now $this->startAttributeStack and
  $endAttributes is now $this->endAttributes.
* Attributes for a node are now computed inside the individual
  reduction methods, instead of being passed as a parameter.
  Accessible through the attributes() macro.
2015-04-26 11:55:59 +02:00
bin Test parser position information (syntax errors) 2015-04-18 13:27:57 +02:00
doc Fix a few more Scalar\String_ occurances 2015-03-21 18:54:52 +01:00
grammar Build node attributes inside semantic action methods 2015-04-26 11:55:59 +02:00
lib Build node attributes inside semantic action methods 2015-04-26 11:55:59 +02:00
test Make column info 1-based 2015-04-18 21:20:45 +02:00
test_old Fix a number of other typos 2014-02-12 17:47:34 +01:00
.travis.yml Fix lexer tests for HHVM 2015-02-26 19:19:40 +01:00
CHANGELOG.md Release PHP-Parser 1.2.2 2015-04-03 16:33:59 +02:00
composer.json Version bump 2015-04-19 17:57:38 +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 Add documentation TOC to readme 2015-03-10 21:32:21 +01: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. 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