国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP-7.1 源代碼學習:詞法分析

liuchengxu / 528人閱讀

摘要:前言語法分析器調用獲取詞法單元,對于復雜的語言實現一般都會自定義,搜索的宏定義搜索函數的定義打開文件查看函數定義這里出現了兩個新的數據類型,,從命名推測是語法分析棧元素語法分析樹節點,搜索代碼里面哪些地方引用了

前言 yylex

bison 語法分析器調用 yylex 獲取詞法單元,對于復雜的語言實現一般都會自定義 yylex,搜索 yylex 的宏定義

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

搜索 zendlex 函數的定義

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

打開 zend_language_parser.c 文件查看 zendlex 函數定義

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;
}

這里出現了兩個新的數據類型 zval,zend_parser_stack_elem,從命名推測 zend_parser_stack_elem 是語法分析棧元素(語法分析樹節點),搜索代碼里面哪些地方引用了 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

打開 zend.compile.h 文件 130 行,zend_parser_stack_elem 是一個聯合體的 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 是 詞法分析模塊 傳遞給 語法分析模塊的 token value

總結

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30534.html

相關文章

  • PHP-7.1 代碼學習:語法分析 之 概述

    摘要:前言使用和進行語法分析和詞法分析,本文以語法定義文件為起點,使用等命令行工具搜索相關源碼,以此來展示探索語法分析源碼思路語法定義文件在源代碼根目錄下通過命令查找文件我們找到了文件,里面定義了腳本的語法語法分析樹節點類型在查看具體的語法規則 前言 php 使用 lex 和 bison 進行語法分析和詞法分析,本文以 bison 語法定義文件為起點,使用 find, grep 等命令行工具...

    luqiuwen 評論0 收藏0
  • PHP-7.1 代碼學習php-cli 啟動流程

    摘要:前言函數默認構建目標為,相關代碼在目錄下,文件中能夠找到入口函數,大概流程如下命令行參數處理初始化清理工作語言系統編程常用手法,通過中聲明函數指針類型的字段來實現類似面向對象中抽象類的概念,在文件中可以找到該結構體的定義,這里只列出部分 前言 php cli main 函數 configure & make 默認構建目標為 php-cli,相關代碼在 sapi/cli 目錄下,php_...

    VishKozus 評論0 收藏0
  • PHP-7.1 代碼學習:字節碼生成 之 "$a = 1"

    摘要:前言本文通過分析這個語句的編譯和執行來窺探解釋執行邏輯準備參考之前的系列文章,在環境下下載,編譯源代碼將代碼導入中編輯運行選項,增加運行參數設置斷點開始調試是一個測試腳本,放在目錄下,中只包含一條簡單的賦值語句調用堆棧參考之前的系列文章 前言 本文通過分析 $a=1 這個 PHP 語句的編譯和執行來窺探 php-cli 解釋執行邏輯 準備 參考之前的系列文章,在 ubuntu 環境下...

    ConardLi 評論0 收藏0
  • PHP-7.1 代碼學習:字節碼生成 之 概述

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

    1fe1se 評論0 收藏0
  • 使用PHP擴展Xhprof分析項目性能實踐

    摘要:一背景項目即將上線,想通過一些工具來分析代碼的穩定性和效率,想起在上個團隊時使用過的擴展因為換了新電腦,所以需要重新編譯此擴展,現將安裝與實際排查過程完整記錄下來,方便自己回顧和幫助更多的讀者。作者湯青松微信日期 一、背景 項目即將上線,想通過一些工具來分析代碼的穩定性和效率,想起在上個團隊時使用過的xhprof擴展;因為換了新電腦,所以需要重新編譯此擴展,現將安裝與實際排查過程完整記...

    高勝山 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<