编译原理词法分析器实验报告最终版.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学院(系)名称:计算机工程系 姓名 学号 专业 班级 实验项目 实验一:词法分析 课程名称 编译原理 课程代码 0310243 实验时间 2013年 4月28 日 第 1、2 节 2013年 5月 7 日 第1 、2 节 实验地点 第一教学楼1508 批改意见 成绩 教师签字: 实验内容: 实现标准C语言词法分析器 实验目的: 1.掌握程序设计语言词法分析的设计方法; 2.掌握DFA的设计与使用方法; 3.掌握正规式到有限自动机的构造方法; 实验要求: 1.单词种别编码要求 基本字、运算符、界符:一符一种; 标识符:统一为一种; 常量:按类型编码; 2.词法分析工作过程中建立符号表、常量表,并以文本文件形式输出; 3.词法分析的最后结果以文本文件形式输出; 4.完成对所设计词法分析器的功能测试,并给出测试数据和实验结果; 5.为增加程序可读性,请在程序中进行适当注释说明; 6.整理上机步骤,总结经验和体会; 7.认真完成并按时提交实验报告。 实验步骤: 1.基本思想:从源程序中依次读入字符并解析,与关键字、运算符、结束符进行比较,得出其中的关键字,并将它存入到数组中去。 2.程序源代码: #includestdio.h #includecstring #includestdlib.h #define MaxSize1 17//关键字的个数 #define MaxSize2 20//运算符的个数 #define MaxSize3 4//结束符的个数 //数据结构 struct TNode { char value[20]; //存放标识符的值 int number; //存放标识符的种别码 char description[20];//描述 }KeyWords[MaxSize1],Operation[MaxSize2],EndOperation[MaxSize3]; //存放关键字的数组 char *WordsBuff[MaxSize1]={const,long,float,double,void,main,if,else,then,break,int,char,include,for,while,printf,scanf}; //存放运算符的数组 char *OperationBuff[MaxSize2]={+,-,*,/,+=,-=,*=,++,--,,=,,=,,=,(,),#,{,}}; char EndOperationBuff[MaxSize3]={ ,;,\n,\t}; //存放词法分析程序输出的结果 TNode Table1[500]; TNode Variable[100];//标识符表 TNode Const[100]; //关键字数组初始化 void inputKeyWords(char * buff[],int size) { //关键字编码从1-size for(int i=0;isize;i++) { strcpy(KeyWords[i].value,buff[i]); KeyWords[i].number=i+1; strcpy(KeyWords[i].description,关键字); } } //运算符数组初始化 void inputOperation(char * buff[],int size) { //运算符编码从50-(50+size) for(int i=0;isize;i++) { strcpy(Operation[i].value,buff[i]); Operation[i].number=i+50; strcpy(Operation[i].description,运算符); } } //结束符数组初始化 void inputEndOperation(char buff[],int size) { //结束符编码从100-(100+size); for(int i=0;isize;i++) { EndOperation[i].value[0]=buff[i]; EndOperation[i].value[1]=\0; EndOperation[i].number=i+100; strcpy(EndOperation[i].description,结束符); } } 第 PAGE 12页 共 NUMPAGES 12页 //输出数据结构数组中的信息 void outputInfo(TNode a[],int size) { for(int i=0;isize;i++) { printf((%d,a[i].n

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档