编译原理实验简单词法分析含源代码和实验结果.doc

编译原理实验简单词法分析含源代码和实验结果.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
附录一 实验报告样式 《编译原理》实验报告 实验2 简单词法分析 姓名 陈婷婷 学号 1009050121 班级 计科1001班 时间: 2012/4/5 地点:文波 同 组 人:无 指导教师:朱少林 实验目的 通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法掌握词法分析的实现方法上机调试编出的词法分析程序。 ⑴ 掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 ⑵ 掌握词法分析的实现方法。 ⑶ 上机调试编出的词法分析程序。C_minus。该词法分析器要求至少能够识别C_minus中的以下几类单词: a. 关键字:else if int return void while共6个,所有的关键字都是保留字,并且必须是小写; b. 标识符:识别与C语言词法规定相一致的标识符,通过下列正则表达式定义:ID = letter (letter | digit)*; c. 常数:NUM=(+ | - |ε)digit digit*(.digit digit* |ε)(e(+ | - |ε) digit digit* |ε),letter = a|..|z|A|..|Z|,digit = 0|..|9,包括整数,如123, -123, +123等;小数,如123.45, +123.45, -123.45;科学计数法表示的常数,如+1.23e3,-2.3e-9; d. 专用符号:+ - * / = = == != = ; , ( ) [ ] { } /* */; 实验环境 软件:VC++6.0 实验前准备 方案设计: 准备模拟数据:本实验中使用 “测试文件.c” ②程序思想: 该实验要识别关键字、标识符、常数、专用符号(分界符、算术运算符和关系运算符)。 对于关键字本实验主要识别10个(break、do、else float if int for switch main char) ,使用的数据结构为: struct Key//用于关键字和标识符及常数,由于常数有科学计数法的表示,所以该实验中把常数当做字符串进行检测输出 { char name[20]; int i; int t; }; Key keyword[10];//存放10个关键字 然后在函数void initial()对Key keyword[10]进行初始化。函数int search_key(char *teststring, FILE *f)用来将识别到的以字母开头的字符串teststring与定义的关键字一一比较,如果是关键字则把它写入文件f中,否则在检验是否是标识符;如果是关键字则返回1,否则返回0. 对与标识符和常数,使用的数据结构是一样的,这是因为识别一个标识符和识别一个常数都是要读入多个字符才能识别一个完整的,而且标识符表和常数表都是在识别过程中建立的,都所以用到的数据结构为: struct Key//用于关键字和标识符及常数 { char name[20]; int i; int t; }; struct key_infor//记录标识符表,常数表的相关信息 { struct Key *head; int key_length; }; 识别到一个以字母开头的符号串后如果不是关键字,就调用void search_table(char *teststring, key_infor *p, FILE *f)与已经识别到的标识符一一比较,如果是新的则赋予新的i值并打印输出到屏幕并且写入f中(只要是标志符就写入文件f中)。Main()中将识别到的标识符(不重复)写入另外的文件中。 search_table中关键部分如下: while( jistrcmp(teststring,point[j].name)) { j++; }//与已有的标识符一一比较 if(j==i)//说明是新的标识符 { strcpy(point[j].name,teststring); p-key_length++; point[j].i=j; point[j].t=6; } 识别到一个完整的常数则进行与标识符相似的处理,void search_number(char *tests

文档评论(0)

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

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

1亿VIP精品文档

相关文档