编译原理实验报告(C语言).doc_第1页
编译原理实验报告(C语言).doc_第2页
编译原理实验报告(C语言).doc_第3页
编译原理实验报告(C语言).doc_第4页
编译原理实验报告(C语言).doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

编译原理实验报告实验项目1:词法分析程序实验一、实验的目的与任务:编译原理是计算机类专业特别是计算机软件专业的一门重要专业课。设置该课程的目的在于系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现方法,使学生通过学习既掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。编译原理是一门理论性和实践性都比较强的课程。进行上机实验的目的是使学生通过完成上机实验题目加深对课堂教学内容的理解。同时培养学生实际动手能力。编译实验由三个独立实验组成,按照由浅入深进行排列,希望通过本实验使学生更深学习并理解编译的主要过程和相关方法。词法分析的目的是将输入的源程序进行划分,给出基本符号(token)的序列,并掠过注解和空格等分隔符号。基本符号是与输入的语言定义的词法所规定的终结符。本实验要求学生编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续进行)二、题目分析1.这里采用C语言编写的源程序作为词法分析程序的输入数据,输入数据保存在“in.txt”记事本中,将分析结果存在“out.txt”记事本中。词法分析器的源代码使用C语言编写。2. 下面就词法分析程序中的主要变量进行说明:主函数main(): 打开要分析的C语言源程序,若不能正确打开,则报错。 先从源程序中读入一个字符ch,然后进行如下处理: 1、cp消耗掉空格,制表符,换行符后,cp数组复位,开始检测cp; 2、数字检测,对照符号表输出,若匹配成功,则返回序号; 3、字符串检测, 对照符号表输出,若匹配成功,则返回序号; 4、基本保留字检测,对照符号表输出,若匹配成功,则返回序号;5、运算符检测,对照符号表输出,若匹配成功,则返回序号;注意这里碰到/时,要判断后面是否跟着是注释语句。是则跳过,不是则输出运算符。6、分隔符(界符)检测,对照符号表输出,若匹配成功,则返回序号;7、排错处理; 结束。3.以下给定一个C语言的符号表的设计和结构:C语言基本保留字表main1if12sizeof23void2else13return24int3switch14float4case15double5for16char6do17struct7while18const8goto19extern9continue20常数28register10break21自定义字符29static11default22运算符分隔符+31;41-32:42*33,43/344435453747=38(48=39)49!=40其他运算符274.程序源代码(C语言)#include #define MAX 500 /*标识符的最大长度*/main() FILE *in,*out; char wordMAX; /*存储标识符*/ char cp; /*存储当前读入字符*/ int i; if(in=fopen(in.txt,r)=NULL) printf(不能打开文档in.txt,请检查根目录下是否存在该文档n); exit(0); else printf(成功打开文档in.txtn); if(out=fopen(out.txt,w)=NULL) printf(不能打开文档out.txt,请检查根目录下是否存在该文档n); exit(0); else printf(成功打开文档out.txtn); cp=fgetc(in); while(cp!=EOF) /*消耗掉空格,制表符,换行符*/ while(cp= |cp=t|cp=n) cp=fgetc(in); /*cp数组复位*/ i=0; /*数字检测*/ if(cp=0&cp=0&cp|cp=&cp!=a&cp=A&cp=a&cp=0&cp=A&cp|cp=&cp!=&cp!=!&cp!=;&cp!=:&cp!=,&cp!=&cp!=&cp!=&cp!=&cp!=(&cp!=) wordi+=cp; cp=fgetc(in); wordi=0; fprintf(out,%s%c%s%c%sn,error: ,word,不是合法的标识符); continue; /*运算符*/ if(cp=+) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,31,); cp=fgetc(in); continue; if(cp=-) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,32,); cp=fgetc(in); continue; if(cp=*) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,33,); cp=fgetc(in); continue; if(cp=/)/判断是否是注释,若是要略过; wordi+=cp; cp=fgetc(in); if(cp=*)word-i=0;while(cp!=/)cp=fgetc(in);cp=fgetc(in); else fprintf(out,%c%c%s%c,%d%cn,(,word,34,); wordi=0; continue; if(cp=) wordi+=cp; cp=fgetc(in); if(cp=) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,39,); cp=fgetc(in); else wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,27,); continue; if(cp=) wordi+=cp; cp=fgetc(in); if(cp=) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,38,); cp=fgetc(in); else wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,37,); continue; if(cp=!) wordi+=cp; cp=fgetc(in); if(cp=) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,40,); cp=fgetc(in); else wordi=0; fprintf(out,%s%c%s%c%sn,error: ,word,不是合法的标识符); continue; /*界符*/ if(cp=;) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,41,); cp=fgetc(in); continue; if(cp=:) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,42,); cp=fgetc(in); continue; if(cp=,) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,43,); cp=fgetc(in); continue; if(cp=) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,44,); cp=fgetc(in); continue; if(cp=) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,45,); cp=fgetc(in); continue; if(cp=) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,46,); cp=fgetc(in); continue; if(cp=) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,47,); cp=fgetc(in); continue; if(cp=() wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,48,); cp=fgetc(in); continue; if(cp=) wordi+=cp; wordi=0; fprintf(out,%c%c%s%c,%d%cn,(,word,49,); cp=fgetc(in); continue; /*不能识别的字符*/ wordi+=cp; cp=fgetc(in); wordi=0; fprintf(out,%s%c%s%c%sn,error: ,word,不是合法的标识符); fclose(in); fclose(out); printf(成功对in.txt文档内代码进行词法分析,分析结果保存在out.txt文档中n); return 0;6.程序调试结果,采用c-free编译器编译输入与输出数据的结果显示:(三组)第一组:(含有注释,空格,制表符的可跳过)第二组:第三组:7、实验总结 本次实验让我对词法分析的原理有了更加深入的了解,在刚开始入手做实验时碰到了不少困难,比如词法分析器的设计流程,该采用哪种编译语言来实现等,后来我认为自己对C语言了解较多,便决定采用C来实现词法分析的过程。首先我先将书本知识和实验要求结合起

温馨提示

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

评论

0/150

提交评论