PHP AST 概述

什么是AST?

AST 即是 (abstract syntax tree,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,这所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节

在PHP7内核中 新增了AST 以变更执行流程

在PHP5 中代码执行流程为:

  1. Lexing:词法扫描分析,将源文件转换成 token 流;
  2. Parsing:语法分析,在此阶段生成 op arrays。

PHP7 中代码执行流程为:

  1. Lexing:词法扫描分析,将源文件转换成 token 流;
  2. Parsing:语法分析,从 token 流生成抽象语法树;
  3. 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树

点赞

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注