收藏 分享(赏)

词法分析报告.doc

上传人:精品资料 文档编号:8067512 上传时间:2019-06-07 格式:DOC 页数:13 大小:82.03KB
下载 相关 举报
词法分析报告.doc_第1页
第1页 / 共13页
词法分析报告.doc_第2页
第2页 / 共13页
词法分析报告.doc_第3页
第3页 / 共13页
词法分析报告.doc_第4页
第4页 / 共13页
词法分析报告.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、编译原理实验报告实验一 词法分析程序的设计与实现指导教师: 姓名:学号:班级:一、实验目的基本掌握计算机语言的词法分析程序的开发方法。二、实验内容编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。三、实验要求1根据以下的正规式,编制正规文法,画出状态图;标识符 (|)*十进制整数 0 | (1|2|3|4|5|6|7|8|9) (0|1|2|3|4|5|6|7|8|9)*八进制整数 0 (0|1|2|3|4|5|6|7) (0|1|2|3|4|5|6|7)*十六进制整数 0 (x|X) (0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f) (0|1|2|3|

2、4|5|6|7|8|9|a|b|c|d|e|f)*运算符和分隔符 + - * / 0x3f00 while八测试结果九,思考题1. 词法分析能否采用空格来区分单词?答:不能,因为比如 abc+bcd 中没有空格,但这是三个单词。2. 程序设计中哪些环节影响词法分析的效率?如何提高效率?答:整个程序都由状态转换图而来。由递归方法实现的状态转换图,影响了整个词法分析 器 的 分 析 效 率 , 可 以 考 虑 使 用 栈 来 非 递 归 的 实 现 词 法 分 析 。十 实 验 心 得通 过 词 法 分 析 程 序 的 实 现 , 我 理 解 了 计 算 机 是 怎 么 去 识 别 一 个 个 单

3、 词 的 , 或 者 可 以 说 是 各 种命 令 的 。 这 次 实 验 使 我 对 c 语 言 中 文 件 操 作 更 加 了 解 , 了 解 文 件 指 针 的 运 行 情 况 , 还 了 解 了 编 译原 理 中 有 限 自 动 机 的 概 念 , 根 据 状 态 图 写 程 序 。十 一 源 代 码#include using namespace std;#include #define ASG 1#define ADD 2#define SUB 3#define MUL 4#define DIV 5#define ID 6#define IF 7#define THEN 8#def

4、ine WHILE9#define DO 10#define INT8 11 /八进制#define INT10 12 /十进制#define INT16 13#define SLP 14 /左括号(#define SRP 15 /右括号)#define SEMI 16 /分号;#define LP 17 /左花括号#define RP 18 /右花括号#define INC 19 /+#define DECC 20 /-#define NEQ 21 /不等于#define EQ 22 /等于#define JAE 23 /大于等于#define JA 24 /大于#define JBE 25

5、 /小于等于#define JB 26 /小于struct wordint kind;int value;int fpoint; /文件字符指针int num_token; /一个单词中的字符数量,主要是数字长度char *token;fstream file; /所要读取的文件word handle_identifier(char *ch) /处理标识符(包括关键字)struct word re; /返回值/关键字 /if(strcmp(ch,“if“)=0) re.kind=IF;re.value=0;return re;if(strcmp(ch,“then“)=0)re.kind=THE

6、N;re.value=0;return re;if(strcmp(ch,“while“)=0)re.kind=WHILE;re.value=0;return re;if(strcmp(ch,“do“)=0)re.kind=DO;re.value=0;return re;/标识符 /re.kind=ID;re.value=0;return re;int convert(char ch) /将字符转换成数字int number;switch(ch)case0: number=0;break;case1: number=1;break;case2: number=2;break;case3: num

7、ber=3;break;case4: number=4;break;case5: number=5;break;case6: number=6;break;case7: number=7;break;case8: number=8;break;case9: number=9;break;caseA: number=10;break;casea: number=10;break;caseB: number=11;break;caseb: number=11;break;caseC: number=12;break;casec: number=12;break;caseD: number=13;b

8、reak;cased: number=13;break;caseE: number=14;break;casee: number=14;break;caseF: number=15;break;casef: number=15;break;default: number=-1;break; /非法字符转换成-1return number;word handle_number(char *ch,int TN) /处理无符号整数int i,j;int number; /对应每一位上转换后的数字int dec=0,oct=0,hex=0; /最终的数值,三种进制word re; /返回值if(TN=

9、1) /一位数,只能是十进制number=convert(ch0);if(number=-1|number9) cout=0)for(i=0;i9) ) cout0;j-)numi*=10;dec+=numi;re.kind=INT10;re.value=dec;return re;else if( (TN=3)for(i=1;i7) ) cout0;j-)numi*=8;oct+=numi;re.kind=INT8;re.value=oct;return re;else if( (TN=3)for(i=2;i0;j-)numi*=16;hex+=numi;re.kind=INT16;re.v

10、alue=hex;return re;word scan(char ch)word re; /返回值while(ch= |ch=n) /空格或回车 fpoint+;if(ch=n) fpoint+; / n 包括回车和换行所以再加 1file.get(ch);num_token=0; /每次要分析一个单词的时候,都要重新对单词中的字符计数tokennum_token=ch; /单词开始的一个字符都放到存放单词的数组中tokennum_token+1=0;num_token+;if(isalpha(ch) /第一个字符是字母的单词是标识符file.get(ch);fpoint+;while(is

11、alnum(ch)tokennum_token+1=0;num_token+;file.get(ch);fpoint+;fpoint-;file.seekg(fpoint,ios:beg); /后退re=handle_identifier(token); /处理标识符return re; /返回单词信息(种别和属性值)else if(isdigit(ch) /第一个字符是数字的单词是整数file.get(ch);fpoint+;while(isalnum(ch) tokennum_token+1=0;num_token+;file.get(ch);fpoint+;fpoint-;file.se

12、ekg(fpoint,ios:beg); /后退re=handle_number(token,num_token); return re;elseswitch(ch)case : /赋值符号file.get(ch);fpoint+;if(ch =) /以“:”开头的单词只能是赋值符号,否则出错re.kind=ASG;re.value=0;return re;else cout:file.get(ch);fpoint+;if(ch=)re.kind=JAE;re.value=0;return re;elsefpoint-;file.seekg(fpoint,ios:beg); /后退re.kind=JA;re.value=0;return re;break;case“endl;file.close();system(“pause“);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报