> 백엔드 개발 > PHP 튜토리얼 > 我想用c语言写一个php解释器(简单的就行)该从何做起,都要经历哪些步骤呢?

我想用c语言写一个php解释器(简单的就行)该从何做起,都要经历哪些步骤呢?

WBOY
풀어 주다: 2016-06-17 08:31:01
원래의
1216명이 탐색했습니다.

能解释执行php程序,比如:

<span class="cp"><?php </span>
<span class="k">echo</span> <span class="s2">"hello world .."</span><span class="p">;</span>
<span class="cp">?></span><span class="x"></span>
</span>
로그인 후 복사

回复内容:

1:词法分析器、语法分析器,得到语法树。

2:语义分析器,用来检查代码是不是有问题,譬如说1+null就不是一个合法的程序。

3:php有table,php由引用,为了解决循环引用,你就需要开发一个垃圾收集器。

4:设计一个动态类型语言的指令集,设计一个基于堆栈的VM(软件模拟这套指令级的CPU),这是最简单的做法,可以迅速模拟出运行的过程来。


然后你就得到结果了。

你是想在你的程序里使用 PHP 脚本语言还是真的想做个解释器?
如果是前者,去重用现有的解释器。
否则,转到 @vczh 的答案。 词法分析获得token->语法分析获得AST->AST转化为IR中间指令集->之后再vm上面运行IR中间指令。
大部分的解释型脚本语言都类似这样几个步骤吧。 其实如果你仅仅是运行的话, 生成AST,之后递归遍历AST也是可以的。我很早之前的alex1版本就是这么干的, 呵呵。 不过这样做的话,性能很差,而且GC很难做。好一点的方式就是如@vczh 所说的,搞个基于stack的vm来执行IR。 基于stack的vm相对于基于寄存器的vm来说要好实现些。 最简单的用正则去暴力匹配词法单元,然后构造抽象语法树,之后遍历节点翻译成C语言语法 请参见 Zend Engine 源码~
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