简单编译器的实现-课时设计

简单编译器的实现-课时设计

ID:35627885

大小:147.50 KB

页数:22页

时间:2019-04-03

简单编译器的实现-课时设计_第1页
简单编译器的实现-课时设计_第2页
简单编译器的实现-课时设计_第3页
简单编译器的实现-课时设计_第4页
简单编译器的实现-课时设计_第5页
资源描述:

《简单编译器的实现-课时设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、成绩:课程设计题目:简单编译器实现学院:专业:班级:组长:小组成员:指导教师:2014年12月19日22一、课程设计的目的在学习《程序设计语言编译原理》课程过程中,结合各章节构造编译程序的基本理论分别完成词法分析器、语法分析器和语义分析器实验,在基本实验完成的基础上,逐步完成课程设计。针对自己的理解和学习,实现一个小编译器括符号表的构造,词法分析,语法分析,目标代码生成等重要子程序,其中词法分析、语法分析及语义分析功能必须完成),并对其进行分析解释和总结,同时将理论与实际应用结合起来,接受软件设计

2、等开发过程的全面训练,从而提高软件开发的能力。二、课程设计的任务(1)设计符号表确定符号表的组织方式,一般应包括名字栏和信息栏,其中名字栏作为关键字。要考虑能够存储有关名字的信息,并可以高效地完成如下操作:a.查找:根据给定的名字,在符号表中查找其信息。如果该名字在符号表中不存在,则将其加入到符号表中,否则返回指向该名字的指针;b.删除:从符号表中删除给定名字的表项。(2)设计词法分析器设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括:a.具备

3、预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;b.能够拼出语言中的各个单词;c.将拼出的标识符填入符号表;d.返回(种别码,属性值)。(3)语法分析器要求用预测分析法、递归下降分析法、算符优先分析法、SLR分析法(几种方法任选),实现对表达式、各种说明语句、控制语句进行语法分析。(4)目标代码生成器22能完成指定寄存器个数的情况下将一中间代码程序段翻译成汇编语言目标代码(汇编指令应包括加、减、乘、除),要求指令条数最少的情况下,尽量使用寄

4、存器,尽量少访问内存,这样才能做到运行效率高。三、课程设计要求样本语言为C-语言,实现简单的编译器,其中基本的语句要求必须实现,其余部分可根据自己的实际情况选择实现。对主要代码给予解释和理解注释,各函数和过程应有简要描述,有功能说明,有入口和出口参数说明。四、简单编译器的实现流程图主程序=词法分析程序语法分析程序中间代码生成程序4.2词法分析程序(1)设计词法分析器设计思想:要求:1.对单词的构词规则有明确的定义;2.编写的分析程序能够正确识别源程序中的单词符号;3.识别出的单词以<种别码,值>的

5、形式保存在符号表中;4.词法分析中源程序的输入以.c格式,分析后的符号表保存在.txt文件中。5.对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成整个源程序的词法分析;6.输入:由符合规定单词类别结构的各类单词组成的源程序。实现方法:根据加入语义过程的状态转换图直接编写词法分析程序。根据每一组状态转换关系(标识符)组织程序结构,并将所有公共处理过程分别实现即可。在扫描源程序字符串时,一旦识别出关键字、运算符、标识符、无符号常数中之一,即以二元式形式(类别编码,值)输

6、出单词。每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词。实现过程及主要代码:#include#include#include#include22voidreading(char*prog);charprog[800],token[80];charch;intsyn,p,m=0,n,row,sum=0;//关键字存储char*rwtab[20]={"PROGRAM","VAR","PROCEDURE","

7、BEGIN","END","IF","THEN","ELSE","REPEAT","UNTIL","READ","WRITE","WRITELN","FOR","DO","int","float","double","char","printf"};voidscaner(){for(n=0;n<8;n++)token[n]=NULL;//过滤空格ch=prog[p++];while(ch==''){ch=prog[p];p++;}if((ch>='a'&&ch<='z')

8、

9、(ch>='A'&&c

10、h<='Z')){//可能是标示符或者变量名m=0;//整形变量intwhile((ch>='0'&&ch<='9')

11、

12、(ch>='a'&&ch<='z')

13、

14、(ch>='A'&&ch<='Z')){token[m++]=ch;ch=prog[p++];}//识别出一个标示符token[m++]='';//回退一位p--;syn=34;//单纯的标示符for(n=0;n<20;n++)//将识别出来的字符和已定义的标示符作比较,if(strcmp(token,rwtab[n]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。