php關鍵字異構化實驗
php詞法分析和語法分析
簡單理解php**執行過程:
php編譯執行基本過程如下圖:
目前php詞法分析器採用re2c規則,在php原始碼中的位置是zend/zend_language_scanner.c,它是由詞法規則檔案zend_language_scanner.l經過re2c編譯生成的,命令如下:
re2c –o zend_language_scanner.c zend_language_scanner.l
php語法分析器用bison來生成,在php原始碼中的位置是zend/zend_language_parser.c,它是由語法規則檔案zend_language_parser.y經過bison編譯生成,命令如下:
bison –o zend_language_parser.c zend_language_parser.y
zend虛擬機器負責執行生成的opcode。
怎麼構建自己的php語法規則
下面以將echo異構化為echo1為例進行介紹。首先修改zend_language_scanner.l檔案,如下圖所示,在返回標誌符t_echo的地方將echo改為echo1。
再修改語**析檔案zend_language_parser.y,如下圖所示,在token是t_echo的地方將表示修改為「echo1 (t_echo)」。
最後刪除zend目錄下的zend_language_scanner.c和zend_language_parser.c兩個檔案,重新編譯安裝php即可。
參考資料
原文:
php語法直譯器 做自己的PHP語法直譯器
php關鍵字異構化實驗 php詞法分析和語法分析 簡單理解php 執行過程 php編譯執行基本過程如下圖 目前php詞法分析器採用re2c規則,在php原始碼中的位置是zend zend language scanner.c,它是由詞法規則檔案zend language scanner.l經過re2...
做自己的PHP語法直譯器
php關鍵字異構化實驗 簡單理解php 執行過程 php編譯執行基本過程如下圖 目前php詞法分析器採用re2c規則,在php原始碼中的位置是zend zend language scanner.c,它是由詞法規則檔案zend language scanner.l經過re2c編譯生成的,命令如下 r...
php語法直譯器 php直譯器的安裝方法
php在windows下安裝配置第一步 還有2個檔案 乙個 php.ini development 乙個是 php.ini production 從名字也可以看出是開發環境跟生產環境的區別了 找到 extension dir ext 刪除最前面的分號 找到 extension php mbstrin...