4 ms·
What is the purpose of this? Just static analysis? If that is it, you'd probably be better off just using the PHP parser (https://github.com/nikic/PHP-Parser h
by pknopf 9y ago
What is the purpose of this? Just static analysis?
If that is it, you'd probably be better off just using the PHP parser (https://github.com/nikic/PHP-Parser https://github.com/nikic/PHP-Parser).
If you are writing analyzers for PHP, you must know it enough to right an analyzer in actual PHP. Why Go?
I can't see a lot of people using this.
- chamton 9y agoThis project states that it was "inspired by" Nikita's parser, but to me that raises even more questions about its existence. nikic/PHP-Parser is feature-complete/mature/stable and developed by one of the most knowledgeable members of the PHP internals core development team. It is the library powering many PHP dev tools; static analysis included. I can see that creating a tool like this is an excellent learning experience, but I don't see why anyone else should care.
- sshine 9y ago> What is the purpose of this? Just static analysis? I'm not sure about the "Just" here. The opportunities for writing code transformation tools are abundant. E.g. a PHP IDE that isn't written in PHP, a linting tool, a preprocessor for an embedded DSL. It isn't obvious to me that the tooling for a language like PHP need to be written in PHP. > Why Go? Go isn't a bad choice for writing parts of a compiler. The parser itself was, however, written with the parser generator goyacc rather than native Go code: https://github.com/z7zmey/php-parser/blob/master/php7/php7.y https://github.com/z7zmey/php-parser/blob/master/php7/php7.y Taking a goyacc file like this and porting it to another YACC is a lower effort than starting from scratch. In such a way, this project delivers not just "a PHP parser with xx% coverage in Go", but a shortcut to writing PHP parsers in any language with a decent YACC. One way this project is structured that I don't particularly like is that each node in the AST corresponds to a file. For a programming language with algebraic types (ML, Haskell), having the AST definition in a single file is quite typical. https://github.com/z7zmey/php-parser/tree/master/node/expr https://github.com/z7zmey/php-parser/tree/master/node/expr
- johannes1234321 9y ago> Taking a goyacc file like this and porting it to another YACC is a lower effort than starting from scratch. In such a way, this project delivers not just "a PHP parser with xx% coverage in Go", but a shortcut to writing PHP parsers in any language with a decent YACC. There's already a yacc file for PHP's parser, part of the PHP runtime: https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y https://github.com/php/php-src/blob/master/Zend/zend_languag...