?? 關(guān)于執(zhí)行代碼.txt
字號:
執(zhí)行代碼的具體實(shí)現(xiàn):
1.執(zhí)行過程使用的是語法分析通過時(shí)生成的Tree圖形和存儲嵌套層次的列表。過濾Tree圖形的內(nèi)容生成與嵌套層次對應(yīng)的執(zhí)行語句(字符串);根據(jù)嵌套層次可以直接確定每條執(zhí)行語句的范圍,而每條執(zhí)行語句的起始部分均為用于識別語句類型的標(biāo)志;按照語句的類型調(diào)用相應(yīng)函數(shù)進(jìn)行執(zhí)行,直到全部語句執(zhí)行完畢。
2.遇到錯誤時(shí)拋出異常(使用自定義的異常類),輸出部分即可獲得錯誤的具體信息,并在輸出錯誤后立即終止執(zhí)行。
3.變量及其作用域。 執(zhí)行開始時(shí)建立了2個分別用于存儲int型、array型變量的列表(全局變量)。每次進(jìn)入語句塊(即全部的執(zhí)行語句或if\else if\else\while語句的執(zhí)行體)的時(shí)候保存兩個列表的長度,當(dāng)語句塊執(zhí)行完畢時(shí)按照先前存儲的長度刪除列表中增加部分,于是實(shí)現(xiàn)了作用域的識別。
4.表達(dá)式的計(jì)算。 表達(dá)式是存儲于一個完整的字符串之中,根據(jù)優(yōu)先級(中括號和小括號優(yōu)先級相同)的順序進(jìn)行計(jì)算。小括號的消除是將小括號及括號內(nèi)部分用括號內(nèi)部分計(jì)算得到的值替換,數(shù)組具體索引處的值是根據(jù)中括號內(nèi)部分計(jì)算獲得索引值并在變量列表中查找獲得值然后整體替換。當(dāng)表達(dá)式使用了某個變量時(shí)從列表中查找相應(yīng)的值,若不存在則拋出異常。
5.變量聲明的執(zhí)行。 變量聲明的語法已由語法分析確定,執(zhí)行過程只是創(chuàng)建兩種類型變量的對象(已經(jīng)定義了用于存儲int型、array型變量的類)并添加到相應(yīng)變量列表中。
6.read語句和賦值語句。 read語句分為int型變量的讀入、數(shù)組變量具體索引處值的讀入和數(shù)組變量的讀入。前兩種情況只能輸入為各種算術(shù)表達(dá)式(支持復(fù)雜表達(dá)式的計(jì)算,可含有擁有值的變量,包括數(shù)組變量具體索引處的值,數(shù)組索引亦可為復(fù)雜的表達(dá)式);而對數(shù)組變量的讀入則包括輸入為數(shù)組變量或使用大括號包括(大括號可選)的以逗號分隔的算術(shù)表達(dá)式。具體規(guī)則是不希望改變原有值的索引處可以使用逗號與前后隔開,但是不能使用逗號結(jié)束。由于數(shù)組變量的長度在聲明時(shí)已經(jīng)確定,所以如果超過索引越界則會報(bào)錯,而長度不夠則不會改變后面索引處的值。賦值語句與此基本相同,區(qū)別在于使用具體數(shù)據(jù)對數(shù)組賦值是要求使用大括號(語法分析要求)。
7.write語句。 除了錯誤以外這是唯一一中會執(zhí)行輸出的語句。可選的輸出內(nèi)容有:變量、算術(shù)表達(dá)式。其中數(shù)組變量的輸出為依次輸出每個索引處的值中間使用空格隔開。
8.循環(huán)語句的執(zhí)行。 程序首先檢查是否關(guān)系表達(dá)式為真且其中不含有變量(這種情況將導(dǎo)致死循環(huán)),若是則終止執(zhí)行并報(bào)錯。否則,使用while循環(huán)執(zhí)行循環(huán)語句,其條件就是代碼中的關(guān)系表達(dá)式。
9.條件語句的執(zhí)行。 由于if\else if\else語句的個數(shù)不確定,同樣采用while語句進(jìn)行執(zhí)行,條件是剩余內(nèi)容為空。每次先分析if\else if語句的關(guān)系表達(dá)式是否為真(如果是else語句則直接執(zhí)行并跳出循環(huán)),若為真則執(zhí)行相應(yīng)語句塊并跳出循環(huán),否則刪除相應(yīng)語句塊。
呂淵
200532580144
國軟5班
2007.11.15
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -