實驗一源程式的輸入和掃瞄
學時數:2
[實驗內容]:
1、 編制乙個源程式的輸入、掃瞄程式,從檔案中每次讀入一行到輸入緩衝區(可以用字元陣列實現);然後從緩衝區中依次取出字元顯示在螢幕上。
2、從檔案每次讀入一行到輸入緩衝區的功能(可以用字元陣列實現)用乙個子程式實現。
[實驗目的]:
1、通過自己編制乙個源程式的輸入、掃瞄程式,熟悉並了解從檔案中讀入資料到輸入緩衝區的過程。
[實驗步驟]:
1、準備: 用tc、vc++等開發工具;確定被處理的語言的語法特點(可使用現成語言如pascal、c等)。編好程式,寫好實驗報告。
2、上機:輸入源程式,修改、除錯,執行。
[程式設計思想]:
採用乙個子程式實現的形式。
(1)程式判斷原始檔是否為null,如果是,則輸出錯誤提示!如果不是,則進入迴圈。
(2)呼叫子程式readbuffer(),每次讀入乙個字元給字元變數,如果字元變數的內容不是回車符,則把字元變數的內容存入陣列buffer(),然後讀入下一字元,再判斷再存入陣列,直到一行全存入陣列,然後返回主程式,用輸出語句輸出剛才存入陣列的一行字元;
(3)如果沒有到檔案尾,則重複第(2)步,直到檔案結束,則退出主程式,完成任務!
[程式要求]:
1)例如首先輸入以下一段c語言的源程式,並以a.c的檔名儲存到磁碟中,然後執行自己編制的輸入、掃瞄程式,所得到的輸出應與輸入的原始檔a.c中內容相同。
例如: 輸入的a.c檔案內容:
main()
自編源程式:輸入、掃瞄程式源**(僅供參考):
//程式開始:
# include
# include
# include
//宣告標頭檔案
inti;
file*fp;
charbuffer[256];
//宣告變數
intreadbuffer() //讀字元子程式開始
return1;
} //子程式結束
main() //main()開始
while(!feof(fp))
printf("\n");
getch();
}fclose(fp);
getch();
} //main()結束
//程式結束
2)改變原始檔e:\\a.c內容為:
main()
執行自編的輸入掃瞄程式,檢查輸出結果必須與上面輸入的原始檔中的**相同。
[實驗報告]:
1、寫出除錯程式出現的問題及解決的方法。
2、寫實驗報告及程式清單。
3、報告給出測試的結果。
4、實驗小結
實驗二無符號數的有限自動機的實現
學時數:4
[實驗內容]:
無符號數的有限自動機的實現。利用狀態表和有限自動機的執行原理編制程式,使得程式能夠識別乙個輸入串是否為乙個無符號定點實數。
[實驗題目]:
1、理解有限自動機的作用;進一步理解自動機理論。
2、 用狀態圖和狀態表表示有限自動機;
3、以程式實現有限自動機的執行過程;掌握文法轉換成自動機的技術及有窮自動機實現的方法。
[實驗要求]:
1. 設計要求:利用狀態圖或狀態表相關理論,利用有限自動機理論。
2. 功能要求:輸入乙個單行無空格的字串(以「#」號結束),如果該字串是乙個合法的輸入,則顯示「接受」,否則顯示「不接受」。
3. 輸入/輸出示例(以無符號定點實數為例):
(1) 輸入:「3.14」,輸出:「接受」;
(2) 輸入:「3.1.4」,輸出:「不接受」;
(3) 輸入:「3ab」,輸出:「不接受」。
[實驗提示]:
1、無符號數的bnf描述如下:
1.《無符號數》 d 《餘留無符號數》 | . 《十進位制數》 | e 《指數部分》
2.《餘留無符號數》 d 《餘留無符號數》 | . 《十進位制數》 | e 《指數部分》 | ε
3.《十進位制小數》 d 《餘留十進位制小數》
4.《餘留十進位制小數》 e 《指數部分》 | d 《餘留十進位制小數》 | ε
5.《指數部分》 d 《餘留整指數數》 | + 《整指數》 | - 《整指數》
6.《整指數》 d 《餘留整指數數》
7.《餘留整指數數》 d 《餘留整指數數》 | ε
2、將g[《無符號數》]文法轉換成有限自動機見圖1。
圖13、構造狀態矩陣;將有限自動機的狀態s1 s2 ……sn及輸入的字a1 a2 ……am 構成乙個n*m的矩陣。
1)根據狀態矩陣設計出乙個詞法分析程式識別無符號數。
2)掃瞄無符號數,根據文法給出無符號數出錯的位置。
[實驗報告]:
1、寫出無符號數詞法分析的思想。
2、畫出演算法流程圖。
3、寫出除錯程式出現的問題及解決的方法。
4、列印實驗報告及程式清單。
5、報告給出測試的結果。
6、實驗小結
試驗示例:有限自動機的執行
程式功能:
利用狀態表和有限自動機的執行原理,識別乙個輸入串是否為乙個有效的無符號定點實數。
例:執行自編程式後
鍵盤輸入:1#
輸出顯示:接受
鍵盤輸入:3.14#
輸出顯示:接受
鍵盤輸入:3ab#
輸出顯示:不接受
鍵盤輸入:1.2.3
輸出顯示:不接受
輸入資料要求:不能有空格,以'#'結束(在本程式可以不用'#'結束)。
輸出:如果是無符號定點實數,顯示「接受」;否則顯示「不接受」。
實驗三詞法分析處理(查添符號表)
學時數:4
[實驗內容]:
1、 查添符號表(識別符號為以字母開頭的字母數字串)。
2、 讀識別符號若表中已有該識別符號,則取出其在表中的位置,輸出該識別符號極其編號;否則產生乙個新的編號,連同識別符號一起添入名錶;最後輸出識別符號表。
[實驗目的]:
1、 了解符號表的幾種結構,掌握符號表的訪問方法。
2、 了解編譯時如何對識別符號進行處理。
3、掌握詞法分析的處理方法。
[實驗要求]:
1、 從鍵盤上輸入識別符號,識別符號之間用逗號隔開,最後以分號結束(也可以用其他符號做結束標誌)。
如:arr,bet,x1,x2,y,addr1;
2、編號從100開始,最後輸出的識別符號不能有重複出現;
3、識別符號的長度必須小於或等於8個字元。
[實驗步驟]:
1、 根據識別符號的文法規則,畫出識別符號的狀態轉換圖。
2、 畫出讀取識別符號的程式框圖。
3、 寫出程式,上機除錯並輸出結果。
程式設計說明:(供參考)
1、變數陣列的說明:
1)定義乙個工作陣列a,該陣列有8個元素(識別符號長度為8)。
2)定義乙個識別符號表結構id,其中包含兩個成員:陣列name和變數addr。陣列name存放登記識別符號名字,長度為8個字元的陣列變數,記錄了識別符號的名字。
本程式只識別識別符號的前8個字元,超過8個字元的部分無效。變數addr則記錄識別符號編號,即該識別符號在符號表中所對應的位置。
3)如果工作陣列a中的元素為合法識別符號,則將其名字填入結構id中的name陣列,將其編號填入addr陣列。如果工作陣列a中元素為非法識別符號,錯誤標誌errty置1,顯示出錯資訊。
4)用變數k記錄讀入的識別符號個數。
5)用變數i記錄每個識別符號讀入的字元個數。
6)用變數errty記錄識別符號首字元為非字元的錯誤標誌。
工作陣列a中為非法識別符號,錯誤標誌errty置1,顯示出錯資訊。
7)用變數errty1記錄識別符號中有非字母數字字元的錯誤標誌。
2、程式框圖:yn
ynyynny n
[實驗報告]:
1、寫出查添符號表的設計思想。
組合語言實驗報告組合語言實驗指導書
實驗報告 實驗課程組合語言程式 學生代號信念 學號5215201314 專業班級網路間諜088班 2009年 12月 25日 實驗1 利用debug除錯組合語言程式段54 實驗3 初級程式的編寫與除錯實驗 二59 實驗5 分支程式實驗65 實驗6 迴圈程式實驗68 實驗7 子程式實驗69 實驗8 字...
組合語言實驗指導書
王勇劉輝 上海電力學院計算機系 2007年10月 目錄實驗一 debug命令實驗 1 實驗二字串傳遞實驗 7 實驗三迴圈程式實驗 15 實驗四多重迴圈實驗 21 實驗五分支程式實驗 28 實驗六子程式引數傳遞實驗 34 實驗七子程式巢狀實驗 37 實驗八中斷處理實驗 42 實驗九 bios中斷實驗 ...
組合語言程式設計實驗指導書
計算機工程教研室 實驗課程 組合語言程式設計 適用專業 電腦科學與技術專業 上海應用技術學院 2012年3月 目錄目錄 i 前言 1 上機實驗的要求和步驟 1 實驗報告的要求 2 組合語言上機操作簡介 3 編輯 3 彙編 3 連線 5 執行和除錯 5 實驗一資料定義和資料傳送 8 實驗二多項式運算 ...