编译原理课程设计教案

编译原理课程设计教案

ID:14426493

大小:117.00 KB

页数:16页

时间:2018-07-28

编译原理课程设计教案_第1页
编译原理课程设计教案_第2页
编译原理课程设计教案_第3页
编译原理课程设计教案_第4页
编译原理课程设计教案_第5页
资源描述:

《编译原理课程设计教案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、黄冈师范学院《编译原理课程设计》教案(2011·春)授课教师:张瑞红授课班级:计科2008级授课时间:2010-2011二课题一有限自动机的运行一、设计题目:有限自动机的运行二、设计目的:1、理解有限自动机的作用2、利用转态图和状态表表示有限自动机3、以程序实现有限自动机的运行过程三、设计内容:(注:题目详细要求)利用状态表和有限自动机的运行原理编制程序,使得程序能够识别一个输入串是否为一个有效的符号串,具体可以选择下面之一:无符号定点实数、自然数、整数、十六进制数或其它自己定义的符号串。四、设计思想:(注:算法思想、程序流程图、不要写

2、代码)本程序实现对无符号定点实数的判断,正确接受,否则不接受。本程序的关键在状态表和缓冲区的运用。首先定义了一个布尔型函数ReadALine把输入的字符串送到缓冲区中;然后定义了布尔型函数Run 和Getchar实现对输入字符串的正确性判断,更改Run函数可以改变程序功能:如可将状态表改变成识别“偶数”的有限自动机的状态表。 程序流程图如下:(学生自己画)五、运行结果与数据分析:六、设计总结体会:(学生自己写,此处可参考)通过这次课程设计,我对程序的编译和运行过程有了更进一步的了解,对程序的底层设计、代码优化也有了初步的认识,而且知道了

3、如何从根本上来提高程序运行的速度。附录:(完整代码)#include #include //状态表相关存储信息:#define STATE_NUMBER 4    //状态数目#define CHAR_NUMBER 2    //输入字符的种类: d 和 .#define DIGIT 0    //输入数字在状态表中位于第0列//State[][]为状态表,以整数组形式存放,0,1,2,3表示状态,-1表示没有此状态int State[STATE_NUMBER][CHAR_NUMBER]=    {

4、{1,-1},{1,2}, {3,-1}, {3,-1}};int Q[STATE_NUMBER] = {0,1,0,1};    //终态标志:0非终态,1终态。//缓冲区://输入缓冲区:由专门函数操作(ReadALine(),GetChar())#define BUFFER_SIZE 1000    //表达式缓冲区大小char Buffer[BUFFER_SIZE];    //表达式缓冲区,以''表示结束int ipBuffer = 0;        //表达式缓冲区当前位置序号char ch;    //存放取得的一个

5、字符//函数声明:bool Run();    //对存储在缓冲区的一行字符串(以'#'结束)进行运行void Init();    //全局初始化bool ReadALine();    //从键盘读一行(没有空格),存于表达式缓冲区Buffer[]中char GetChar(); //从缓冲区取一个字符,返回该字符的同时将它存于全局变量ch中//主程序:void main(){   Init();    while(ReadALine()) //读一行成功,对它进行判断    {        if(Run()) //对该行进行运行

6、,看是否能被接受?            printf("接受");        else            printf("不接受");    }}//对存储在缓冲区的一行字符串(以'#'结束)进行运行//返回:如果是无符号定点实数,返回true;否则返回:falsebool Run(){  int S=0; //S存放运行时的当前状态,目前为初态    while(GetChar()!='#')    {   if(ch >= '0'&&ch<='9')             S = State[S][DIG

7、IT]; //将状态转换成输入后的状态        else //其他都为非法字符            return false;        if(S == -1) //处于非法状态            return false;    }    //运行结束,判断S是否为终态    if(Q[S] == 1) //终态        return true;    else //非终态        return false;}//全局初始化void Init(){   //好像无需初始化    printf("程序功能:输

8、入一个字符串,判断它是否是a。");    printf("======================================================");}//从键盘读一行(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。