Tiny+ 語(yǔ)言詞法之C語(yǔ)言
訪問(wèn)【W(wǎng)RITE-BUG數(shù)字空間】_[內(nèi)附完整源碼和文檔]
語(yǔ)義分析本質(zhì)上就是在語(yǔ)法分析的基礎(chǔ)上進(jìn)一步完善分析的功能。舉個(gè)例子來(lái)說(shuō),在語(yǔ)法分析部分的 if_stmt 函數(shù)中,在語(yǔ)義上判斷條件必須返回布爾類型的值,因此我們加入一個(gè)判斷,判斷是否結(jié)果為布爾類型,如果不是的話就拋出異常。
一、關(guān)鍵詞(KEY)
Tiny+ 中可能出現(xiàn)的關(guān)鍵詞包括以下這些
// 定義語(yǔ)法中所有可能出現(xiàn)的關(guān)鍵詞
bool Token::is_KEY(string& str) {
return str == "true" || str == "false" || str == "or" ||
str == "and" || str == "not" || str == "int" ||
str == "bool" || str == "string" || str == "while" ||
str == "do" || str == "if" || str == "then" ||
str == "else" || str == "end" || str == "repeat"
|| str == "until" || str == "read" || str == "write";
}
二、特殊符號(hào)(SYM)
常見(jiàn)特殊符號(hào)包括以下這些,其中注釋用大括號(hào)包括。
// 判斷是否為特殊符號(hào)
bool LexicalAnalysis::is_special_symbol(char c) {
return c == ':' || c == ',' || c == ';' ||
c == '<' || c == '>' || c == '=' ||
c == '+' || c == '-' || c == '*' ||
c == '/' || c == '(' || c == ')' ||
c == '{' || c == '}';
}
其中單引號(hào)包括起來(lái)的是字符串,需要特殊考慮。在處理單引號(hào)包括的內(nèi)容時(shí),我們不做任何處理,并維持當(dāng)前單引號(hào)狀態(tài)
三、標(biāo)識(shí)符(ID)
標(biāo)識(shí)符由非數(shù)字開(kāi)頭的字符串,用來(lái)代表變量名等。
四、空白(blank)
Tiny 中常見(jiàn)空白包括:空格(0x20)、水平制表(0x09)、垂直制表(0x0B)、換頁(yè)(0x0C)、回車(0x0D)和換行符(0x0A)
語(yǔ)義分析實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/h1>
語(yǔ)義分析本質(zhì)上就是在語(yǔ)法分析的基礎(chǔ)上進(jìn)一步完善分析的功能。舉個(gè)例子來(lái)說(shuō),在語(yǔ)法分析部分的 if_stmt 函數(shù)中,在語(yǔ)義上判斷條件必須返回布爾類型的值,因此我們加入一個(gè)判斷,判斷是否結(jié)果為布爾類型,如果不是的話就拋出異常。



