欢迎来到天天文库
浏览记录
ID:50845679
大小:342.00 KB
页数:20页
时间:2020-03-15
《编译原理-网工0801-夏涛.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、黄冈师范学院提高型实验报告实验课题简易C语言编译器(实验类型:□综合性□设计性□应用性)实验课程编译原理实验时间2010年12月19日学生姓名夏涛专业班级网络200801学号200826340124目录一、设计题目-1-二、运行环境-1-三、算法设计的思想-1-四、算法的流程图-3-五、算法设计分析-6-六、源代码-11-七、运行结果分析-30-八、收获及体会-32-一、设计题目简易C语言编译器二、运行环境Ø硬件环境:奔腾Ⅳ处理器,主频2.0GHz;内存512M;硬盘80G以上;1024×768显示分辨率Ø软件环境:WindowsXP2;Vi
2、sualC++6.0三、算法设计的思想编译程序的工作过程一般可以分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。每一个阶段在功能上是相对独立的,它一方面从上一个阶段获取分析的结果来进行分析,另一方面由将结果传递给下一个阶段。由编译程序的五个阶段就对应了编译系统的结构。其中词法分析器利用超前搜索、状态转换等方法,将源程序转化成为一个一个的单词符号二元式。一般程序语言的单词符号包括关键字、运算符、常数、标识符和界符。语法分析器将这些单词符号作为输入,对它进行语法分析。语法分析分为两种方法:自上而下分析法和自下而上分析
3、法。针对不同程序语言的语法规则可以采取不同的分析方法,当然两种方法也可以同时使用。语法分析器把语法单元作为输入供语义分析器使用。一般的语义分析器主要采用的是语法制导方法,即在语法分析的同时进行语法分析,并产生一定的语义动作,来生成中间代码。上面三个过程可以与硬件无关,而接下来的优化器和目标代码生成器是针对某一种处理器而言的。代码优化是将语义分析生成的中间代码进行优化,产生执行效率更高的代码。目标代码生成器最终生成可以在某种机器上运行的机器语言或者汇编语言。在整个编译过程中还包括对表格的操作和对错误的处理,这些也都是非常重要的环节。源程序下图给
4、出了编译系统的结构框图:表格管理出错处理单词符号语法单元中间代码中间代码目标代码语法分析器语义分析与中间代码生成器优化器目标代码生成器词法分析器一、算法的流程图1、词法分析:1、语法分析:开始从词法输出中读入token序列,放入input初始化堆栈,并将’#’和’S’放入堆栈栈顶不为’#”是栈顶=get()是栈顶为终结符否是出栈get=getch()Get=getch()getch查分析表是否需要错误恢复否是错误恢复否否出栈,产生式逆序入栈,并输出产生式,结束1、语义分析:一、算法设计分析1、使用的数据结构和关键变量structStack{/
5、/栈结构体:序号、内容、连接下一结点指针intnum;charname;structStack*next;};structGuiyue{//规则集结构体:序号、规则长度、符号、连接下一结点指针intnum;intcount;charname;structGuiyue*next;};structRelation{//分析表结构体:状态序号、对应符号列、操作类型的对应序号、操作类型、连接下一结点指针intline_States;charrank_Letter;intrelationship;charname;structRelation*next
6、;};structSign{//符号表结构体:自变量名、标识类型、连接下一结点指针charname[20];charkind;structSign*next;};structWord{//单词表结构体:单词名字、标识类型、状态、序号、行号、连接符号表指针、连接下一结点指针charname[20];charmark_name;intstate;intnum;intline;structSign*link;structWord*next;};FILE*fp1,fp2;//文件指针introw=1;//字符行变量intline[10000],Lin
7、[300];//字符行intw_num;//单词所在行、字符数charbuffer[10000];//字符串缓冲区structWord*head,*find;//单词表结构体头指针structRelation*r_head;//分析表结构体头指针structGuiyue*g_head;//规约集结构体头指针structStack*s_head;//栈结构体头指针1、用到的LR文法[Terminator]mv(){}i=;fewabcd,&
8、<>#@+-*/n[NonTerminator]BQSACXYZEHGLIKTF[Starter]B[P
9、recept]00、B->Q01、Q->vm(){A}02、S->C;S03、A->SA04、A->S05、C->C;X06、C->X07、X->YZ08、Y->a
此文档下载收益归作者所有