编译原理C语言编译器的设计与实现.doc_第1页
编译原理C语言编译器的设计与实现.doc_第2页
编译原理C语言编译器的设计与实现.doc_第3页
编译原理C语言编译器的设计与实现.doc_第4页
编译原理C语言编译器的设计与实现.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验题目C语言编译器的设计与实现小组合作否 姓 名班 级11级专升本学 号一、实验目的:1、了解语法编译器的内部工作原理,通过在本次实验中运用一定的编程技巧,掌握对表达式进行处理的一种方法。 2、加深对语法编译器工作过程的理解;加强对递归下降法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二、实验环境:需要一台拥有WINDOWS XP的计算机。三、实验步骤: 我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:(1) 词法分析部分(2) 语法分析处理及四元式生成部分 (3) 输出显示部分编译程序中涉及到的数据结构说明如下:char ch=0; /*从字符缓冲区中读取当前字符*/int count=0; /*词法分析结果缓冲区计数器*/static char spelling10= ; /*存放识别的字*/static char line81= ; /*一行字符缓冲区( 最多 80 个字符)*/char *pline; /*字符缓冲区指针*/static char ntab110010; /*变量名表:共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, &,op_and, |,op_or, !,op_not; /*匹配表初始化,大小为8*/struct aa int syl; /*存放名字*/ int pos; /*存放名字所对应的值*/ buf100, /*词法分析结果缓冲区*/ n, /*读取二元式的当前字符*/ n1, /*当前表达式中的字符*/ E, /*非终结符*/ sstack100, /*算术或布尔表达式加工处理使用的符号栈*/ ibuf100, /*算术或布尔表达式使用的缓冲区*/ stack1000; /*语法分析加工处理使用的符号栈*/struct aa oth; /*四元式中空白位置*/struct fourexp char op10; struct aa arg1; struct aa arg2; int result; 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 总是指向下一个将要形成的四元式地址,每次执行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; /*记录语句嵌套层次的数组,即记录嵌套中每层的布尔表达式e的首地址*/int labeltemp10; /*记录语句嵌套层次的数组,即记录每一层else之前的四元式地址*/int pointmark=-1; /*labelmark数组指针*/int pointtemp=-1; /*labeltemp数组指针*/五编译程序运行测试测试source.dat得源程序如下: while (ab) if (m=n) a=a+1; else while (k=h) x=x+2;#经编译程序运行后得到的输出结果如下:1)词法分析得出的相应的名字的号码和他的值2)列举程序中所有的变量3)状态栈的移进-归约过程 1.4)最后产生的四元式中间代码一、 实验总结:通过此次实验,让我知道了词法分析的功能是输出把它组织成单个程序,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;对语法规则有明确的定义;编写的分析程序能够进行正确的语法分析;对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。通过该实验的操作,我了解编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课。为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的PASCAL语言(EL语言)的编译程序,提高学生设计程序的能力,加深对编译理论知识的理解与应用。通过该实验,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论