編譯過程介紹

編譯過程介紹

1 問題簡述

程序需要讀入用戶的腳本,然后判斷是否符合預(yù)定義的語法規(guī)則。若存在則將第一條出錯反饋給用戶,否則,程序?qū)τ脩舻哪_本代碼進行轉(zhuǎn)化,生成可進一步處理的中間代碼。

2 具體過程

2.1 第一步

載入預(yù)定義顏色映射表,關(guān)鍵字表。
初始化字典樹。

2.2 第二步

檢查各類可能錯誤。

2.2.1 具體步驟一

檢查用戶輸入腳本代碼的括號匹配,若存在問題,則進行反饋并中止編譯。

2.2.2 具體步驟二

分解用戶輸入的腳本代碼,將其分解為關(guān)鍵詞形式。若存在未知關(guān)鍵詞或者關(guān)鍵詞沖突,則進行反饋并中止編譯。

2.2.3 具體步驟三

檢查變量聲明問題,若存在變量未定義或重復(fù)定義,則進行反饋并中止編譯。

2.2.4 具體步驟四

檢查函數(shù)調(diào)用問題,若存在不合法調(diào)用、函數(shù)參數(shù)缺省或贅余,則進行反饋并中止編譯。

2.3 第三步

通過上述編譯過程后,程序完全分解用戶代碼。根據(jù)預(yù)定義的語法規(guī)則,輸出對應(yīng)符號相關(guān)信息(如變量內(nèi)容,函數(shù)參數(shù)等)。

2.4 第四步

對函數(shù)的參數(shù)中的表達式一項進行化簡處理,按照運算符優(yōu)先級進行模擬展開,并建立表達式樹,依次劃分運算順序,分離運算過程。

3 總結(jié)

3.1 時空復(fù)雜度分析

所有涉及操作的空間復(fù)雜度均低于OceanView中其他過程的空間復(fù)雜度,因此這里并不會產(chǎn)生空間使用超限的問題。

所有涉及操作的時間復(fù)雜度與讀入腳本的長度幾乎為線性相關(guān),相比較于OceanView中其他過程的時間復(fù)雜度,編譯用戶腳本的占用時間可以忽略不計。

3.2 優(yōu)勢

程序較為完美的根據(jù)預(yù)定義的語法規(guī)則,完成了代碼的轉(zhuǎn)化。(目前尚未測試出bug)
最終生成的代碼,依據(jù)表達式樹的形式給出,便于OceanView做進一步處理。
程序代碼經(jīng)過多次重構(gòu),封裝良好,最終只提供給用戶唯一調(diào)用接口,方便遷移和復(fù)用。

3.3 劣勢

由于預(yù)定義的語法規(guī)則比起一門正規(guī)語言要簡便,最終生成的目標(biāo)代碼也可以理解為高級語言的形式。因此程序省略了傳統(tǒng)編譯器中的部分過程,并不能算作一個完整的編譯器。

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容