您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 编译原理C语言编译器的设计与实现
实验题目C语言编译器的设计与实现小组合作否姓名班级11级专升本学号一、实验目的:1、了解语法编译器的内部工作原理,通过在本次实验中运用一定的编程技巧,掌握对表达式进行处理的一种方法。2、加深对语法编译器工作过程的理解;加强对递归下降法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二、实验环境:需要一台拥有WINDOWSXP的计算机。三、实验步骤:我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:(1)词法分析部分(2)语法分析处理及四元式生成部分(3)输出显示部分编译程序中涉及到的数据结构说明如下:charch='\0';/*从字符缓冲区中读取当前字符*/intcount=0;/*词法分析结果缓冲区计数器*/staticcharspelling[10]={};/*存放识别的字*/staticcharline[81]={};/*一行字符缓冲区(最多80个字符)*/char*pline;/*字符缓冲区指针*/staticcharntab1[100][10];/*变量名表:共100项,每项长度为10*/structntab{inttc;/*真值*/intfc;/*假值*/}ntab2[200];/*在布尔表达式)中保存有关布尔变量的真、假值*/intlabel=0;/*指向ntab2的指针*/structrewords{charsp[10];intsy;};/*匹配表的结构,用来与输入缓冲区中的单词进行匹配*/structrewordsrewords[8]={{if,syl_if},{else,syl_else},{while,syl_while},{{,syl_begin},{},syl_end},{&&,op_and},{||,op_or},{!,op_not}};/*匹配表初始化,大小为8*/structaa{intsyl;/*存放名字*/intpos;/*存放名字所对应的值*/}buf[100],/*词法分析结果缓冲区*/n,/*读取二元式的当前字符*/n1,/*当前表达式中的字符*/E,/*非终结符*/sstack[100],/*算术或布尔表达式加工处理使用的符号栈*/ibuf[100],/*算术或布尔表达式使用的缓冲区*/stack[1000];/*语法分析加工处理使用的符号栈*/structaaoth;/*四元式中空白位置*/structfourexp{charop[10];structaaarg1;structaaarg2;intresult;}fexp[200];/*四元式的结构定义*/intssp=0;/*指向sstack栈指针*/structaa*pbuf=buf;/*指向词法分析缓冲区的指针*/intnlength=0;/*词法分析中记录单词的长度*/inttt1=0;/*变量名表指针*/FILE*cfile;/*源程序文件,~为结束符*/intlnum=0;/*源程序行数记数*/intsign=0;/*sign=0为赋值语句;sign=1为while语句;sign=3为if语句*/intnewt=0;/*临时变量计数器*/intnxq=100;/*nxq总是指向下一个将要形成的四元式地址,每次执行gen()时,地址自动增1*/intlr;/*扫描LR分析表1过程中保存的当前状态值*/intlr1;/*扫描LR分析表2或表3所保存的当前状态值*/intsp=0;/*查找LR分析表时状态栈的栈顶指针*/intstack1[100];/*状态栈1定义*/intsp1=0;/*状态栈1的栈顶指针*/intnum=0;/*算术或布尔表达式缓冲区指针*/structll{intnxq1;/*记录下一条四元式的地址*/inttc1;/*真值链*/intfc1;/*假值链*/}labelmark[10];/*记录语句嵌套层次的数组,即记录嵌套中每层的布尔表达式e的首地址*/intlabeltemp[10];/*记录语句嵌套层次的数组,即记录每一层else之前的四元式地址*/intpointmark=-1;/*labelmark数组指针*/intpointtemp=-1;/*labeltemp数组指针*/五.编译程序运行测试测试source.dat得源程序如下:while(ab){if(m=n)a=a+1;elsewhile(k==h)x=x+2;}#~经编译程序运行后得到的输出结果如下:1)词法分析得出的相应的名字的号码和他的值2)列举程序中所有的变量3)状态栈的移进-归约过程1.4)最后产生的四元式中间代码一、实验总结:通过此次实验,让我知道了词法分析的功能是输出把它组织成单个程序,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;对语法规则有明确的定义;编写的分析程序能够进行正确的语法分析;对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。通过该实验的操作,我了解编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课。为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的PASCAL语言(EL语言)的编译程序,提高学生设计程序的能力,加深对编译理论知识的理解与应用。通过该实验,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。六、指导教师评语及成绩:实验过程与结果完整,实验分析得当。教师签名成绩批阅日期
本文标题:编译原理C语言编译器的设计与实现
链接地址:https://www.777doc.com/doc-2141062 .html