词法分析程序.docx

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
词法分析程序

专业课程设计II题目:专业学生姓名班级学号指导教师指导单位日期词法分析程序的构造课题内容和要求基本功能:通过状态转换图构造C或者PASCAL语言子集的词法分析程序。例如选取了C语言,选取其中一个子集,例如包含了部分关键字main、float、if、for等等,特殊符号( 、、=、+等等,特殊定义的标识符变量以及部分常量等,采用《编译原理》词法分析中有穷自动机的思想构建出该语言子集的状态转换图,并编码实现。要求将选取的语言子集编写一个简单程序,放在一个文本文件中;要将一个个单词区分清楚并归类(例如for属于关键字),词法分析程序作一遍扫描,采用双缓冲区结构。并且如vc将关键字着色以加以识别。二、概要设计状态装换图功能模块核心代码:1)、数据类型定义:extern struct table //保留字(关键字)和各自的编码{ int id; char code[10];};struct table key[100] = {{100,main},{101,int},{102,char},{103,if},{104,else},{105,for},{106,while},{107,ERROR},};int a=200; //自定义变量编码int b=300; //数字编码int d=400; //运算符编码int e=500; //分隔符编码int f=600; //关系运算符编码2)、函数调用void scanner(FILE *fp) //读取文件内容,并加以识别判断int reserve(char* p) //识别判断是否为关键字函数void output(int t,char *s) //输出函数3)、状态判断void scanner(FILE *fp){if(isalpha(ch)) //如果是字母{token[0]=ch;i=1;ch=fgetc(fp);while(isalpha(ch)||isalnum(ch)) //循环接受字母{token[i]=ch; //放入数组中i++;ch=fgetc(fp);}fseek(fp,-1,1);token[i]=\0;c=reserve(token); //判断是否为关键字if(c!=-1){ output(c,token);}elseoutput(a++,token);}else if(isdigit(ch)) //如果是数字{token[0]=ch;ch=fgetc(fp);i=1;while(isdigit(ch)) //循环接受{token[i]=ch;i++;ch=fgetc(fp);}token[i]=\0;fseek(fp,-1,1);output(b++,token);}else switch(ch) //判断是否为符号{ case(:output(e++,();break; //是否为(,是则输出 case):output(e++,));break; //是否为),是则输出 case[:output(e++,[);break; //是否为[,是则输出 case]:output(e++,]);break; //是否为],是则输出 case{:output(e++,{);break; //是否为{,是则输出 case}:output(e++,});break; //是否为},是则输出 case,:output(e++,,);break; //是否为,,是则输出 case::output(e++,:);break; //是否为:,是则输出 case;:output(e++,;);break; //是否为;,是则输出 case:output(e++,\);b

文档评论(0)

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

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

1亿VIP精品文档

相关文档