




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实 验 报 告课程名称 编译原理 实验项目 设计与实现一个词法编译器 班级 姓名 学号 实验名称设计与实现一个词法编译器实验地点实验时间1. 实验目的:结合讲授内容,设计与实现一个简单词法编译器,通过本实验加深对词法分析程序的功能及实现方法的理解。2. 实验内容:设计与实现一个简单词法编译器。具体内容是对输入的语句进行分析,分解出关键字3. 实验要求:(1)掌握和实现词法分析器的功能:输入源程序,输出单词符号(二元式表示)。二元式(单词流)源程序(字符流)词法分析器 输入 输出(2)单词符号的分类:关键字:是由程序语言定义的具有固定意义的标识符。标识符:用来表示各种名字,如变量等。常数:常数的
2、类型有整型,实型等。运算符:算术运算符,关系运算符,逻辑运算符。界限符:逗号,分号等。(3)实验步骤:1、确定词法分析器的接口关系;2、设计算法参考教材图2.5。4. 实验准备:1:pc机一台;2:VC+编译器5. 实验过程:1,分析问题输入源程序,输出单词符号(二元式表示)。二元式(单词流)源程序(字符流)词法分析器 输入 输出2,算法步骤: :将文件中每行读入的字符串存入数组buffer100,不跳过空格; :利用构造函数传递数组,和每行的长度length; :调用成员函数scan,i=0, while(i<length)开始检测buffer的字符; :if(isletter(),接
3、收完成后比较是否为关键字,不是则将其存入标示符id5010中 ; :else if(isdigit(),接收完成后存入cst5010中; :else if 为界符,比较符,运算符,输出对应的二元编码; :接受完毕,输出id5010-标示符,cst5010-常数,列表;3:程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>#define _KEY_WORD_END "#"/结束标志typedef structint typenum;/种别
4、码char* word;/单词WORD;char input1001;char token100=""int p_input;/输入缓冲区指针int p_token;/单词缓冲区指针char *rwtab="begin","if","then","while","do","end",_KEY_WORD_END;/关键字列表,可扩充char ch;/获取一个字符char m_ge
5、tchar()/在缓冲区获取一个字符ch = inputp_input;p_input +;return ch;void getbc()/去除空白符号while(ch =' '|ch = 'n')ch = inputp_input;p_input +;int letter()/判断字符是不是字母if(ch >='a'&&ch<='z' | ch&
6、gt;='A'&&ch<='Z')return 1;return 0;int digit()/判断字符是不是数字if(ch>='0'&&ch<='9')return 1;return 0;void concat()/组装单词tokenp_token = ch;p_token +;tokenp_token = '0'void retract()/缓冲
7、区回退一个字符p_input -;int reserve()/与关键字表对比,查看是否是关键字int i =0;while(strcmp(rwtabi,_KEY_WORD_END)if(!strcmp(rwtabi,token)return i+1;i +;return 10;WORD* scaner()/获取一个单词,并判断它的特别码WORD * myword = new WORD;myword->typenum = 10;p_token
8、 = 0;/单词指针初始化m_getchar();/获取一个字符getbc();/去除空白if(letter()/判断是否为字母while(letter()|digit()concat();/单词组装m_getchar();/获取字符retract();myword->word = token;/存入输出结构体myword->typenum = reserve();/判断单词的特别码,并存入结构体return myword;else if(digit()while(digit()concat();m_g
9、etchar();retract();myword->word = token;/存入输出结构体myword->typenum = 11;return myword;else switch(ch)case ':':m_getchar();if(ch = '=')myword->typenum = 18;myword->word = ":="elseretract();myword->t
10、ypenum = 17;myword->word = ":"return myword;case '+':myword->typenum = 13;myword->word = "+"return myword;case '-':myword->typenum = 14;myword->word = "-"retur
11、n myword;case '*':myword->typenum = 15;myword->word = "*"return myword;case '/':myword->typenum = 16;myword->word = "/"return myword;case '<':m_getchar();if(ch =
12、;'=')myword->typenum = 22;myword->word ="<="else if(ch = '>')myword->typenum = 21;myword->word ="<>"elseretract();myword->typenum = 20;myword->word = "<"ret
13、urn myword;case '>':m_getchar();if(ch = '=')myword->typenum = 24;myword->word =">="elseretract();myword->typenum = 23;myword->word = ">"return myword;case '=':myword->
14、typenum = 25;myword->word ="="return myword;case '':myword->typenum = 26;myword->word =""return myword;case '(':myword->typenum = 27;myword->word ="("return myword;case&
15、#160;')':myword->typenum = 28;myword->word =")"return myword;case '0':/字符串结束标志myword->typenum = 1000;myword->word ="OVER"return myword;default:/不符合的词法myword->typenum = -1;myword->word =&
16、quot;ERROR"return myword;int main()WORD* oneword = new WORD;int over = 1;printf("Enter Your words(end with #):n");while(scanf("%#s",input),strcmp(input,"end the program")/读入源程序字符串到缓冲区getchar();p_input = 0;/输入缓冲区指针初始化while(over !=1000)/单词不是0oneword =scaner();over = oneword->typenum;if(over<1000)/0不用输出printf("(%d,%s)",over,oneword->word);over=1;printf("(0,#)");printf("nEnter Your words(end w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康板块活动方案
- 健康理财活动方案
- 健康骨骼活动方案
- 健身培训春季活动方案
- 健身房小组活动方案
- 健身政府活动方案
- 健身粉丝活动方案
- 2025年网络与信息安全行业职业技能竞赛试题
- 简短财务个人工作总结(9篇)
- 童话故事读后感15篇
- 2025年普通高等学校招生全国统一考试数学试题(全国二卷)(有解析)
- 2025年安庆宿松县县属国有企业招聘57人笔试参考题库附带答案详解析集合
- 消防考试基础试题及答案
- 临时用电施工方案技术交底
- 儿童意外异物吞食课件
- 富民银行笔试题库及答案
- 2025年高考第二次模拟考试数学(新高考Ⅱ卷)(参考答案)
- 低血糖的相关试题及答案
- 2025年下半年广东省中山市东凤镇人民政府雇员招聘9人易考易错模拟试题(共500题)试卷后附参考答案
- 2025-2030中国花店行业市场发展分析及发展趋势与投资前景研究报告
- ai训练师笔试题及答案
评论
0/150
提交评论