PHP核心理解-flex和bison入門


一般詞法分析器和語法分析器會一起使用,語法分析器會調用詞法分析器來讀取輸入,詞法分析器匹配到特定的模式后,就向語法分析器報告(類型和值之類的)。也就是說,詞法分析器的工作,就是讀取、報告、再讀、再報告,而語法分析器的工作,就是調用詞法分析器讀取,以及根據(jù)詞法分析器的反饋,看輸入是否和語法規(guī)則匹配。

一、Lex

Lex 是一種生成掃描器的工具。掃描器是一種識別文本中的詞匯模式的程序。 這些詞匯模式(或者常規(guī)表達式)在一種特殊的句子結構中定義。

一種匹配的常規(guī)表達式可能會包含相關的動作。這一動作可能還包括返回一個標記。

1、當 Lex收到文件或文本形式的輸入時,它試圖將文本與常規(guī)表達式進行匹配。 它一次讀入一個輸入字符,直到找到一個匹配的模式。 如果能夠找到一個匹配的模式,Lex 就執(zhí)行相關的動作(可能包括返回一個標記)。
2、另一方面,如果沒有可以匹配的常規(guī)表達式,將會停止進一步的處理,Lex 將顯示一個錯誤消息。

Lex 和 C 是強耦合的。一個 .lex 文件(Lex 文件具有 .lex 的擴展名)通過 lex 公用程序來傳遞,并生成 C 的輸出文件。這些文件被編譯為詞法分析器的可執(zhí)行版本。

二、Yacc

Yacc 代表 Yet Another Compiler Compiler。 Yacc 的 GNU 版叫做 Bison。它是一種工具,將任何一種編程語言的所有語法翻譯成針對此種語言的 Yacc 語 法解析器。它用巴科斯范式(BNF, Backus Naur Form)來書寫。按照慣例,Yacc 文件有 .y 后綴。

三、flex:詞法分析器

flex是一個詞法分析器,一個Lex的GNU實現(xiàn)。用來將一個.l文件生成一個.c程序文件。即生成一個詞法分析器。然后讀取輸入,和正則表達式匹配,再執(zhí)行相應的動作,實現(xiàn)了程序的功能。

我們可以發(fā)現(xiàn)flex實現(xiàn)在程序外部就可以接受輸入的功能。

四、bison:語法分析器

一個Yacc的GNU實現(xiàn),根據(jù)文法把一系列的記號轉換成一個語法分析樹。

五、re2c:詞法解析器

re2c是一個掃描器制作工具,可以創(chuàng)建非常快速靈活的掃描器。它可以產(chǎn)生高效代碼,基于C語言,可以支持C/C++代碼。 與其它類似的掃描器不同,它偏重于為正則表達式產(chǎn)生高效代碼(和他的名字一樣)。因此,這比傳統(tǒng)的詞法分析器有更廣泛的應用范圍。

PHP在最開始的詞法解析器是使用的是flex,后來PHP的改為使用re2c。 在源碼目錄下的Zend/zend_language_scanner.l 文件是re2c的規(guī)則文件, 如果需要修改該規(guī)則文件需要安裝re2c才能重新編譯。

六、php使用的詞法解析器和語法解析器

詞法解析器:re2c
語法解析器:bison

參考

1、Yacc 與 Lex 快速入門
2、The Lex & Yacc Page
3、PHP的詞法解析器:re2c
4、Bison的使用
5、PHP語法分析器:RE2C && BISON 總結
6、編譯技術,從BNF范式到文法識別簡介
7、flex&bison 學習筆記

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 簡介 如果你有Unix環(huán)境的編程經(jīng)驗,想必你肯定遇到過神秘的Lex和YACC工具,在GUN/Linux中,又分別稱...
    upupSue閱讀 4,761評論 0 8
  • 簡介網(wǎng)絡瀏覽器很可能是使用最廣的軟件。在這篇入門文章中,我將會介紹它們的幕后工作原理。我們會了解到,從您在地址欄輸...
    wengjq閱讀 2,319評論 2 15
  • 目錄一、介紹二、渲染引擎三、解析與DOM樹構建四、渲染樹構建五、布局六、繪制七、動態(tài)變化八、渲染引擎的線程九、CS...
    饑人谷_米彌輪閱讀 2,513評論 0 10
  • 轉載說明 一、介紹 瀏覽器可以被認為是使用最廣泛的軟件,本文將介紹瀏覽器的工作原理,我們將看到,從你在地址欄輸入g...
    17碎那年閱讀 2,525評論 0 22
  • 1.我感恩今天早晨鬧鐘響沒有馬上起床,繼續(xù)賴床半小時,睡眠充足 2我感恩照鏡子時發(fā)現(xiàn)自己面色很好,眼袋沒有了,整個...
    秋果日記閱讀 218評論 0 0

友情鏈接更多精彩內容