编译原理课程设计小型程序设计语言编译器的设计与实现.doc
《编译原理课程设计小型程序设计语言编译器的设计与实现.doc》由会员分享,可在线阅读,更多相关《编译原理课程设计小型程序设计语言编译器的设计与实现.doc(16页珍藏版)》请在沃文网上搜索。
1、目录一设计题目- 1二主要内容- 1三具体要求- 1四进度安排- 1五成绩评定- 2六设计思路- 2七源程序及运行结果- 3八设计体会- 15正文一 设计题目小型程序设计语言编译器的设计与实现二主要内容自定义一种简单的小型高机程序设计语言,采用任意一种编程语言和编程工具设计并实现其编译器,展示编译系统中词法分析和语法分析(LR分析方法)的全过程。三具体要求1、对单词的构词规则有明确的定义;2、编写的词法分析程序能够正确识别源程序中的单词符号;3、识别出的单词以的二元式形式保存在符号表中并输出;4、构造出程序设计语言各语法单位的SLR分析表;(其他分析表亦可)5、能够对输入的源程序做出正确的语法
2、分析并输出清晰的结果;6、高级语言的规模不易过大,注重编译器内核的设计,对于界面无要求;7、课程设计报告中应对所自定义高级语言进行简单描述,对编译器的设计进行简单的需求分析,给出设计说明和程序结构框架,阐明设计思路、用到的原理和方法。8、不可更改课程设计报告中已有的字体和格式,课程设计报告中新加入内容,汉字采用宋体五号字,英文字符和数字采用Times New Roman五号字。四进度安排序号内 容时间(天)1布置题目、查找资料12概要设计13详细设计34调试分析15测试结果0.56总结和完成设计报告1合 计7.5五成绩评定1、考核方法:通过现场考勤、检查源程序和批改课程设计报告相结合的方式考察
3、学生的动手能力,独立分析解决问题的能力和创新精神,并根据学生的学习态度综合考评。2、成绩评定:成绩分优、良、中、及格和不及格五等。六设计思路开始做的时候很纠结不知道如何开始,然后就按照书上的内容进行编程。但书上的程序太大了,而给自己做的时间有太少了。所以就选择参照书上的内容自己动手,词法分析的思路基本上和书上的一样对每个词进行分析编号。但是由于书上内容复杂,所以我只做了赋值语句的顺序处理部分。而且和书上的赋值语句相比我有加了减法和除法的功能。并且在读取阶段,书上是按行读取(读到”n”为一个readline),而我选择了按语句进行读取(读到”;”为一个readline)。因为有时候一行之间会有好
4、几个语句。我可以把一行上的多个语句分开来,当然书上也可以只不过这一步她是在程序语句处理里面完成的。而我只有赋值语句。并且还要实现顺序结构所以就按照自己的思路做下去了。然后是语法分析,由于词法分析和书上的有出路。所以一开始我就没打算用书上的思路去做。就按照自己的思路来解决,首先是对词法分析里的存储单词的数组进行拷贝和修改(添加了#号使其能区分出赋值语句)、然后正式的语法分析时,我是直接对拷贝后的数组进行分析的,中间出了不少错误,更关键的是语法分析时在顺序上出现了错误,这一点我无法用语言说清楚,解决顺序上的错误时我加入了add1()这个函数,同时这个函数也实现了将终结符改为非终结符的功能(也就是所
5、谓的临时变量)。然后就是一个语句分析完后进行下一个语句的分析。这个就是个衔接问题,改动数组的坐标就能完成,大概的思路就是这样,中间调试时错误百出,对语法分析程序做了不少的小动作。然后就是将语法分析结果显示出来,为了和课本的相似,用了几个条件语句做约定。这个是第二天上午解决的,思考了一会。当然最关键的核心技术,还是和书上的一样。符号种别编码说明Pound_sign7“#”add34“+”sub35“-”mul36“*“div37“/”equal38“=”lbrackets48“(“rbrackets49“)”tempsy55临时变量ident56变量intconst57整常数单词符号的内部定状态
6、ACTIONGOTOi+-*/()#E0S3S211S4S5S6S72S3S283R6R6R6R6R6R64S3S295S3S2106S3S2117S3S2128S4S5S6S7S139R1R1S6S7R1R110R2R2S6S7R2R211R3R3R3R3R3R312R4R4R4R4R4R413R5R5R5R5R5R5算符运算SLR(1)分析表七源程序及运行结果#include#include#includeusing namespace std;#define txtname C:bianyiqi.txt#define ACC -2/-字符定义-#define pound_sign 7 /
7、“#”#define add 34 /“+”#define sub 35 /“-”#define mul 36 /“*“#define div 37 /“/”#define equal 38 /“=”#define lbrackets 48 /“(“#define rbrackets 49 /“)”#define tempsy 55 /临时变量#define ident 56 /变量#define intconst 57 /整常数/-变量申明-char ch=0; /读取字符int count=0; /计buf里的单词个数static char spelling10=; /读取一个变量stat
8、ic char line255=; /单词字符数组char *pline; /单词指针int lnum=0; /行数int nlength=0; /所产生的变量编号static char ntab110010; /存放新的变量并进行比较struct aaint sy1;int pos;buf1000,n,n1,E,sstack100,ibuf100;int tt1=0;int stack1000; /栈int sp=0; /栈的位置数int ii=2; /ibuf数组的位置数int lr; /状态序列int j=0; /ibuf总个数int h=1; /控制”#结束#”的个数函数ifstrea
9、m infile;/-语法分析表-int action149=3,-1,-1,-1,-1,2,-1,-1,1,-1,4,5,6,7,-1,-1,ACC,-1,3,-1,-1,-1,-1,2,-1,-1,8,-1,106,106,106,106,-1,106,106,-1,3,-1,-1,-1,-1,2,-1,-1,9,3,-1,-1,-1,-1,2,-1,-1,10,3,-1,-1,-1,-1,2,-1,-1,11,3,-1,-1,-1,-1,2,-1,-1,12,-1,4,5,6,7,-1,13,-1,-1,-1,101,101,6,7,-1,101,101,-1,-1,102,102,6,
10、7,-1,102,102,-1,-1,103,103,103,103,-1,103,103,-1,-1,104,104,104,104,-1,104,104,-1,-1,105,105,105,105,-1,105,105,-1;/-字符读取-void readline() char ch1;pline=line;infile.get(ch1);while(ch1!=;)*pline=ch1;pline+;infile.get(ch1);*pline=NULL;pline=line;void readch()if(ch=NULL)readline();lnum+;ch=*pline;pline
11、+;/-变量识别-int find(char spel)int ss1=0;int ii=0;while(ss1=0)&(ii=a)&(ch=0)&(ch=9);pline-;spellingk=0;bufcount.sy1=ident;j=find(spelling);if(j=-1)bufcount.pos=tt1;strcpy(ntab1tt1,spelling);tt1+;nlength+;elsebufcount.pos=j;count+;for(k=0;k=0)&(ch=9);bufcount.sy1=intconst;bufcount.pos=ivalue;count+;plin
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 小型 程序设计语言 编译器 设计 实现