编译原理 c语言编译器的设计与实现

上传人:kms****20 文档编号:39987171 上传时间:2018-05-21 格式:DOC 页数:9 大小:93KB
返回 下载 相关 举报
编译原理 c语言编译器的设计与实现_第1页
第1页 / 共9页
编译原理 c语言编译器的设计与实现_第2页
第2页 / 共9页
编译原理 c语言编译器的设计与实现_第3页
第3页 / 共9页
编译原理 c语言编译器的设计与实现_第4页
第4页 / 共9页
编译原理 c语言编译器的设计与实现_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《编译原理 c语言编译器的设计与实现》由会员分享,可在线阅读,更多相关《编译原理 c语言编译器的设计与实现(9页珍藏版)》请在金锄头文库上搜索。

1、实验题目实验题目C 语言编译器的设计与实现小组合作小组合作否 姓姓 名名班班 级级11 级专升本学学 号号一、实验目的:一、实验目的:1、了解语法编译器的内部工作原理,通过在本次实验中运用一定的编程技巧,掌握对表达式进行处理的一种方法。 2、加深对语法编译器工作过程的理解;加强对递归下降法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二、实验环境:二、实验环境:需要一台拥有WINDOWS XP的计算机。三、实验步骤:三、实验步骤: 我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。

2、编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:(1) 词法分析部分(2) 语法分析处理及四元式生成部分 (3) 输出显示部分编译程序中涉及到的数据结构说明如下:char ch=0; /*从字符缓冲区中读取当前字符*/int count=0; /*词法分析结果缓冲区计数器*/static char spelling10=“ “; /*存放识别的字*/static char line81=“ “; /*一行字符缓冲区( 最多 80 个字符)*/char *pline; /*字符缓冲区指针*/static char ntab110

3、010; /*变量名表:共 100 项,每项长度为 10*/struct ntab int tc; /*真值*/int fc; /*假值*/ntab2200; /*在布尔表达式 ) 中保存有关布尔变量的真、假值*/int label=0; /*指向 ntab2 的指针*/struct rewords char sp10;int sy; /*匹配表的结构,用来与输入缓冲区中的单词进行匹配*/struct rewords rewords8=“if“,syl_if,“else“,syl_else,“while“,syl_while,“,syl_begin,“,syl_end,“ /*匹配表初始化,大

4、小为 8*/struct aaint syl; /*存放名字*/int pos; /*存放名字所对应的值*/buf100, /*词法分析结果缓冲区*/n, /*读取二元式的当前字符*/n1, /*当前表达式中的字符*/E, /*非终结符*/sstack100, /*算术或布尔表达式加工处理使用的符号栈*/ibuf100, /*算术或布尔表达式使用的缓冲区*/stack1000; /*语法分析加工处理使用的符号栈*/struct aa oth; /*四元式中空白位置*/struct fourexp char op10;struct aa arg1;struct aa arg2;int resul

5、t;fexp200; /*四元式的结构定义*/int ssp=0; /*指向 sstack 栈指针*/struct aa *pbuf=buf; /*指向词法分析缓冲区的指针*/int nlength=0; /*词法分析中记录单词的长度*/int tt1=0; /*变量名表指针*/FILE *cfile; /*源程序文件,为结束符*/int lnum=0; /*源程序行数记数*/int sign=0; /*sign=0 为赋值语句;sign=1 为 while 语句;sign=3 为 if 语句*/int newt=0; /*临时变量计数器*/int nxq=100; /* nxq 总是指向下一

6、个将要形成的四元式地址,每次执行 gen()时,地址自动增 1*/int lr; /*扫描 LR 分析表 1 过程中保存的当前状态值*/int lr1; /*扫描 LR 分析表 2 或表 3 所保存的当前状态值*/int sp=0; /*查找 LR 分析表时状态栈的栈顶指针*/int stack1100; /*状态栈 1 定义*/int sp1=0; /*状态栈 1 的栈顶指针*/int num=0; /*算术或布尔表达式缓冲区指针*/struct ll int nxq1; /*记录下一条四元式的地址*/int tc1; /*真值链*/int fc1; /*假值链*/labelmark10;

7、/*记录语句嵌套层次的数组,即记录嵌套中每层的布尔表达式 e 的首地址*/int labeltemp10; /*记录语句嵌套层次的数组,即记录每一层 else 之前的四元式地址*/int pointmark=-1; /*labelmark 数组指针*/int pointtemp=-1; /*labeltemp 数组指针*/五编译程序运行测试五编译程序运行测试测试 source.dat 得源程序如下: while (ab) if (m=n) a=a+1;elsewhile (k=h) x=x+2;#经编译程序运行后得到的输出结果如下:1)词法分析得出的相应的名字的号码和他的值2)列举程序中所有的

8、变量3)状态栈的移进-归约过程 1.4)最后产生的四元式中间代码一、一、实验总结:实验总结:通过此次实验,让我知道了词法分析的功能是输出把它组织成单个程序,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;对语法规则有明确的定义;编写的分析程序能够进行正确的语法分析;对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。通过该实验的操作,我了解编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分

9、重要的地位,是计算机专业学生的一门主修课。为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的 PASCAL 语言(EL 语言)的编译程序,提高学生设计程序的能力,加深对编译理论知识的理解与应用。通过该实验,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解, 。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。六、指导教师评语及成绩:六、指导教师评语及成绩:实验过程与结果完整,实验分析得当。实验过程与结果完整,实验分析得当。教师签名教师签名成绩成绩批阅日期批阅日期

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号