程式語言中的 關鍵字 是怎麼實現的?自己該怎樣實現乙個關鍵字呢?

時間 2022-01-12 06:13:44

1樓:navegador

關鍵字本身是沒有功能的,

要關聯功能,有不同的方式:

對應到語法樹結構上 ||

對應到一條或多條IR上 ||

或者也可以直接對應到一條或一組彙編指令上 (直接對應的到彙編一步到位的方式開發比較困難,除非你的語言相當簡單)

關鍵字除了助記,乙個隱含的意義就是,在當前的語言環境下,其功能不可分割,它的分割在實現層。

if 有可能對應少數幾條指令 jne ,je....

for 一般需要一組指令去實現

class 通常在編譯階段就被變成其他中間格式,class 的實現需要儲存/恢復執行棧。

2樓:scientificworld

關鍵字是設計語法時就設計好的。最終經編譯器處理再被轉化為機器碼。

說是基於彙編並不準確。比如你舉的 class 這個例子,類中的每一項最終會被單獨提取出來,在彙編中你是看不到如 struct / class / enum / union 這類東西的。

你要實現關鍵字,實際上就是要實現一門新語言,乙個編譯 / 直譯器。

程式語言中內建型別是怎麼實現的?

Yunfei Lu 都有。一種語言,首先有基本型別,其實就是資料在記憶體的布局,方便表示不同種類的資料,例如整型和浮點是一定要有的,因為cpu的規範。再組合得到陣列,函式型別等,再發展出代數型別,然後包裝成介面 類 泛型等高階概念。基本型別在編譯器裡規定。至於標準庫中定義的型別,通常是某種組合的封裝...

程式語言用let等關鍵字宣告變數有什麼好處?

方應杭 如果沒有 let var,你如何得知 a 2 是在宣告 a 還是在對已有的 a 進行賦值呢?你不得不通過其他的特性來消除歧義。 望山 主要是用來明示這個地方你打算引入新變數,而不是使用前面 包括上層函式或全域性 已經出現過的變數,主要是給人看的,順便也能減少電腦進行語法分析的工作量。強型別語...

程式語言中的取余是如何實現的

各種語言裡面的演算法不完全一樣。有的語言支援任意精度整數,難道它也用跟C同樣的演算法計算餘數?另外各種語言裡面關於負數的處理也不一樣。對於除數固定 編譯時已知 的取餘操作,編譯器完全可以把它優化掉,具體優化成什麼,你隨便拿個C編譯器試試就知道了。特別對於Hash表這種,使用2的整數冪大小還是比較常見...