分类: C/C++
2007-11-05 07:37:35
#include
#include
#include
using namespace std;
int static biaozi=1;
class str
{
public:
str(int t,char a[],int len)
{
for(int i=0;i
type=t;
leng=len;
}
void show()
{
cout<<'('<
}
private:
int type;
char name[10];
int leng;
};
void change_input(char a[],int &len) //获取IO_BUFFER中的字符串到a数组
{
char c;
c=getchar();
while(c!='#')
{
a[len++]=c;
c=getchar();
}
a[len++]='#';
}
void insert(list
{
char temp[20];
for(int i=0;i
l.push_back(str(t,temp,leng));
}
void check(list
{
int disp=0;int leng=0;
while(a[disp]!='#'&&disp+leng!=len&&biaozi!=0)
{
if(!(a[disp]>='a'&&a[disp]<='z'||a[disp]>='A'&&a[disp]<='Z'||(a[disp]>='0'&&a[disp]<='9')||a[disp]==' '||a[disp]=='<'||a[disp]=='>'||a[disp]=='='||a[disp]=='\n')){cout<<'('<<4<<','<处理非词法的字符
if(a[disp]==' '||a[disp]=='\n'){disp++;leng=0;goto down;}//略过空格及回车
if(a[disp]>='a'&&a[disp]<='z'||a[disp]>='A'&&a[disp]<='Z')//进入字母
{
if(a[disp]=='B'||a[disp]=='E'||a[disp]=='I'||a[disp]=='T')//状态2,(8,20),12,15入口
{
if(a[disp]=='E')//2,8
{
leng++;
if(a[disp+leng]=='N'||a[disp+leng]=='L')
{
if(a[disp+leng]=='N')//9
{
leng++;
if(a[disp+leng]=='D')//10
{
leng++;
if(a[disp+leng]>='0'&&a[disp+leng]<='9'||a[disp+leng]>='a'&&a[disp+leng]<='z'||a[disp+leng]>='A'&&a[disp+leng]<='Z')
goto loop_biaoshi;//->25
else
{
insert(l,0,a,disp,leng); //END
disp=disp+leng;
leng=0;
goto down;
}
}
else goto loop_biaoshi;//->25
}
else//21
{
leng++;
if(a[disp+leng]=='S')//22
{
leng++;
if(a[disp+leng]=='E')//23
{
leng++;
if(a[disp+leng]>='0'&&a[disp+leng]<='9'||a[disp+leng]>='a'&&a[disp+leng]<='z'||a[disp+leng]>='A'&&a[disp+leng]<='Z')
goto loop_biaoshi;//->25
else
{
insert(l,0,a,disp,leng); //ELSE
disp=disp+leng;
leng=0;
goto down;
}
}
else goto loop_biaoshi;//->25
}
else goto loop_biaoshi;//->25
}
}
else goto loop_biaoshi;//->25
}
if(a[disp]=='I')//12
{
leng++;
if(a[disp+leng]=='F')//13
{
leng++;
if(a[disp+leng]>='0'&&a[disp+leng]<='9'||a[disp+leng]>='a'&&a[disp+leng]<='z'||a[disp+leng]>='A'&&a[disp+leng]<='Z')
{
goto loop_biaoshi;//->25
}
else
{
insert(l,0,a,disp,leng); //IF
disp=disp+leng;
leng=0;
goto down;
}
}
else goto loop_biaoshi;//->25
}
if(a[disp]=='B')//2
{
leng++;
if(a[disp+leng]=='E')//3
{
leng++;
if(a[disp+leng]=='G')//4
{
leng++;
if(a[disp+leng]=='I')//5
{
leng++;
if(a[disp+leng]=='N')//6
{
leng++;
if(a[disp+leng]>='0'&&a[disp+leng]<='9'||a[disp+leng]>='a'&&a[disp+leng]<='z'||a[disp+leng]>='A'&&a[disp+leng]<='Z')
goto loop_biaoshi;//->25
else
{
insert(l,0,a,disp,leng);//BEGIN
disp=disp+leng;
leng=0;
goto down;
}
}
else goto loop_biaoshi;//->25
}
else goto loop_biaoshi;
}
else goto loop_biaoshi;
}
else goto loop_biaoshi;
}
if(a[disp]=='T')//15
{
leng++;
if(a[disp+leng]=='H')//16
{
leng++;
if(a[disp+leng]=='E')//17
{
leng++;
if(a[disp+leng]=='N')//18
{
leng++;
if(a[disp+leng]>='0'&&a[disp+leng]<='9'||a[disp+leng]>='a'&&a[disp+leng]<='z'||a[disp+leng]>='A'&&a[disp+leng]<='Z')
goto loop_biaoshi;//25
else
{
insert(l,0,a,disp,leng); //THEN
disp=disp+leng;
leng=0;
goto down;
}
}
else goto loop_biaoshi;//->25
}
else goto loop_biaoshi;
}
else goto loop_biaoshi;
}
}
else//25入口
{
loop_biaoshi:
while(a[disp+leng]!=' '&&a[disp+leng]!='\n'&&a[disp+leng]!='<'&&a[disp+leng]!='>'&&a[disp+leng]!='='&&a[disp+leng]!='#')
{
leng++;
}
insert(l,1,a,disp,leng);
disp=disp+leng;leng=0;
goto down;
}
}
if(a[disp]>='0'&&a[disp]<='9')//27
{
while(a[disp+leng]>='0'&&a[disp+leng]<='9')
{
leng++;
}
if(a[disp+leng]==' '||a[disp+leng]=='\n'||a[disp+leng]=='#'||a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{
insert(l,2,a,disp,leng);//获取无符号整数
disp=disp+leng;leng=0;
goto down;
}
else //错误的标识符
{
while(a[disp+leng]>='a'&&a[disp+leng]<='z'||a[disp+leng]>='A'&&a[disp+leng]<='Z'||a[disp+leng]>='0'&&a[disp+leng]<='9')
{leng++;}
insert(l,4,a,disp,leng);
disp=disp+leng;leng=0;
biaozi=0;
goto down;
}
}
if(a[disp]=='>'||a[disp]=='<'||a[disp]=='=')//(29,31,36),34,(39,41)
{
if(a[disp]=='<')//(29,31,36)
{
leng++;
if(a[disp+leng]=='='||a[disp+leng]=='>')
{
if(a[disp+leng]=='=')//32
{
leng++;
if(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{
while(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{
leng++;
}
insert(l,4,a,disp,leng);
disp=disp+leng;leng=0;
biaozi=0;
goto down;
}
else
{
insert(l,3,a,disp,leng);
disp=disp+leng;leng=0;
goto down;
}
}
if(a[disp+leng]=='>')//37
{
leng++;
if(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{
while(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{leng++;}
insert(l,4,a,disp,leng);
disp=disp+leng;leng=0;biaozi=0;
goto down;
}
else
{
insert(l,3,a,disp,leng);
disp=disp+leng;leng=0;
goto down;
}
}
}
else
{
if(a[disp+leng]=='<')//29
{
while(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{leng++;}
insert(l,4,a,disp,leng);
disp=disp+leng;leng=0;
biaozi=0;
goto down;
}
else
{
insert(l,3,a,disp,leng);
disp=disp+leng;leng=0;
goto down;
}
}
}
if(a[disp]=='=')//34
{
leng++;
if(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{
while(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{leng++;}
insert(l,4,a,disp,leng);
disp=disp+leng;leng=0;
biaozi=0;
goto down;
}
else
{
insert(l,3,a,disp,leng);
disp=disp+leng;leng=0;
goto down;
}
}
if(a[disp]=='>')//39,41
{
leng++;
if(a[disp+leng]=='=')//42
{
leng++;
if(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{
while(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{leng++;}
insert(l,4,a,disp,leng);
disp=disp+leng;leng=0;
biaozi=0;
goto down;
}
else
{
insert(l,3,a,disp,leng);
disp=disp+leng;leng=0;
goto down;
}
}
else//39
{
if(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{
while(a[disp+leng]=='<'||a[disp+leng]=='>'||a[disp+leng]=='=')
{leng++;}
insert(l,4,a,disp,leng);
disp=disp+leng;leng=0;
biaozi=0;
goto down;
}
else
{
insert(l,3,a,disp,leng);
disp=disp+leng;leng=0;
goto down;
}
}
}
}
down:
{
}
}
}
void main()
{
cout<<"输入语句:以#为结束:"<
for(;k!=60;k++)
cout<<"*";
cout<
change_input(zifu,length);
for(k=0;k!=60;k++)
cout<<"*";cout<
list
check(words,zifu,length);
list
for(;i!=words.end();i++)
(*i).show(),cout<
}