宿舍人今早提到这个问题,因为回答他,就顺便总结了一下,在此记下,为其他不懂的人作为一个感性的认识。
煤老板 刚才我想了一下你那个问题,可以这么理解吗?
从大处想,假设解释器是用c语言写的,那么它就是一个普通的c语言程序普通的c语言程序是怎么运行的,解释器就是怎么运行的,而php就是输给这个c语言程序数据。
从小处想,我觉得你迷惑的是它怎么运行的?可以把php语言想成命令,假设c语言读到 php中的“(a+b)”这条语句的时候,我自然会去调用c语言里面的a+b。
解释器里有很多 基本的php语句对应到 基本c函数的映射(可以理解为一堆if else 或switch if()括号里面的东西就是将php输入与现有的模式匹配),它通过语法分析,将复杂的语法分解成原子级别的语法结构,原子级别的语法结构就可以找到c语言里面对应的函数了,然后逆向的将这些解释器里定义的基本函数组合起来(我看的书的方法是通过函数调用与返回的形式)。
这样php的语法就被我转变为c语言中非常基本函数的组合了,那么就可以直接运行这个c语言函数了。
当这个c语言解释器被编译成汇编或2进制运行的时候,抽象上他还是我们写的c语言的解释器。就像我们平时写完c程序,也不能老是考虑c编译成汇编会是什么样子一样,c解释器编译成汇编也没必要老是考虑,在c语言这一层该怎么运行,在汇编层就怎么运行。。
大概可以这么理解,再细节了会涉及很多,得看代码,我说不清楚了。。