编译原理课设---词法分析课程设计.doc_第1页
编译原理课设---词法分析课程设计.doc_第2页
编译原理课设---词法分析课程设计.doc_第3页
编译原理课设---词法分析课程设计.doc_第4页
编译原理课设---词法分析课程设计.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学 号: 课 程 设 计题 目词法分析程序设计学 院专 业班 级姓 名指导教师2010年6月23日课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 题 目: 词法分析程序设计初始条件:先修课程:高级程序设计语言、汇编语言、离散数学、数据结构适用专业:计算机科学与技术专业、软件工程专业要求完成的主要任务: 1目的通过设计、编制、调试一个词法分析程序,加深对词法分析原理的理解。2。设计内容及要求通过设计、编制、调试一个对于C语言词法的词法分析程序,加深对词法分析原理的理解,并实现输出单词序列的词法检查和分析。(1)学号33至35的同学完成以上任务。(2)自己设计出五种单词的符号表和对应

2、的TOKEN代码,给出分析方法的思想,完成分析程序设计.(3)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。时间安排: 2010年6月21日2009年6月25日 (第17周)6月21 日给出语法分析方法及中间代码形式的描述、文法和属性文法的设计;或者词法分析方法及符号表和TOKEN代码的设计。6月22至24日 简要的分析与概要设计、算法设计与程序设计6月25日 撰写课程设计报告书指导教师签名: 2010年6月21日 系主任(或责任教师)签名: 2010年6月21日目录1。 引言42。 正文42.1 目的42。2 设计内容及要求42.3 待分析的简单词法42。4 词法分析程序的

3、功能:52.5 词法分析程序的算法思想62。5。1主程序算法流程图62.5.2分析子程序的算法思想72.6 源程序清单72.7结果测试122。7.1 测设程序122。7。2测试程序133. 收获与体会154。 参考资料161. 引言课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂,也更接近实际.编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构表示问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解

4、决实际问题的动手能力。 开发工具:DOS环境下使用Turbo C;Windows环境下使用Visual C+ 。2。 正文2。1 目的通过设计、编制、调试一个词法分析程序,加深对词法分析原理的理解.2。2 设计内容及要求通过设计、编制、调试一个对于C语言词法的词法分析程序,加深对词法分析原理的理解,并实现输出单词序列的词法检查和分析。(1)自己设计出五种单词的符号表和对应的TOKEN代码,给出分析方法的思想,完成分析程序设计。(2)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。2。3 待分析的简单词法(1)关键字 void break case char const cont

