php7 抽像语法树

抽象语法树(abstract syntax tree,AST)

在PHP之前的版本中,PHP代码在语法解析阶段直接生成了ZendVM指令(opline指令),这使得编译器与执行器耦合在一起。编译生成的指令代执行引擎使用,该指令是在语法解析时直接生成的,假如要把执行引擎换成别的,就需要修改语法解析规则;或者如果PHP的语法规则变了,但对应的执行指令没有变化,那么也需要修改语法解析规则。

PHP7中增加了抽像语法树,首先是将PHP代码解析生在抽象语法树,然后将抽象语法树编译为ZendVM指令。抽象语法树的加入使得PHP的编译器与执行器很好地隔离开,编译器不需要关心指令的生成规则,然后执行器根据自己的规则将抽象语法树编译为对应的指令,执行器同样不需要关主该指令的语法规则是什么样子的。

在 PHP5中,从 php 脚本到 opcodes 的执行的过程是:

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

PHP7 中在语法分析阶段不再直接生成 op arrays,而是先生成 AST,所以过程多了一步:

  1. Lexing:词法扫描分析,将源文件转换成 token 流;
  2. Parsing:语法分析,从 token 流生成抽象语法树;
  3. Compilation:从抽象语法树生成 op array

PHP是一个脚本解析器,提供脚本的解析与执行,它的输入是普通的文凭,然后由PHP解析器按照预

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值