Archived: This project only supported PHP 5, and never matured beyond a basic parser and AST visualizer. Since I lost interest, it has fallen into disrepair, beyond the more conventional bugs.
Parser for PHP written in Go
See this post for an introduction.
Test console:
This project is under heavy development, though some pieces are more or less stable. Listed here are components that in progress or are ideas for future development
| Feature | Status |
|---|---|
| Lexer and Parser | mostly complete. there are probably a few gaps still |
| Scoping | complete for simple cases. probably some gaps still, most notably that conditional definitions are treated as if they are always defined |
| Code search and symbol lookup | basic idea implemented, many many details missing |
| Code formatting | basic idea implemented, formatting needs to narrow down to PSR-2 |
| Transpilation to Go | basic idea implemented, need follow through with more node types |
| Type inferencing | not begun |
| Dead code analysis | basic idea implemented, but only for some types of code. Also, this suffers from the same caveats as scoping |
| Directory | Description |
|---|---|
| php/ast | (abstract syntax tree) describes the nodes in PHP as parsed by the parser |
| php/ast/printer | prints an ast back to source code |
| php/cmd | a tool used to debug the parser |
| php/lexer | reads a stream of tokens from source code |
| php/parser | the core parser |
| php/passes | tools and packages related to modifying or analyzing PHP code (heavily a work in progress) |
| php/passes/togo | transpiler |
| php/passes/deadcode | dead code analyzer |
| php/query | tools and packages related to analyzing and finding things in PHP code (heavily a work in progress) |
| php/testdata | simple examples of PHP that must parse with no errors for tests to pass |
| php/token | describes the tokens read by the lexer |
