自製程式語言 12 中間碼 賦值

2021-10-06 06:33:38 字數 1020 閱讀 2170

賦值操作可以認為是移動操作,類似彙編裡mov

這裡賦值就是將乙個變數的值給另乙個變數,由於具體的值獲取要在執行期間才可以獲取,所以賦值生成的**都是用位址來進行訪問賦值。

先修改乙個地方。

//變數記錄表,棧型

class nametable

~nametable() {}

//類別,數值,位址,變數名字

std::vector> s;

void push(std::tuplenum)

std::tupletop()

void pop()

int findaddress(std::string name)

return -1;

} int findvalue(std::string name)

return -1;

} int gettype(std::string name)

return -1;

}};

上下文列表中新增了乙個位址字段,這樣可以解決賦值需要獲取位址的問題。

然後實現識別符號處理。

operand identifierexpression::evaluation(std::vector& stms, memory& memory, nametable& table)

對賦值語句的處理

operand assignexpression::evaluation(std::vector& stms, memory& memory, nametable& table)

return result;

}

輸入如下**

這裡

自製程式語言 1 詞法分析

本次編寫詞法分析器,形式為 講解。詞法分析我了解的有兩種,一類是狀態機,根據遇到不同的字元轉換到不同的狀態來決定下乙個字元應該是什麼,另一種就是直接寫詞法分析,簡單的if判斷。前者實現的 很少 可參見本人部落格編譯原理欄目下 但是需要乙個狀態轉換表,隨著詞法分析的內容變多,這個 也會很大,比較難維護...

python ccf題解 201612 1 中間數

問題描述 試題編號 201612 1 試題名稱 中間數時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 在乙個整數序列a1,a2,an中,如果存在某個數,大於它的整數數量等於小於它的整數數量,則稱其為中間數。在乙個序列中,可能存在多個下標不相同的中間數,這些中間數的值是相同的。給定...

13 2 7 中介軟體

中介軟體顧名思義,是介於request與response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入與輸出。因為改變的是全域性,所以需要謹慎實用,用不好會影響到效能。如果你想修改請求,例如被傳送到view中的httprequest物件。或者你想修改view返回的htt...