d774dbc1b7
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' ] ]); |
||
---|---|---|
bin | ||
doc | ||
grammar | ||
lib | ||
test | ||
test_old | ||
.travis.yml | ||
CHANGELOG.md | ||
composer.json | ||
LICENSE | ||
phpunit.xml.dist | ||
README.md | ||
UPGRADE-1.0.md |
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.