本次編寫詞法分析器,形式為**講解。
詞法分析我了解的有兩種,一類是狀態機,根據遇到不同的字元轉換到不同的狀態來決定下乙個字元應該是什麼,另一種就是直接寫詞法分析,簡單的if判斷。前者實現的**很少(可參見本人部落格編譯原理欄目下),,但是需要乙個狀態轉換表,隨著詞法分析的內容變多,這個**也會很大,比較難維護,後者雖然**寫的多一些,但是邏輯上容易理解,也容易修改。
下面是parser目前的結構,**中有詳細注釋,具體請**請看簡介篇的原始碼連線。原始碼中有詳細注釋。
class parser
parser(std::string filename);
//初始化token佇列
void inittokenqueue(int n);
//獲取下乙個token
std::tuplenexttoken();
//獲取下乙個token到佇列
std::tuplepushnexttoken();
//獲取下乙個字元,不從流中清除
inline char peekchar()
inline char nextchar()
//獲取第n位置token值
inline token gettoken(int n = 0)
//獲取第n位置token串
inline std::string getcurrentlexeme(int n = 0)
static void testprint(const std::string& filename)
while (std::get<0>(tk) != tk_eof);
} ~parser() {}
};
詞法分析程式設計
實驗目的 1 理解詞法分析在編譯程式中的作用 2 加深對有窮自動機模型的理解 3 掌握詞法分析程式的實現方法和技術 實驗內容 對下述單詞表定義的語言設計編制乙個詞法分析器。各種單詞符號對應的種別碼如下表 單詞符號 種別編碼 begin1if 2then 3while4do 5end 6l l d 1...
詞法分析程式設計
實驗內容 對乙個簡單語言的子集編制乙個一遍掃瞄的詞法分析程式。實驗要求 1 待分析的簡單語言的詞法 1 關鍵字 begin if then while do end 2 運算子和界符 3 其他單詞是識別符號 id 和整形常數 num 通過以下正規式定義 id letter letter digit ...
詞法分析1
詞法記號的屬性,屬性用來對記號裡面的屬性加以進一步區分。成為n元式 a1成為第一元,a2稱為第二元,類推。比如 position initial rate 60 的記號和屬性 賦值號 單獨作為記號,不需要第二元作為屬性加以區分 單獨作為記號,不需要第二元作為屬性加以區分 單獨作為記號,不需要第二元作...