成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

PHP-7.1 源代碼學(xué)習(xí):詞法分析

liuchengxu / 572人閱讀

摘要:前言語(yǔ)法分析器調(diào)用獲取詞法單元,對(duì)于復(fù)雜的語(yǔ)言實(shí)現(xiàn)一般都會(huì)自定義,搜索的宏定義搜索函數(shù)的定義打開(kāi)文件查看函數(shù)定義這里出現(xiàn)了兩個(gè)新的數(shù)據(jù)類型,,從命名推測(cè)是語(yǔ)法分析棧元素語(yǔ)法分析樹(shù)節(jié)點(diǎn),搜索代碼里面哪些地方引用了

前言 yylex

bison 語(yǔ)法分析器調(diào)用 yylex 獲取詞法單元,對(duì)于復(fù)雜的語(yǔ)言實(shí)現(xiàn)一般都會(huì)自定義 yylex,搜索 yylex 的宏定義

# grep -rin --color --include=*.h "#define yylex"
Zend/zend_language_parser.c:64:#define yylex zendlex

搜索 zendlex 函數(shù)的定義

# grep -rin --color --include=*.c zendlex
Zend/zend_language_parser.c:1689:int zendlex(zend_parser_stack_elem *elem)

打開(kāi) zend_language_parser.c 文件查看 zendlex 函數(shù)定義

int zendlex(zend_parser_stack_elem *elem) {
    zval zv;
    int retail;

    ...

again:
    ZVAL_UNDEF(&zv);
    retval = lex_scan(&zv);
    if (EG(Exception)) {
        return T_ERROR;
    }

    switch (retval) {
        ...
    }

    return retval;
}

這里出現(xiàn)了兩個(gè)新的數(shù)據(jù)類型 zval,zend_parser_stack_elem,從命名推測(cè) zend_parser_stack_elem 是語(yǔ)法分析棧元素(語(yǔ)法分析樹(shù)節(jié)點(diǎn)),搜索代碼里面哪些地方引用了 zend_parser_stack_elem

grep --color -rinw --include=*.c --include=*.h zend_parser_stack_elem
Zend/zend_compile.h:130:} zend_parser_stack_elem;
Zend/zend_language_parser.c:108:#define YYSTYPE zend_parser_stack_elem

打開(kāi) zend.compile.h 文件 130 行,zend_parser_stack_elem 是一個(gè)聯(lián)合體的 typedef

typedef union _zend_parser_stack_elem {
    zend_ast *ast;
    zend_string *str;
    zend_ulong num;
} zend_parser_stack_elem;

zend_language_parser.c 文件的 108 行表明 zend_parser_stack_elem 是 詞法分析模塊 傳遞給 語(yǔ)法分析模塊的 token value

總結(jié)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/30534.html

相關(guān)文章

  • PHP-7.1 代碼學(xué)習(xí):語(yǔ)法分析 之 概述

    摘要:前言使用和進(jìn)行語(yǔ)法分析和詞法分析,本文以語(yǔ)法定義文件為起點(diǎn),使用等命令行工具搜索相關(guān)源碼,以此來(lái)展示探索語(yǔ)法分析源碼思路語(yǔ)法定義文件在源代碼根目錄下通過(guò)命令查找文件我們找到了文件,里面定義了腳本的語(yǔ)法語(yǔ)法分析樹(shù)節(jié)點(diǎn)類型在查看具體的語(yǔ)法規(guī)則 前言 php 使用 lex 和 bison 進(jìn)行語(yǔ)法分析和詞法分析,本文以 bison 語(yǔ)法定義文件為起點(diǎn),使用 find, grep 等命令行工具...

    luqiuwen 評(píng)論0 收藏0
  • PHP-7.1 代碼學(xué)習(xí)php-cli 啟動(dòng)流程

    摘要:前言函數(shù)默認(rèn)構(gòu)建目標(biāo)為,相關(guān)代碼在目錄下,文件中能夠找到入口函數(shù),大概流程如下命令行參數(shù)處理初始化清理工作語(yǔ)言系統(tǒng)編程常用手法,通過(guò)中聲明函數(shù)指針類型的字段來(lái)實(shí)現(xiàn)類似面向?qū)ο笾谐橄箢惖母拍?,在文件中可以找到該結(jié)構(gòu)體的定義,這里只列出部分 前言 php cli main 函數(shù) configure & make 默認(rèn)構(gòu)建目標(biāo)為 php-cli,相關(guān)代碼在 sapi/cli 目錄下,php_...

    VishKozus 評(píng)論0 收藏0
  • PHP-7.1 代碼學(xué)習(xí):字節(jié)碼生成 之 "$a = 1"

    摘要:前言本文通過(guò)分析這個(gè)語(yǔ)句的編譯和執(zhí)行來(lái)窺探解釋執(zhí)行邏輯準(zhǔn)備參考之前的系列文章,在環(huán)境下下載,編譯源代碼將代碼導(dǎo)入中編輯運(yùn)行選項(xiàng),增加運(yùn)行參數(shù)設(shè)置斷點(diǎn)開(kāi)始調(diào)試是一個(gè)測(cè)試腳本,放在目錄下,中只包含一條簡(jiǎn)單的賦值語(yǔ)句調(diào)用堆棧參考之前的系列文章 前言 本文通過(guò)分析 $a=1 這個(gè) PHP 語(yǔ)句的編譯和執(zhí)行來(lái)窺探 php-cli 解釋執(zhí)行邏輯 準(zhǔn)備 參考之前的系列文章,在 ubuntu 環(huán)境下...

    ConardLi 評(píng)論0 收藏0
  • PHP-7.1 代碼學(xué)習(xí):字節(jié)碼生成 之 概述

    摘要:前言字節(jié)碼生成編譯的代碼主要集中在,文件中包含大量的函數(shù),基本上一個(gè)函數(shù)對(duì)應(yīng)語(yǔ)法規(guī)則文件一個(gè)非終結(jié)符,函數(shù)是所有函數(shù)的入口數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)體是字節(jié)碼抽象結(jié)構(gòu)體并沒(méi)有像名字那樣簡(jiǎn)單,它包含了大量的字段供虛擬機(jī)在運(yùn)行時(shí)使用一如既往的簡(jiǎn)單,直觀,相比 前言 字節(jié)碼生成(編譯)的代碼主要集中在 zend_compile.c ,文件中包含大量的 zend_compile_xxx 函數(shù),基本上一個(gè)函數(shù)...

    1fe1se 評(píng)論0 收藏0
  • 使用PHP擴(kuò)展Xhprof分析項(xiàng)目性能實(shí)踐

    摘要:一背景項(xiàng)目即將上線,想通過(guò)一些工具來(lái)分析代碼的穩(wěn)定性和效率,想起在上個(gè)團(tuán)隊(duì)時(shí)使用過(guò)的擴(kuò)展因?yàn)閾Q了新電腦,所以需要重新編譯此擴(kuò)展,現(xiàn)將安裝與實(shí)際排查過(guò)程完整記錄下來(lái),方便自己回顧和幫助更多的讀者。作者湯青松微信日期 一、背景 項(xiàng)目即將上線,想通過(guò)一些工具來(lái)分析代碼的穩(wěn)定性和效率,想起在上個(gè)團(tuán)隊(duì)時(shí)使用過(guò)的xhprof擴(kuò)展;因?yàn)閾Q了新電腦,所以需要重新編譯此擴(kuò)展,現(xiàn)將安裝與實(shí)際排查過(guò)程完整記...

    高勝山 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<