欢迎来到天天文库
浏览记录
ID:10784336
大小:190.00 KB
页数:29页
时间:2018-07-08
《编译技术课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、编译技术课程设计班级计算机0802学号3080602051姓名指导老师二零一一年七月一、目的<<编译技术>>是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。二、任务及要求基本要求:1.词法分析器产生下述小语言的单词序列这个小语言的所有的单词符号,以及它们的种别编码和内部值如下表:单词符号种别编码助
2、记符内码值DIMIFDOSTOPEND标识符常数(整)=+***,()1234567891011121314$DIM$IF$DO$STOP$END$ID$INT$ASSIGN$PLUS$STAR$POWER$COMMA$LPAR$RPAR------内部字符串标准二进形式------对于这个小语言,有几点重要的限制:首先,所有的关键字(如IF﹑WHILE等)都是“保留字”。所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。例如,下面的写法是绝对禁止的:IF(5)=x其次,由于把关键字作为保留字
3、,故可以把关键字作为一类特殊标示符来处理。也就是说,对于关键字不专设对应的转换图。但把它们(及其种别编码)预先安排在一张表格中(此表叫作保留字表)。当转换图识别出一个标识符时,就去查对这张表,确定它是否为一个关键字。再次,如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔(此时,空白符不再是完全没有意义的了)。例如,一个条件语句应写为 IFi>0i=1;而绝对不要写成 IFi>0i=1;因为对于后者,我们的分析器将无条件地将IFI看成一个标识符
4、。这个小语言的单词符号的状态转换图,如下图:1.语法分析器能识别由加+减-乘*除/乘方^括号()操作数所组成的算术表达式,其文法如下:E→E+T
5、E-T
6、TT→T*F
7、T/F
8、FF→P^F
9、Pp→(E)
10、i使用的算法可以是:预测分析法;递归下降分析法;算符优先分析法;LR分析法等。2.中间代码生成器产生上述算术表达式的中间代码(四元式序列)较高要求:1.扩充上述小语言的单词;2.增加语法分析器的功能,能识别条件语句和循环语句等;3.增加中间代码生成器的功能,能产生条件语句和循环语句等的中间代码(四元式序
11、列)4.增加报错功能;5.将中间代码翻译成汇编语言。三、实现过程说明数据定义清单:#defineACC-2/************种别编码************/#definesy_if0#definesy_then1#definesy_else2#definesy_while3#definesy_begin4#definesy_do5#definesy_end6#definea7#definesemicolon8#definee9#definejinghao10#defineS11#defineL
12、12#definetempsy15#defineEA18/*Eand*/#defineE019/*Eor*/#defineplus34#definetimes36#definebecomes38#defineop_and39#defineop_or40#defineop_not41#definerop42#definelparent48#definerparent49#defineident56#defineintconst57#defineminus58#definediv59#definecheng
13、fang60/*********************************/charch=' ';/*从字符缓冲区读取当前字符*/intcount=0;/*词法分析结果缓冲区计数器*/staticcharspelling[10]={""};/*存放识别的字*/staticcharline[81]={""};/*一行字符缓冲区,最多80个字符*/char*pline;/*字符缓冲区指针*/staticcharntab1[100][10];/*变量名表,共100项,每项长度10*/structnta
14、b{inttc;/*真值*/intfc;/*假值*/}ntab2[200];/*在布尔表达式E中保存有关布尔变量的真、假值*/intlabel=0;/*指向ntab2的指针*/structrwords{/*存放临时变量的表的定义*/charsp[10];intsy;};/*(保留字表)匹配表的结构,用来与输入缓冲区中的单词进行匹配*//*匹配表初始化,大小为10*/structrwordsreswords[10]={{"if",sy_if}
此文档下载收益归作者所有