什么是AST?
AST 即是 (abstract syntax tree,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,这所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节
在PHP7内核中 新增了AST 以变更执行流程
在PHP5 中代码执行流程为:
- Lexing:词法扫描分析,将源文件转换成 token 流;
- Parsing:语法分析,在此阶段生成 op arrays。
PHP7 中代码执行流程为:
- Lexing:词法扫描分析,将源文件转换成 token 流;
- Parsing:语法分析,从 token 流生成抽象语法树;
- Compilation:从抽象语法树生成 op arrays。
如上所述 PHP7 中在语法分析阶段不再直接生成 op arrays,而是先生成 AST
RFC: https://wiki.php.net/rfc/abstract_syntax_tree
如何自己编辑AST树来构建新的代码
PHP-Parser: https://github.com/nikic/PHP-Parser
推荐PHP-Parser 来进行解析 PHP代码
或者 可以通过 PHP 内置方法 get_token_all 方法 获取token 并生成相对的 AST树