最近正在研究js動態解析的基本結構,希望自己能夠將研究成果前前後後總結出來。
以方便自己複習,也希望能夠和大家分享這樣一套擁有悠久歷史的編譯技術實現。
按照編譯原理的執行特點,一套解釋系統最前面也是最簡單的就是詞法分析。
這裡首先研究的是v8引擎的詞法分析結構,標頭檔案定義在 src/scanner.h中,具體實現在對應的src/scanner.cc中。
在標頭檔案中共宣告有五個類,但是對外提供詞法分析服務的就是scanner類。其他四個類為詞法分析提供基本基礎服務:譬如字元流編碼、結果訪問、輸入流緩衝等。
對外主要提供三個介面:
用於對unicode字元進行型別分析。其內部專門實現了用於支援unicode的相關類包。主要是便於詞法分析器在掃瞄到當前字元時可以進行當前字元狀態的查詢。
其內部含有各種型別分辨資料單元:
例如indentifierstart資料題用於判斷是否為起始字元:
struct identifierstart
}};
當前分析結果的字元流儲存快取結構。
內部用 vectorbacking_store_ 儲存掃瞄的字元流資料。
用於記錄在完成詞法掃瞄後的詞法分析狀態
詞法分析主體類,原先感覺是否會使用lex等自動生成器,沒想到時完全手寫版本。
字元流的基本分析方法時dfa,如果有時間,我考慮把分析器的dfa逆向畫出來。
scanner內部主要維護了current_,next_兩步的token,具體的維護策略需要看語法分析的維護。
詞法分析器
這是我自己的第一篇部落格,就分享一下最近才做完的編譯原理實驗,詞法分析器。本次實驗中我用mysql資料庫儲存自動機狀態表,這樣做的目的只是為了在後續的課設中可以繼續使用現在的 這一段 並不是太完善,發出來只是為了太完善。裡面還有很多問題,比如對字元和字串的識別,不知道為什麼資料庫無法將 和 轉換到我...
詞法分析器
include using namespace std const int maxn 1e3 10 int n 輸入文字的行數 char buffer maxn maxn 緩衝區 int len maxn 輸入文字每行的列數 struct out 輸出格式 out string a,int b re...
詞法分析器
簡單的詞法分析器 標題 南山荒野客 20 05 2019 詞法分析器 編譯原理 c 語言 include include includechar prog 80 token 6 char ch int syn,p,m 0,n,row,sum 0 int biaoji 0 char rwtab 18 ...