Skip to content

Commit

Permalink
Merge pull request reeze#8 from reeze/master
Browse files Browse the repository at this point in the history
merge update
  • Loading branch information
zither committed Jan 22, 2015
2 parents 8acf8ac + 8b7c326 commit 4bc47ba
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 8 deletions.
2 changes: 1 addition & 1 deletion book/chapt07/07-00-zend-vm.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ PHP跟他们一样,也有属于自己的Zend虚拟机。它们在本质是相
最近这些年,语言的发展只是不断的抽象,不断的远离机器,没有根本性的变化。

本章,我们从虚拟机的前世今生讲起,叙述Zend虚拟机的实现原理,关键的数据结构,
并其中穿插一个关于语法实现的示例和源码加密解密的过程说明
并在其中穿插一个关于语法实现的示例和源码加密解密的过程说明
6 changes: 3 additions & 3 deletions book/chapt07/07-01-zend-vm-overview.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

虚拟机是一种抽象的计算机,是对真实计算机的虚拟和模拟,现在的计算机有不同的
指令集架构([ISA: Instruction Set Architecture](http://homedir.jct.ac.il/~citron/ca/isa.html)),
ISA是处理的一个部分,不同的处理器会有不同的架构,最常见的有3种:
ISA是处理器的一个部分,不同的处理器会有不同的架构,最常见的有3种:

- 基于栈的[Stack Machines](http://en.wikipedia.org/wiki/Stack_machine): 操作数保存在栈上。
而不是使用寄存器来保存,现在很少有真实机器采用这个模型。对于虚拟机来说因为指令空间占用少,
Expand Down Expand Up @@ -136,7 +136,7 @@ Zend引擎的核心文件都在$PHP\_SRC/Zend/目录下面。不过最为核心
常量,程序创建的对象,传递给函数或方法的参数,返回值,局部变量以及一些运算的中间结果等。
我们把这些所有的存放数据的地方称为中间数据层。

如果PHP以mod扩展的方式依附于Apache2服务器运行,中间数据层的部分数据可能会被多个线程共享,如果PHP自带的函数列表等
如果PHP以mod扩展的方式依附于Apache2服务器运行,中间数据层的部分数据可能会被多个线程共享,比如PHP自带的函数列表等
如果只考虑单个进程的方式,当一个进程被创建时它就会被加载PHP自带的各种函数列表,类列表,常量列表等。
当解释层将PHP代码编译完成后,各种用户自定义的函数,类或常量会添加到之前的列表中,
只是这些函数在其自身的结构中某些字段的赋值是不一样的。
Expand All @@ -152,6 +152,6 @@ Zend虚拟机的执行引擎是一个非常简单的实现,它只是依据中

回到开头的问题,PHP通过词法分析、语法分析和中间代码生成三个步骤后,PHP文件就会被解析成PHP的中间代码opcode。
生成的中间代码与实际的PHP代码之间并没有完全的一一对应关系。只是针对用户所给的PHP代码和PHP的语法规则和一些内部约定生成中间代码,
并且这些中间代码还需要依靠一些全局变量中转数据和关联。至于生成的中间代码的执行过程是依据中间代码的顺利
并且这些中间代码还需要依靠一些全局变量中转数据和关联。至于生成的中间代码的执行过程是依据中间代码的顺序
依赖于执行过程中的全局变量,一步步执行。当然,在遇到一些函数跳转也会发生偏移,但是最终还是会回到偏移点。

8 changes: 4 additions & 4 deletions book/chapt07/07-02-00-php-syntax.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,17 @@

在这一章,我们讨论PHP虚拟机是如何将PHP语言转化成C语言。
从一种语言到另一种语言的转化称之为编译,这两种语言分别可以称之为源语言和目标语言。
这种编译过程通过发生在目标语言比源语言更低级(或者说更底层)。
这种编译过程通常发生在目标语言比源语言更低级(或者说更底层)。
语言转化的编译过程是由编译器来完成,
编码器通常被分为一系列的过程:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等。
编译器通常被分为一系列的过程:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等。
前面几个阶段(词法分析、语法分析和语义分析)的作用是分析源程序,我们可以称之为编译器的前端。
后面的几个阶段(中间代码生成、代码优化和目标代码生成)的作用是构造目标程序,我们可以称之为编译器的后端。
一种语言被称为编译类语言,一般是由于在程序执行之前有一个翻译的过程,
其中关键点是有一个形式上完全不同的等价程序生成。
而PHP之所以被称为解释类语言,就是因为并没有这样的一个程序生成,
它生成的是中间代码,这只是PHP的一种内部数据结构。

在本章我们会介绍PHP编译器的前端的两个阶段,语法分析、语法分析;后端的一个阶段,中间代码生成。
在本章我们会介绍PHP编译器的前端的两个阶段,词法分析、语法分析;后端的一个阶段,中间代码生成。
在第一节我们介绍PHP的词法分析过程及其用到的工具[re2c](http://www.re2c.org/)
第二节我们介绍在词法分析后的语法分析过程,
第三节我们以PHP的一个简单语法实现作为本章的结束。
第三节我们以PHP的一个简单语法实现作为本章的结束。

0 comments on commit 4bc47ba

Please sign in to comment.