📄 wordanalysis.h
字号:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
#define NN 256
#define N 30
#define ln 20
char line[NN];
char liword[N];char word[N][ln];
int fi; char mark;int wordlen,linelen,num;int next;char ch;int fj;
void clear(char *array,int length)
{
for(int i=0;i<length;i++)
{array[i]='\0';}
}
void errorr(int etype)
{
if(etype==1)
{
if(!isspace(ch)&&ch!='\n'&&ch!='\t')
fj=fj+1;ch=line[fj];
}
else if(etype==2)
cout<<"词法出错,赋值符应为:="<<endl;
else if(etype==3)
cout<<"指数形式错误"<<endl;
}
int IsMath()
{
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='='||ch=='<'||ch=='>'||ch==':')
return 1;
else return 0;
}
int IsBound()
{
if(ch==','||ch=='.'||ch==';'||ch=='('||ch==')')
return 1;
else return 0;
}
void Alpha()
{ fi=0;
clear(liword,wordlen);
while(isalpha(ch) || isdigit(ch))
{
liword[fi]=ch;
fi++;fj++;
ch=line[fj];
}
wordlen=fi;
}
void Digit()
{
fi=0;int eyes;
clear(liword,wordlen);
do{
liword[fi++]=ch;
ch=line[++fj];
}while(isdigit(ch));
if(ch=='.')
{
liword[fi++]=ch;
ch=line[++fj];
if(!isdigit(ch)){eyes=1;}
while(isdigit(ch))
{ liword[fi++]=ch;
ch=line[++fj]; }
}
if(ch=='e'||ch=='E')
{ liword[fi++]=ch;
ch=line[++fj];
if(ch=='-')
{liword[fi++]=ch;ch=line[++fj];}
if(!isdigit(ch)){eyes=1;}
while(isdigit(ch))
{ liword[fi++]=ch;
ch=line[++fj];}
}
if(eyes==1){errorr(3);}
wordlen=fi;
}
void Math()
{
fi=0;
clear(liword,wordlen);
liword[fi] =ch;
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='=')
{
wordlen=1;
}
else if(ch=='>')
{ fj=fj+1;
ch=line[fj];
if(ch=='=')
{liword[1]=ch;wordlen=2;}
else
{wordlen=1;fj=fj-1;}
}
else if( ch=='<')
{ fj=fj+1;
ch=line[fj];
if(ch=='=')
{liword[1]=ch;wordlen=2;}
else
{wordlen=1;fj=fj-1;}
}
else if(ch=':')
{
fj=fj+1;
ch=line[fj];
if(ch=='=')
{liword[1]=ch;wordlen=2;}
else
{errorr(2);wordlen=1;fj=fj-1;errorr(2);}
}
fj=fj+1;
ch=line[fj];
}
void Bound()
{
fi=0;
clear(liword,wordlen);
liword[fi]=ch;
wordlen=1;
fj=fj+1;
ch=line[fj];
}
void anlysis()
{ fj=0;
ch=line[0];
do{
if(isalpha(ch))
{Alpha();num++;
for(int w=0;w<=wordlen;w++)
{word[next][w]=liword[w];}
next++;}
else if(isdigit(ch))
{ Digit();num++;
for(int w=0;w<wordlen;w++)
{word[next][w]=liword[w];}
next++;}
else if(IsMath())
{Math();num++;
for(int w=0;w<wordlen;w++)
{word[next][w]=liword[w];}
next++;}
else if(IsBound())
{Bound();num++;
for(int w=0;w<wordlen;w++)
{word[next][w]=liword[w];}
next++;}
else {errorr(1);}
}while(fj<linelen);
cout<<"\n词法分析成功!分析得到的单词序列如下:"<<endl;
for(int nu=0;nu<num;nu++)
{cout<<word[nu]<<" ";}
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -