PHP代码的编译

 

一.解释行语言也需要编译

 二.PHP的主要模块

  • 首先是Application,就是我们的上层应用——平时写的PHP程序,可以是web应用或者php脚本;
  • 接着是SAPI(Server Application Programming Interface),服务端应用编程接口,sapi通过一系列钩子函数,使得php可以和外围交互数据,并且通过sapi成功的将php本身和上层应用解耦隔离,php可以不再考虑如何针对不同的应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式;
  • 再下来是Extensions——扩展层,围绕着Zend引擎,扩展层通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过扩展来实现,我们自己也能自定义一些扩展来达到扩展功能、优化性能等目的;
  • 最下面就是Zend了,整体用纯c实现,是php的内核部分,在这一层,它将php代码翻译成opcode并提供相应的处理方法、实现了基本的数据结构、内存分配及管理、提供了相应的api方法工外部调用,时一切的核心,所有的外围功能均围绕zend实现。

三.词法解析

3.1 词法分析

词法分析作用:

  • 最重要的考虑是简化编译器设计。
  • 提高编译器效率(因为能专精)。
  • 增强编译器的可移植性。

3.2 NFA-不确定有穷自动机

       正则表达式的规则很容易理解,但是正则表达式并不能直接用来解析字符串。有穷自动机首先包含一个有限状态的集合,还包含了从一个状态到另外一个状态的转换。有穷自动机看上去就像是一个有向图,其中状态是图的节点,而状态转换则是图的边。此外这些状态中还必须有一个初始状态和至少一个接受状态

  • 结点代表状态,用圆圈表示。
  • 状态之间用箭头连结,代表一个状态向另一个状态的转换。

 

3.3 DFA-确定有穷自动机

四.抽象语法树-AST

 

 语法解析的过程:

$a = 1;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值