5、inue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned volatile while auto(2)标识符 (ch=a&ch<=z')|(ch>=A&ch<='Z')(3)数字 ch>=0'ch<='9(4)运算符 = * - - + + | < (5)界符 >

6、; ( ) : , “ (6)空格忽略2。4 词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组构成的序列。其中: token为存放的单词自身字符串;例如:对源程序a+b=10; 的源文件,经过词法分析后输出如下序列:<标识符,a<运算符,+><标识符,b运算符,=>数字,10界符,;2。5 词法分析程序的算法思想 算法的基本任务是从输入的字符串中识别出具有独立意义的单词符号,并将没一个扫描到的每一类字符给出相应的种类.2.5。1主程序算法流程图 主程序中,先输入要分析的程序段,然后将输入的程序段存储并输出,对输入的程序进行分析。2.5。2分析子程序的

7、算法思想先判断输入的字符是否为字母,若是字母,跟关键字进行比较,若相同,则为关键字,不同则为标识符;若是数字、运算符、界符,则对应输出相应的结果。2。6 源程序清单#include iostream#include <iomanip>#include stringusing namespace std;char *KeyWord32=”auto",”break”,"case”,”char”,"const","continue","default”,"do”,”double",”else&quo

8、t;,"enum","extern",”float”,"for”,”goto","if”,”int",”long”,”register”,"return”,”short","signed",”sizeof”,”static”,”struct",”switch”,"typedef”,"union",”unsigned”,"void","volatile","while”;/c语言中的32个

9、关键字int i=0,j=0,k=0,t=0;char ch;char Token20;/存放构成单词符号的字符串char *chr_form100;/字符表char int_form100;/常数表char form1000;int q=0;int code;/获取字符void GetChar()ch=formk;k+;/检查ch是否为空白符,是的话,继续取下一个字符,直到不为空void GetBC()while(ch=' ')GetChar();/将ch中的字符连接到Token之后void Concat()Tokeni=ch;i+;/判断字符串ch中的字符是否为字母,是字母

10、则返回1,否则返回0bool isLetter()if(ch='ach='z')(ch='A&&ch<=Z'))return true;else return false;/判断字符串ch中的字符是否为数字,是字母则返回1,否则返回0。bool isDigit()if(ch>='0ch=9)return true;elsereturn false;/判断关键字和标识符int SearchKeyWord()for(int q=0;q32;q+)if(strcmp(Token,KeyWordq)=0)return q;/是

11、关键字if(q=32) return -1;/是标识符/回退void Reset()k-;ch=NULL;/将Token中的标识符插入符号表,返回符号表的指针char InsertChar() chr_formj=Token;j+;return chr_form0;/将Token中的常数插入常数表,返回常数表指针char InsertInt()int_formt=Token;t+;return int_form0;/词法分析void analyze()GetChar();GetBC(); /如果是字母if(isLetter())while(isLetter()|isDigit()Concat(

12、);GetChar();Reset();code=SearchKeyWord();switch(code)case -1 :cout<"标识符,"Token<<”>”<endl;break;default :cout<”<关键字”",”<Token<""endl;break;elseif(isDigit())/是数字while(isDigit()|ch='。')Concat();GetChar();Reset();cout"数字,”<Token<”>

13、;”endl;elseswitch(ch)case '=':case :case ':cout<"运算符,"ch<">"<endl;break;case '':GetChar();if(ch=) cout<”<运算符,-"<<endl;else Reset();cout<<”<运算符,>"endl;break;case '+:GetChar();if(ch=+') cout”运算符,+>”<end

14、l;else Reset();cout<”运算符,+>"<endl;break;case ':GetChar();if(ch=') cout<<”<运算符,|>"<endl;else Reset();cout”非法符号”endl;break;case &:GetChar();if(ch=&) cout<<"运算符,"<endl;break;case '/:GetChar();if(ch=/) doGetChar();while(ch!='n&

15、#39;);cout<"注释,/"<endl;else Reset();cout<"<注释,/"endl;break; case '':case ';:case (':case '):case ':case ':case '':case '':case ':':case ',:case "':cout<"<界符,”<ch<”"<<endl;brea

16、k;case :GetChar();if(ch=') cout<<"<运算符,< >"<endl;else Reset();cout"<界符,>"<<endl;break;case >:GetChar();if(ch=') cout<”<运算符,> >”endl;else Reset();cout<”界符,>>”endl;break;/程序没有结束,继续分析while(kq)for(int p=0;p20;p+)Tokenp=

17、9;0;i=0;analyze();void main()cout<"请输入一段C+语言程序,以符号结尾:"endl;form0=cin。get();/输入程序段for(q=1;formq-1!=;q+)formq=cin.get();if(formq=')cout"你输入的程序段为:”<endl;cout.write(form,q);cout<endl;break;/调用词法分析analyze();2.7结果测试2.7.1 测设程序输入一段简单C+的程序#includeiostream using namespace std; int

18、main()cout<<”this is a C+ program !"<endl;return 0;输入结束输入,测试结果如下图:2.7。2测试程序#include<iostream using namespace std; int main()int a,b;a=3;b=5;cout"a+b=”<a+b<endl;cout<<”a+b=”<<a+b<endl;return 0;输入结束,结果如下:3。 收获与体会通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言(例如C+语言)直接编写此法分析程序。另外,也让我重新熟悉了C+语言的相关内容,加深了对C+语言的用途的理解。词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号.通过本试验的完成,更加加深了对词法分析原理的理解. 4. 参考资料1 吕映芝,张素琴。 编译原理.清华大学出版社出版时间:2004年2 陈火旺,刘春林. 程序设计语言编译原理。 国防工业出版社. 2003年。3 Alfred V A, Rav

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论