第一篇:編譯原理課程設(shè)計教案
黃岡師范學(xué)院
《編譯原理課程設(shè)計》教案
(2011·春)
授 課 教 師: 張 瑞 紅
授 課 班 級: 計科2008級
授 課 時 間: 2010-2011 二
課題一 有限自動機的運行
一、設(shè)計題目:有限自動機的運行
二、設(shè)計目的:
1、理解有限自動機的作用
2、利用轉(zhuǎn)態(tài)圖和狀態(tài)表表示有限自動機
3、以程序?qū)崿F(xiàn)有限自動機的運行過程
三、設(shè)計內(nèi)容:(注:題目詳細要求)
利用狀態(tài)表和有限自動機的運行原理編制程序,使得程序能夠識別一個輸入串是否為一個有效的符號串,具體可以選擇下面之一:無符號定點實數(shù)、自然數(shù)、整數(shù)、十六進制數(shù)或其它自己定義的符號串。
四、設(shè)計思想:(注:算法思想、程序流程圖、不要寫代碼)
本程序?qū)崿F(xiàn)對無符號定點實數(shù)的判斷,正確接受,否則不接受。
本程序的關(guān)鍵在狀態(tài)表和緩沖區(qū)的運用。首先定義了一個布爾型函數(shù)ReadALine把輸入的字符串送到緩沖區(qū)中;然后定義了布爾型函數(shù)Run 和Getchar實現(xiàn)對輸入字符串的正確性判斷,更改Run函數(shù)可以改變程序功能:如可將狀態(tài)表改變成識別“偶數(shù)”的有限自動機的狀態(tài)表。
程序流程圖如下:(學(xué)生自己畫)
五、運行結(jié)果與數(shù)據(jù)分析:
六、設(shè)計總結(jié)體會:(學(xué)生自己寫,此處可參考)
通過這次課程設(shè)計,我對程序的編譯和運行過程有了更進一步的了解,對程序的底層設(shè)計、代碼優(yōu)化也有了初步的認識,而且知道了如何從根本上來提高程序運行的速度。附錄:(完整代碼)#include
#define STATE_NUMBER 4 //狀態(tài)數(shù)目
#define CHAR_NUMBER 2 //輸入字符的種類: d 和.#define DIGIT 0 //輸入數(shù)字在狀態(tài)表中位于第0列
//State[][]為狀態(tài)表,以整數(shù)組形式存放,0,1,2,3表示狀態(tài),-1表示沒有此狀態(tài) int State[STATE_NUMBER][CHAR_NUMBER]= {{1,-1},{1,2}, {3,-1}, {3,-1}};int Q[STATE_NUMBER] = {0,1,0,1};//終態(tài)標志:0非終態(tài),1終態(tài)。//緩沖區(qū):
//輸入緩沖區(qū):由專門函數(shù)操作(ReadALine(),GetChar())#define BUFFER_SIZE 1000 //表達式緩沖區(qū)大小
char Buffer[BUFFER_SIZE];//表達式緩沖區(qū),以'