网站大量收购独家精品文档,联系QQ:2885784924

编译原理词法分析程序实现实验报告.doc

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一 词法分析程序实现 一、实验内容 选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。 输入:由无符号数和+,-,*,/, ( , ) 构成的算术表达式,如1.5E+2-100。 输出:对识别出的每一单词均单行输出其类别码(无符号数的值暂不要求计算)。 二、 设计部分 因为需要选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来,而其中的关键则为无符号数的识别,它不仅包括了一般情况下的整数和小数,还有以E为底数的指数运算,其中关于词法分析的无符号数的识别过程流程图如下: GOTO 1: GOTO 2: 三、 源程序代码部分 #include stdio.h #includestdlib.h #include math.h #define MAX 100 #define UNSIGNEDNUMBER 1 #define PLUS 2 #define SUBTRACT 3 #define MULTIPLY 4 #define DIVIDE 5 #define LEFTBRACKET 6 #define RIGHTBRACKET 7 #define INEFFICACIOUSLABEL 8 #define FINISH 111 int count=0; int Class; void StoreType(); int Type[100]; char Store[20]={\0}; void ShowStrFile();//已经将要识别的字符串存在文件a中 void Output(int a,char *p1,char *p2);//字符的输出过程 int Sign(char *p);//+-*/整体识别过程 int UnsignedNum(char *p);//是否适合合法的正整数0~9 int LegalCharacter(char *p);//是否是合法的字符:Sign(p)||UnsignedNum(p)||E||. void DistinguishSign(char *p);//+-*/具体识别过程 void TypyDistinguish();//字符的识别过程 void ShowType();//将类别码存储在Type[100]中,为语法分析做准备 void ShowStrFile()//已经将要识别的字符串存在文件a中 { FILE *fp_s; char ch; if((fp_s=fopen(a.txt,r))==NULL) {printf(The FILE cannot open!); exit(0); } else ch=fgetc(fp_s); while(ch!=EOF) { putchar(ch); ch=fgetc(fp_s); } printf(\n); } void StoreStr()//将文件中的字符串存储到数组Store[i] { FILE *fp=fopen(a.txt,r); char str; int i=0; while(!feof(fp)) { fscanf(fp,%c,str); if(str==?) { Store[i]=\0; break; } Store[i]=str; i++; } Store[i]=\0; } void ShowStore() {int i; for (i=0;Store[i]!=\0;i++) printf(%c,Store[i]); printf(\n); } void Output(int a,char *p1,char *p2) { printf(%3s\t%d\t%s\t,CLASS,a,VALUE); while(p1=p2) { printf(%c,*p1); p1++; } printf(\n); } int Sign(char *p) { char ch=*p; if(ch==+||ch==-||ch==*||ch==/||ch==(||ch==)) return 1; else return 0; } int UnsignedNum(char *p) { char ch=*p; if(0=chch=9) return 1; else return 0; } int LegalCharacter(char *p) { char ch=*p; if(Sign(p)||UnsignedNum(p)||ch==E||ch==.) return 1; else return 0; } void Distingui

文档评论(0)

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

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

1亿VIP精品文档

相关文档