//PHP代码执行过程
//1.将PHP代码转换成有标识的Token,可以使用token_get_all函数来进行查看
//2.语法分析将Token和符合规则的代码生成抽象语法树
//3.根据抽象语法树生成opcode,当虚拟机调用opcode的时候会找到背后的处理函数执行真正的处理,
例如echo 对应的opcode是ZEND_ECHO
var_dump(token_get_all("<?php echo 'hello';?>"));
/**
array(7) {
[0]=>
array(3) {
[0]=>int(379)
[1]=>string(6) "<?php "
[2]=>int(1)
}
[1]=>
array(3) {
[0]=>int(328)
[1]=>string(4) "echo"
[2]=>int(1)
}
[2]=>
array(3) {
[0]=>int(382)
[1]=>string(1) " "
[2]=>int(1)
}
[3]=>
array(3) {
[0]=>int(323)
[1]=>string(7) "'hello'"
[2]=>int(1)
}
[4]=>string(1) ";"
[5]=>
array(3) {
[0]=>int(382)
[1]=>string(3) " "
[2]=>int(1)
}
[6]=>
array(3) {
[0]=>int(381)
[1]=>string(2) "?>"
[2]=>int(1)
}
}
*/
//在zend_language_parser.h中全部对标识做了定义
/**
* T_OPEN_TAG = 379
* T_ECHO = 328
* T_CONSTANT_ENCAPSED_STRING = 323
* T_WHITESPACE = 382 表示空格
* T_CLOSE_TAG = 381
*/
//可见,Token就是一个个的词块,单独的词块是不能表达完整的语义的,还需要借助规则进行组织串联。语法分析器就是这个组织者。
//PHP7中的组织串联的产物就是AST(抽象语法树)
//AST只是中间代码的临时存储介质,还需要转换为opcode才能被引擎直接执行。