- 1、本文档共50页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)