编译原理课程设计打印_第1页
编译原理课程设计打印_第2页
编译原理课程设计打印_第3页
编译原理课程设计打印_第4页
编译原理课程设计打印_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、编译原理课程设计课程设计(论文)任务书 软 件 学 院 学院 软件测试 专业 2 班 一、课程设计(论文)题目 词法分析器的设计与实现 二、课程设计(论文)工作自 2014 年 6 月 16 日起至 2014 年 6 月 21 日止。三、课程设计(论文) 地点: 软 件 学 院 实 训 中 心 四、课程设计(论文)内容要求:1本课程设计的目的进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的程序设计任务,同时,强调好的程序设计风格,并综合使用程序设计语言、数据结构和编译原理的知识, 熟悉使用开发工具VC /JAVA/C#

2、/.NET 。2课程设计的任务及要求1)课程设计任务:词法分析器的设计词法分析器的实现 扫描器的设计与实现2)创新要求:在到达基本要求后,可进行创新要求。3)课程设计论文编写要求(1)课程设计任务及要求(2)设计思路-工作原理、功能规划(3)详细设计-数据分析、算法思路、功能实现(含程序流程图、主要代码及注释)、界面等。(4)运行调试与分析讨论-给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结-设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。(6)报告按规定排版打印,要求装订平整,否则要求返工;(7)课设报告的装订顺序如下:封面-任务书-中文

3、摘要-目录-正文-附录(代码及相关图片)(8)严禁抄袭,如有发现,按不及格处理。4)课程设计评分标准: (1)学习态度:20分;(2)系统设计:20分;(3)编程调试:20分;(4)回答问题:20分;(5)论文撰写:20分。5)参考文献:(1)张素琴,吕映芝. 编译原理M., 清华大学出版社(2)蒋立源、康慕宁等,编译原理(第2版)M,西安:西北工业大学出版社6)课程设计进度安排1准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料2程序模块设计分析阶段(4学时):程序总体设计、详细设计3代码编写调试阶段(8学时):程序模块代码编写、调试、测试4撰写论文阶段(4学时):总结课程设计

4、任务和设计内容,撰写课程设计论文学生签名: 2014 年 6 月 21 日课程设计(论文)评审意见(1)学习态度(20分):优()、良()、中()、一般()、差(); (2)系统设计(20分):优( )、良()、中()、一般()、差(); (3)编程调试(20分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)论文撰写(20分):优()、良()、中()、一般()、差(); 评阅人: 职称: 副教授 2014 年 6 月 26 日中文摘要词法分析器的工作是低级别的分析:将字符或者字符序列转化成记号.。在谈论词法分析时,使用术语

5、“词法记号”(简称记号)、“模式”和“词法单元”表示特定的含义。在分析时,一是把词法分析器当成语法分析的一部分,另一种是把词法分析器当成编译程序的独立部分。在前一种情况下,词法分析器不断地被语法分析器调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其Token值返回给语法分析器。后一种情况则不同,词法分析器不是被语法分析器不断地调用,而是一次扫描全部单词完成编译器的独立一遍任务。在分析时,一是把词法分析器当成语法分析的一部分,另一种是把词法分析器当成编译程序的独立部分。在前一种情况下,词法分析器不断地被语法分析器调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其

6、Token值返回给语法分析器。后一种情况则不同,词法分析器不是被语法分析器不断地调用,而是一次扫描全部单词完成编译器的独立一遍任务。词法分析器主要特点是不依靠语法,而只依靠词法,即处理一个单词时不依赖于外部单词的信息,因此词法分析器一般都很简单。当然,对某些语言在作词法分析时,在有些情况下不得不往前查看多个字符,有时还要做一些特殊处理,还有一些在词法分析中处理不了的,要留到语法分析中进行处理。本算法主要利用状态转换图生成一个词法分析器,对输入的程序进行词法分析,并将分析得到的单词造表。其中关键字表和界限符表的大小是由高级语言的子集决定的,可以用数组装载;而标识符表和常数表的大小取决于输入的待分

7、析程序中的变量、过程名、常数的个数,所以要用指针组成动态链表来装载。当然为了方便,我们也把它定义成数组处理。目录一、课程设计任务及要求1二、需求分析3三、设计思路4四、详细设计6五、运行调试与分析讨论10六、设计体会与小结12七、参考文献12-第 3 页 -一、课程设计任务及要求1、实验目的设计并且实现一个简单的词法分析程序,由此可以加深对词法分析原理的理解,并能实践到应用中去。2、实验要求 2.1 语言的词法分类(1) 关键字:begin if then while do end所有关键字都是小写。(2) 运算符和界符::= + * / < <= <> > &g

