首页 词法分析器又称扫描器编译原理课程设计

词法分析器又称扫描器编译原理课程设计

举报
开通vip

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

词法分析器又称扫描器编译原理课程设计
词法分析器又称扫描器编译原理课程设计课程设计(论文)任务书软件学院学院专业班一、课程设计(论文)题目二、课程设计(论文)工作自2014年6月16日起至2014年6月21日止。三、课程设计(论文)地点:软件学院实训中心四、课程设计(论文)内容要求:1(本课程设计的目的进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的程序设计任务,同时,强调好的程序设计风格,并综合使用程序设计语言、数据结构和编译原理的知识,熟悉使用开发工具VC/JAVA/C#/.NET。2(课程设计的任务及要求课程设计任务:根据自己所选择的题目填写内容创新要求:在基本要求达到后,可进行创新设计课程设计论文编写要求课程设计任务及要求设计思路--工作原理、功能规划详细设计---数据分析、算法思路、功能实现(含程序 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图、主要代码及注释)、界面等。运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。(6)报告按规定排版打印,要求装订平整,否则要求返工;编译原理课程设计课设报告的装订顺序如下:封面---任务书---中文摘要---目录----正文---附录(代码及相关图片)严禁抄袭,如有发现,按不及格处理。课程设计评分标准:(1)学习态度:20分;(2)系统设计:20分;(3)编程调试:20分;(4)回答问题:20分;(5)论文撰写:20分。参考文献:张素琴,吕映芝.编译原理[M].,清华大学出版社蒋立源、康慕宁等,编译原理(第2版)[M],西安:西北工业大学出版社6)课程设计进度安排1(准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料2(程序模块设计分析阶段(4学时):程序总体设计、详细设计3(代码编写调试阶段(8学时):程序模块代码编写、调试、测试4(撰写论文阶段(4学时): 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 课程设计任务和设计内容,撰写课程设计论文学生签名:2014年6月21日课程设计(论文)评审意见(1)学习态度(20分):优()、良()、中()、一般()、差();(2)系统设计(20分):优()、良()、中()、一般()、差();(3)编程调试(20分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)论文撰写(20分):优()、良()、中()、一般()、差();评阅人:职称:副教授2014年6月26日-第2页-编译原理课程设计中文摘要词法分析器又称扫描器。词法分析是指将我们编写的文本代码流解析为一个一个的记号,分析得到的记号以供后续语法分析使用。词法分析器的工作是低级别的分析:将字符或者字符序列转化成记号.。在谈论词法分析时,使用术语“词法记号”(简称记号)、“模式”和“词法单元”表示特定的含义。在分析时,一是把词法分析器当成语法分析的一部分,另一种是把词法分析器当成编译程序的独立部分。在前一种情况下,词法分析器不断地被语法分析器调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其Token值返回给语法分析器。后一种情况则不同,词法分析器不是被语法分析器不断地调用,而是一次扫描全部单词完成编译器的独立一遍任务。-第3页-编译原理课程设计目录一、课程设计任务及要求..................................................................1二、需求分析......................................................................................3三、设计思路......................................................................................4四、详细设计......................................................................................6五、运行调试与分析讨论................................................................13六、设计体会与小结........................................................................15七、参考文献....................................................................................15-第4页-编译原理课程设计一、课程设计任务及要求1、实验目的调试并完成一个词法分析程序,加深对词法分析原理的理解。2、实验要求2.1待分析的简单语言的词法关键字:beginifthenwhiledoend所有关键字都是小写。运算符和界符::=+–*/<<=<>>>==;()#其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter|digit)*NUM=digitdigit*空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。第1页编译原理课程设计2.2各种单词符号对应的种别码单词符号种别码单词符号种别码begin1:17if2:=18then3>20while4<>21do5<=22end6<23letter(letter|digit)*10>=24digitdigit*11=2513;26/14(27+15)28-16#0-第2页-编译原理课程设计二、需求分析词法分析程序的功能:输入:所给文法的源程序input.txt文本文档。输出:四元组(type,name,rows,cols)构成的output.txt文本文档。其中:type为单词种别码;Name为单词名称;Rows为所在文件行号;Cols为所在文件列号。例如:对源程序beginY:=9:ifY>9thenY:=2*x+1/3;end#的源文件,经过词法分析后输出如下序列:(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)词法分析状态转换图(终结状态右上角*表示多读一个符号)空格/换行#01#,结束字母/数字字母非字母数字标识符(需进一步判*23断是否为关键字)数字数字非数字*数字45非=+*+76=+=8*非=--109=-=11第3页...((12))13编译原理课程设计三、设计思路算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。3.1主程序示意图:主程序示意图如图3-1所示。其中初始包括以下两个方面:?关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char*rwtab[6]={“begin”,“if”,“then”,“while”,“do”,“end”};置初值调用扫描子程序输出单词二元组否输入串结束是结束图3-1(2)程序中需要用到的主要变量为syn,token和sum-第4页-编译原理课程设计3.2扫描子程序的算法思想:首先设置型单词;?syn3个变量:?token用来存放构成单词符号的字符串;?sum用来存放整用来存放单词符号的种别码。扫描子程序主要部分流程如图3-2所示。图3-2第5页编译原理课程设计四、详细设计词法分析程序的C++语言程序源代码:#include"stdafx.h"#include"conio.h"//包含getch函数的头文件#include"stdlib.h"//包含exit函数的头文件#include#includecharprog[81],token[8],ch,tmp;intsyn,p,m,n,sum,rows;char*rwtab[6]={"begin","if","then","while","do","end"};voidscaner();voidmain(){FILE*out;FILE*in;rows=1;if((out=fopen("d:\\output.txt","wt"))==NULL){printf("\nonerrorbuidingd:\\output.txt\n");getch();exit(1);}if((in=fopen("d:\\input.txt","rt"))==NULL){printf("\nConn'tfoundd:\\input.txt\n");getch();exit(1);}/*printf("\npleaseinputastring(endwith'#'):\n");*/rewind(in);rewind(out);fprintf(out,"%-5s%-10s%-5s%5s\n","type","name","rows","cols");-第6页-编译原理课程设计do{p=0;do{/*scanf("%c",&ch);*/if(p==80){printf("\nonerrorcolunm'slengthmorethan80!\n");getch();exit(1);}ch=fgetc(in);prog[p++]=ch;}while(ch!=EOF&&ch!='\n');prog[p]='#';tmp=ch;p=0;do{scaner();switch(syn){case11:fprintf(out,"%-5d%-10d%-5d%5d\n",syn,sum,rows,p);break;case-1:printf("youhaveinputawrongstring,rowscols=(%d,%d)\n",rows,p);getch();exit(0);default:if(syn!=0)fprintf(out,"%-5d%-10s%-5d%5d\n",syn,token,rows,p);break;}}while(syn!=0);if(tmp=='\n')rows++;}while(ch!=EOF);第7页编译原理课程设计fclose(in);fclose(out);}voidscaner(){sum=0;for(m=0;m<8;m++)token[m++]=NULL;ch=prog[p++];m=0;while((ch=='')||(ch=='\n'))ch=prog[p++];if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))){while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))){token[m++]=ch;ch=prog[p++];}p--;syn=10;for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}elseif((ch>='0')&&(ch<='9')){while((ch>='0')&&(ch<='9')){sum=sum*10+ch-'0';ch=prog[p++];}p--;-第8页-编译原理课程设计syn=11;}elseswitch(ch){case'<':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=22;token[m++]=ch;}else{syn=20;p--;}break;case'>':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}else{syn=23;p--;}break;case'+':token[m++]=ch;ch=prog[p++];if(ch=='+'){syn=17;token[m++]=ch;}第9页编译原理课程设计else{syn=13;p--;}break;case'-':token[m++]=ch;ch=prog[p++];if(ch=='-'){syn=29;token[m++]=ch;}else{syn=14;p--;}break;case'!':ch=prog[p++];if(ch=='='){syn=21;token[m++]=ch;}else{syn=31;p--;}break;case'=':token[m++]=ch;ch=prog[p++];-第10页-编译原理课程设计if(ch=='='){syn=25;token[m++]=ch;}else{syn=18;p--;}break;case'*':syn=15;token[m++]=ch;break;case'/':syn=16;token[m++]=ch;break;case'(':syn=27;token[m++]=ch;break;case')':syn=28;token[m++]=ch;break;case'{':syn=5;token[m++]=ch;break;case'}':syn=6;token[m++]=ch;break;case';':syn=26;token[m++]=ch;break;case'\"':syn=30;第11页编译原理课程设计token[m++]=ch;break;caseEOF:syn=0;break;case'#':syn=0;break;case':':syn=17;token[m++]=ch;break;default:syn=-1;break;}token[m++]='\0';}-第12页-编译原理课程设计五、运行调试与分析讨论1、给定源程序beginx:=9;ifx>0thenx:=2*x+1/3;end#输出结果2、源程序(包括上式未有的while、do以及判断错误语句):beginx<=$;whilea<0dob<>9-x;第13页编译原理课程设计end#输出结果-第14页-编译原理课程设计六、设计体会与小结通过这次课程设计,加深了我对词法分析的理解。也更是锻炼了我的编程能力。在我敲这个程序的时候,我也遇到了许多错误,当然,大多数都是逻辑错误。所以,我意识到,在编码前的需求分析是非常重要的,虽然表面上看上去是会挤压编码的时间,但是,它能让你少走不少弯路,减少你改错的时间,大大提升你的编码效率。七、参考文献作者1,作者2.参考书籍名称[M].出版地:出版社名称,出版年限张素琴等编《编译原理》清华大学出版社蒂芬?普拉达(StephenPrata)《C++PrimerPlus》人民邮电出版社第15页
本文档为【词法分析器又称扫描器编译原理课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
is_090279
暂无简介~
格式:doc
大小:243KB
软件:Word
页数:0
分类:
上传时间:2021-09-16
浏览量:2