编译原理课程设教案.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课程设教案

黄冈师范学院 《编译原理课程设计》教案 (2011·春) 授 课 教 师: 张 瑞 红 授 课 班 级: 计科2008级 授 课 时 间: 2010-2011 二 课题一 有限自动机的运行设计题目:有限自动机的运行 设计目的:1、理解有限自动机的作用 2、利用转态图和状态表表示有限自动机 3、以程序实现有限自动机的运行过程 设计内容:(注:题目详细要求) 利用状态表和有限自动机的运行原理编制程序,使得程序能够识别一个输入串是否为一个有效的符号串,具体可以选择下面之一:无符号定点实数、自然数、整数、十六进制数或其它自己定义的符号串。 设计思想:(注:算法思想、程序流程图、不要写代码) 本程序实现对无符号定点实数的判断,正确接受,否则不接受。 本程序的关键在状态表和缓冲区的运用。首先定义了一个布尔型函数然后定义了?和实现对输入字符串的正确性判断,更改Run函数可以改变程序功能:如 ?程序流程图如下: 五、运行结果与数据分析: 六、设计体会: 通过这次课程设计,我对程序的编译和运行过程有了更进一步的了解,对程序的底层设计、代码优化也有了初步的认识,而且知道了如何从根本上来提高程序运行的速度。 附录:(完整代码) #include?stdio.h #include?string.h //状态表相关存储信息: #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]=????{{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];????//表达式缓冲区,以\0表示结束 int?ipBuffer?=?0;????????//表达式缓冲区当前位置序号 char?ch;????//存放取得的一个字符 //函数声明: bool?Run();????//对存储在缓冲区的一行字符串(以#结束)进行运行 void?Init();????//全局初始化 bool?ReadALine();????//从键盘读一行(没有空格),存于表达式缓冲区Buffer[]中 char?GetChar();?//从缓冲区取一个字符,返回该字符的同时将它存于全局变量ch中 //主程序: void?main() {???Init(); ????while(ReadALine())?//读一行成功,对它进行判断 ????{????????if(Run())?//对该行进行运行,看是否能被接受? ????????????printf(接受\n\n); ????????else????????????printf(不接受\n\n); ????} } //对存储在缓冲区的一行字符串(以#结束)进行运行 //返回:如果是无符号定点实数,返回true;否则返回:false bool?Run() {??int?S=0;?//S存放运行时的当前状态,目前为初态 ????while(GetChar()!=#) ????{???if(ch?=?0ch=9)? ????????????S?=?State[S][DIGIT];?//将状态转换成输入后的状态 ????????else?//其他都为非法字符 ????????????return?false; ????????if(S?==?-1)?//处于非法状态 ????????????return?false; ????} ????//运行结束,判断S是否为终态 ????if(Q[S]?==?1)?//终态 ????????return?true; ????else?//非终态 ????????return?false; } //全局初始化 void?Init() {???//好像无需初始化 ????printf(程序功能:输入一个字符串,判断它是否是a。\n); ????printf(======================================================\n\n); } //从键盘读一行(没有空格),存于表达式缓冲区Bu

文档评论(0)

quechui388620 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档