欢迎来到天天文库
浏览记录
ID:11320992
大小:584.50 KB
页数:32页
时间:2018-07-11
《编译原理词法语法语义分析器设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译技术课程设计班级计算机0802学号3080602049姓名周勇指导老师朱玉全二零一一年七月编译技术课程设计一、目的<<编译技术>>是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。二、任务及要求基本要求: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.增加中间代码生成器的功能,能产生条件语句和循环语句等的中间代码(四元式序列)4
11、.增加报错功能;5.将中间代码翻译成汇编语言。三、实现过程说明给出各题目的详细算法描述,数据结构和函数说明,流程图。(1)词法分析器:1算法描述:词法分析阶段的基本任务是从以字符串表示的源程序中识别出具有独立意义的单词符号。通过DOS环境手动输入字符串序列(以’$’作为结束标志)作为带分析的源程序,调用词法扫描子程序将字符串以二元组的形式输出(若有不属于该语言单词符号出现,则进行出错处理),词法扫描子程序包括了对源程序的预处理(忽略、回车换行符等字符),以及对单词的识别和分类,以形成(单词种别,单词自身的值)形
12、式的二元组。具体思路如下:首先建立关键字表,将关键字作为特殊标示符处理,把它们预先安排在char*keywords[13]中,将需要被识别出的关键字存入表中,当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。在主函数中让用户输入要识别的符号串,然后将输入的符号串读入到program[500],遇$结束。再依次扫描program[500]中的每一个符号,调用Scan()子函数分析每一个符号,再将分析的结果输出,也是遇$结束。2函数说明和数据结构:在Scan()子函数中,
13、先全部初始化,然后读一个字符,分析它是什么类型:如果是字母类型,则接着往下读,直到读到非字母的字符,存入words[10]中,依次对比关键字表中的元素,如果相同,则将flags[]置为相应的种别码,如果全都扫描后没发现相同的关键字,则为普通的标识符,返回主函数输出。如果是数字类型,首先分析第一个符号,接着读下一个字符串,直到读到一个不是数字的字符串位置,每读一个数字字符,就将他们转化为相应的数字,使用辗转相乘法,每次都让number先自乘10,然后加上这个数字,这样就将字符串表示的数字转化成了相应的数,返回主函
14、数输出。如果是其他单词表的符号,则将他们的flags[]置为相应的种别码,并将字符存到words[]中返回主函数输出。主要变量说明:用words[10]存放构成单词符号的字符串,并且用于判断是否为关键字。flags[500]存放单词符号的种别码。Number存放整数值,words[]存放标识符,关键字或者其他符号。cnt[num]按顺序存放读到的字符,为下面语义分析做准备。Status
此文档下载收益归作者所有