8、t;= = ; ( ) #(3) 其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter| digit)*NUM=digit digit *(4) 空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。 2.2 各种单词符号对应的种别码 单词符号种别码单词符号种别码begin1:17if2:=18then3>20while4<>21do5<=22end6<23letter(letter| digit)*10>=24digit digit *11=25*13;26

9、/14(27+15)28-16#0二、需求分析词法分析程序的功能:输入:所给文法的源程序input.txt文本文档。输出:四元组(type,name,rows,cols)构成的output.txt文本文档。其中:type为单词种别码; Name为单词名称; Rows为所在文件行号;Cols为所在文件列号。三、设计思路从源程序中识别出具有特殊意义的单词,词法分析器根据扫描到单词符号的第一个字符的种类,可以拼出相应的单词符号。3.1 主程序示意图: 关键字表把关键字表预先安排在一张表格中,当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字

10、符串数组,其描述如下:Char *rwtab6 = “begin”, “if”, “then”, “while”, “do”, “end”;置初值调用扫描子程序输出单词二元组输入串结束 否 是结束 图3-13.2 扫描子程序首先设置3个变量:token用来存放构成单词符号的字符串;sum用来存放整型单词;syn用来存放单词符号的种别码。扫描子程序主要部分流程如图3-2所示。图 3-2四、详细设计1、变量初始化char prog81,token8,ch,tmp;int syn,p,m,n,sum,rows; /syn:存放单词符号的特征码char *rwtab6="begin"

11、;,"if","then","while","do","end"/关键字void scaner();/词法分析函数2、主函数的设计void main()FILE *out;FILE *in;rows=1;/行号if(out=fopen("e:output.txt","wt")=NULL)/打开或建立一个文本文件,只允许写数据printf("non error buiding d:output.txtn");getch();exit(1)

12、;if(in=fopen("e:input.txt","rt")=NULL)/只读打开一个文本文件,允许读数据printf("nConn't found d:input.txtn");getch();exit(1);/* printf("n please input a string(end with '#'):n");*/rewind(in);rewind(out);/重新指针开始指向一个流的开头fprintf(out,"%-5s%-10s%-5s%5sn","

13、;type","name","rows","cols");dop=0; do /*scanf("%c",&ch);*/ if(p=80) printf("non error colunm's length more than 80!n");/长度不可以大于80 getch(); exit(1); ch=fgetc(in);/读内容 progp+=ch; while(ch!=EOF&&ch!='n');/先执行,再判断ch,是就继续,不是就

14、跳出。 progp='#' tmp=ch; p=0; do scaner(); switch(syn) case 11:fprintf(out,"%-5d%-10d%-5d%5dn",syn,sum,rows,p); break; case -1:printf("you have input a wrong string,rows cols=(%d,%d)n",rows,p); getch(); exit(0); default:if(syn!=0) fprintf(out,"%-5d%-10s%-5d%5dn",sy

15、n,token,rows,p); break; while(syn!=0); if(tmp='n') rows+;/换行 while(ch!=EOF);/直到是EOF为止跳出 fclose(in); fclose(out);3、词法扫描器的设计void scaner() sum=0;/存放整形单词 for(m=0;m<8;m+)tokenm+=NULL; ch=progp+; m=0; while(ch=' ')|(ch='n')ch=progp+; if(ch<='z')&&(ch>='

16、a')|(ch<='Z')&&(ch>='A') while(ch<='z')&&(ch>='a')|(ch<='Z')&&(ch>='A')|(ch>='0')&&(ch<='9')/标识符(字母加数字)syn=10 tokenm+=ch;/token用来存放构成单词符号的字符串 ch=progp+; p-; syn=10; for(n=0;n&l

17、t;6;n+) if(strcmp(token,rwtabn)=0)/rwtab关键字表的时候,syn累加。 syn=n+1; break; else if(ch>='0')&&(ch<='9')/数字syn为11 while(ch>='0')&&(ch<='9') sum=sum*10+ch-'0' ch=progp+; p-;/回退一格。 syn=11; else switch(ch)/其他情况根据ch的值的不同来分情况处理 case '<':tokenm+=ch; ch=progp+; if(ch='=') syn=22; tokenm+=ch; else syn=20; p-; break; case '>':tokenm+=ch; 等等根据ch的不同进行相应的case语句处理。 default: syn=-1; break; tokenm+='0' 五、运行调试与分析讨论1、源程序的结果输入input:输出结果:2、源程序:

温馨提示

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

评论

0/150

提交评论