编译原理课程实验.doc

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课程实验

学生学号 0121210680225 实验课成绩 武汉理工大学 学 生 实 验 报 告 书 实验课程名称 《编译原理》 开 课 学 院 计算机科学与技术学院 指导老师姓名 饶文碧 学 生 姓 名 李安福1201 2014 — 2015 学年 第 一 学期 实验课程名称: 编译原理 实验项目名称 词法分析 实验成绩 实验者 李安福 Sy1201 组别 同组者 郭烨华 实验日期 年 月 日 第一部分:实验分析与设计(可加页) 实验内容描述(问题域描述) 实验目的:? 根据PL/0语言的文法规范,编写PL/0语言的词法分析程序。 ? 通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。 ? 掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的法。 ? 掌握词法分析的实现方法。 ? 上机调试编出的词法分析程序。 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) 分析:   对于一个具体源程序而言,在扫描字符串时识别出一个单词,若这个单词的类型是K、I、C或P中之一,那么就以单词的二元式形式输出.每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直到整个源程序全部扫描完毕,从而形成相应的单词串.   各类单词的二元式表述均具有相同的结构与长度,形式如下: (单词种别t,单词自身的值i) t是单词种别,而单词种别共分为K、I、C、P四类且每类对应一张表格.因此,t实际上就是一个指向这四类中某一类对应表格的指针.i则为指向该类表格中一个特定项目的指针.   所以整个的词法分析过程就是从源程序中获得一个个的单词符号,将这些符号分别填入四张类表中,并且有一个二元式序列构成一个索引,这个索引为以后的语法分析提供处理上的方便. 1 2 3 4 5 6 7 8 9 10 for while DO ELSE  IF??? STATIC INT SIZEOF BREAK CONTINUE 内部地址?? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 界 符? ? + - * / = = != == = ( ) , : ; { } ? 单词符号 类别编码 标识符 1 常数 2 保留字 3 + 4 - 5 * 6 / 7 8 = 9 10 = 11 != 12 == 13 = 14 ( 15 ) 16 , 17 : 18 ; 19 { 20 } 21 3.实验源代码如下: #include stdio.h #include string.h #include ctype.h #include stdlib.h #include assert.h #define LENGTH1 10 //定义保留字的大小 FILE * fp=NULL; //输出流指针 FILE * fw=NULL; //输入流指针 char character; //字符 char token[16]; //字符数组,用来存放已读入的字符序列 //编码表 char* CODE[]={identifier/*标识符*/,constant/*常数*/,keyword/*保留字*/,+,-, *,/,,=,,=,!=,==,=,(,),,,:,;,{,}}; //保留字表 char *k[]={for,while,do,else,if,static,int,sizeof,break,continue}; //标识符结构体 typedef struct { char * I[256]; //标识符数组 int len;//标识符数量 } identifier; //常量结构体 typedef struct { int cont[300];//存放常量的数组 int len;//常量的数目 } constnumber; //读入一个字符,从输入流中读入一个字符到变量character中。 void getNextChar(FILE *ifp) { if((character=getc(ifp))==EOF) exit(1); } //读入非空白字符,检查变量character中的字符是否为空白字符或回车或换行符。若是, //则调用getNextChar()读入下一个字符,直到character中的字符满足条件. void getnbc(FILE *ifp) {

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档