




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上词法分析实验报告 学院:计算机科学与技术 班级:软件工程1203班 学号:1 2 0 8 0 1 0 3 0 3 姓名: 王 青 枝词法分析实验报告一、 题目 词法分析二、实验目的1) 加深对词法分析器的工作过程的理解;2) 加强对词法分析方法的掌握;3) 能够采用一种编程语言实现简单的词法分析程序;4) 能够使用自己编写的分析程序对简单的程序段进行词法分析。二、 单词 保留字 运算符 界符(表格)1) 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。2) 依次输出各个单词的内部单词种别及单词符号自
2、身值。3) 单词的文法表示:<常量定义>:=<标识符>=<无符号整数><标识符>:=<字母>=<字母>|<数字><加法运算符>:=+|-<乘法运算符>:=*|/<关系运算符>:=|#|<|<=|>|>=<字母>:=a|b|X|Y|Z<数字>:=0|1|2|8|94) 要求:保留字: 单词种别码为1。包括if、int、for、while、do、return、break、continue;标识符: 单词种别码为2。常
3、160; 数: 单词种别码为3。(常数为无符号整形数)运算符: 单词种别码为4。包括+、-、*、/、=、>、<、>=、<=、!= ;分隔符: 单词种别码为5。包括,、;、(、);四、实验要求1实验环境要求 在C或C+运行环境中执行2. 对单词的构词规则有明确的定义;3. 编写的分析程序能够正确识别源程序中的单词符号;4. 识别出的单词以<种别码,值>的形式保存在符号表中;5. 对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成整个源程序的词法分析;五、词法分析总体架构 大的流程图 在词法分析中,先以只读方式读取一个文
4、件,自文件头开始扫描文本,滤去开头的空格、回车符、换行符等!读取的字符送入缓冲区。扫描第一个字符,看匹配的类型,并进行相应的类型分析,满足判断类型时,输出其种别码和值。判断时要注意保留字和识别符之间的不同,单目运算符和双目运算符之间的不同。因此可用指针进行处理。还必须熟悉字符串函数的使用。并要对非法字符作出错误提示。文本扫描结束要判断词法分析是否成功。最后是关闭文件,释放指针。其中:常量、变量、数据结构的定义: 本程序中用keyword数组来定义保留字if、int、for、while、do、return、break、continue;用yunsuan数组来定义运算符+、-、*、/、=、>
5、 、<、>=、<=、!=;用fenge数组来定义分隔符包括:,、;、(、)1- 表示保留字 2-表示标识符 3-表示常数 4-表示运算符 5-表示分隔符Output是输出函数。函数使用:字符函数:int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字
6、('0'-'9')返回非0值,否则返回0int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0字符串函数:strcmp(const char *s1,const char *s2)比较字符串s1与s2的大小,并返回s1-s2strchr(const char *string, int c)函数就是在字符串中搜索指定字符。第一个形参就是要搜索的字符串,第二个是被搜索的字符。如果找到了该字符就返回该字符第一次出现的内存地址。如果没有找到就返回NULL(也就是0)。fseek(文件类型指
7、针,位移量,起始点);起始点指文件开头处,文件当前位置,文件尾,分别用0,1,2来表示 fwrite()读取字符:读出单词的每一个字符,组成单词,分析类型。读取单词前后的多余空白要滤去。程序大的流程图如下图:6、 细化流程图:七、调试过程 抓图,输入,输出,结果(1)程序无错误,正确运行时如下图:(2)调试的时候需要在文件位置建一个文本文档wqz.txt文件,内容如下:#include <stdio.h>void main () int value = 0; while (value <= 100) printf("%dn", value); value+
8、; 输入文件的名字,运行结果如下图: 文件名错误时:文件名正确时,如下图所示:(3)词法分析结束,退出本程序八、总结 通过这次实验,我更深刻的理解了词法分析的原理,词法分析是编译程序的基础,是为学习语法分析、语义分析以及代码生成打基础。在实验过程中,遇到了许多概念理解不深刻的问题,我重新翻阅了课本,从而更深刻的理解了词法分析的原理, 发现自己的不足之处,在今后的学习中将会有更加明确的目标.虽然只是读程序,但是我觉得还是有一定难度的,需要花一定的时间去理解写程序人的思路和每个函数的意思。九、源代码#include"stdio.h"#include"string.h&
9、quot;#include"ctype.h"#define keyword 8char *keykeyword="if","int","for","while","do","return","break","continue"#define yunsuan 9char yunyunsuan="+-*/=><!"#define fenge 8char fenfenge=".;(
10、)"char ch;int i,k;char buff20;void output(int ,char*);void scan(FILE *fp) int j; ch=fgetc(fp); while(ch=' '|ch='n'|ch='t') ch=fgetc(fp); if(isalpha(ch) /*输入的是字母,进行 标识符处理*/ buff0=ch; i=1; ch=fgetc(fp); while(isalnum(ch) /*如果是字母数字则组合,否则结束*/ buffi=ch; i+; ch=fgetc(fp); buff
11、i='0' /*查找保留字*/ fseek(fp,-1,1); j=0; while(j<keyword)&& strcmp(buff,keyj) j+; if(j>=keyword) output(2,buff); else output(1,buff); else if(isdigit(ch) buff0=ch; ch=fgetc(fp); i=1; while(isdigit(ch) /*如果是数字则整合数字*/ buffi=ch; i+; ch=fgetc(fp); buffi='0' /*整数整合结束*/ fseek(fp,
12、-1,1); output(3,buff); else if(strchr(fen,ch)>0) /*判断分隔符*/ buff0=ch; ch=fgetc(fp); buff1='0' fseek(fp,-1,1); output(5,buff);else if(strchr(yun,ch)>0) /*判断运算符*/ buff0=ch; if(ch='=') /*双运算符*/ ch=fgetc(fp); if(ch='=') output(4,"="); else fseek(fp,-1,1); output(4,
13、"="); else if(ch='>') ch=fgetc(fp); if(ch='=') output(4,">="); else fseek(fp,-1,1); output(4,">"); else if(ch='<') ch=fgetc(fp); if(ch='=') output(4,"<="); else fseek(fp,-1,1); output(4,"<"); else if(
14、ch='!') ch=fgetc(fp); if(ch='=') output(4,"!="); else fseek(fp,-1,1); output(0,"error!"); else ch=fgetc(fp); buff1='0' fseek(fp,-1,1); output(4,buff);else /*无法识别的字符*/ buff0=ch; buff1='0' ch=fgetc(fp); fseek(fp,-1,1); printf("t非法字符%sn",buf
15、f);void save()FILE *out; out=fopen("out.txt","w+"); while (gets(buff) fprintf(out,"%sn",ch); fclose(out);void output(int n,char *m) /*输出格式*/ printf("< %-2d , %-8s>n",n,m);void main()FILE *fp; char filename20;printf("数据类型定义规则:n"); printf("保留字-1 标识符-2 常数-3 运算符-4 分隔符-5n"); printf("please input the file name which you want to open: "); scanf("%s",&filename); fp=fopen(filename,"r"); /*以只读方式打开指定文件*/ if(fp=fopen(filename,"r")=NULL) /*文件不存在输出错误*/ printf("File does not e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会议室使用合同范例
- led灯具维护合同范例
- 个人买股合同范例
- 供应链劳动合同范例
- 二手集装箱房转让合同范例
- 中介汽车销售合同范例
- 事业单位劳务合同范例3篇
- 个体企业劳务合同范例
- 养生馆劳务合同范例
- 农业产品销售代理合同范例
- DB11-Z361-2006应急系统信息化技术要求
- 新高考普通高中数学人教A版教材目录
- 心脏介入诊疗技术操作规范及流程
- 《影视鉴赏(第二版)》课件2-2故事片画面
- 第八章:微生物的生态
- Q∕GDW 12070-2020 配电网工程标准化设计图元规范
- 《定期定额纳税申报表》
- 【告知牌】某公司全套重大危险源告知牌(7页)
- 【课件】第十四单元第二十七节肖邦课件-2021-2022学年高中音乐人音版(2019)必修音乐鉴赏
- 赢时胜财务估值系统日常操作指引
- NB_T 10333-2019《水电工程场内交通道路设计规范》_(高清最新)
评论
0/150
提交评论