初識PHP
就php而言,它是一組符合一定規則的約定的指令。然後通過PHP的虛擬機器(ZendE)將PHP指令轉換成C語言指令,C語言又轉變成組合語言,最後組合語言將根據處理器的規則轉變成機器碼執行。
為什麼PHP被稱為解釋類語言?
首先來認識一下編譯類語言,源語言到目標語言的轉化過程由編譯器完成,編譯器常被分為,分析源程式過程:詞法分析、語法分析、語義分析;和構造目標程式過程:中間程式碼生成、程式碼優化、目的碼生成。編譯類語言在執行之前有一個形式上完全不同的等價程式生成。而PHP沒有這分程式生成,它生成的是中間程式碼Opcode,這只是PHP內部的資料結構。
1、詞法分析 Scanning(Lexing),將PHP程式碼轉換成語言片段(Tokens)
PHP是基於 re2c 語法分析依據表作為語法分析的。在PHP源嘛資料夾中可以看到 zend/zend_language_sanner.l這個規則檔案。
2、語法分析 Parsing,將 Tokens 裝換成簡單有意義的表示式
Bison是一種通用目的的分析器生成器。它將LALR(1)上下文無關文法的描述轉化成分析該文法的C程式。 使用它可以生成直譯器,編譯器,協議實現等多種程式
Bison分析器檔案是定義了名為yyparse並且實現了某個語法的函式的C程式碼。PHP中 yyparse被zendparse代替。
3、編譯 Compilation,將表示式編譯成 Opcodes
4、執行 Execution ,znedE 順序執行 Opcodes,每次一條,從而實現PHP指令碼的功能,和機器指令執行相似。
本作品採用《CC 協議》,轉載必須註明作者和本文連結