- 4
- 0
- 约 5页
- 2017-01-12 发布于江苏
- 举报
编译原理语法1
#includestdio.h
#includestring.h
char prog[80],token[8];
char ch;
int kk;
int syn,p,m,n,sum;
char*number[6]={begin,if,then,while,do,end};
int scaner()
{for(n=0;n8;n++) token[n]=\0;
m=0;
n=0;
ch=prog[p++];
while(ch==) ch=prog[p++];
if(isalpha(ch))
{
while(isalpha(ch)||isdiditt(ch))
{
token[m++]=ch;ch=prog[p++];
}
token[m++]=\0;
syn=10;
for(n=0;n6;n++)
if(strcmp(token,numtab[n])==0)
syn=n+1;
p--;
}
else if(isdigit(ch))
{
sum=0;
while(isdigit(ch))
{
sum=sum*10+(ch-0);
ch=prog[p++];
}
syn=11;
p--;
{
else switch(ch)
{
case:token[m++]=ch;ch=prog[p++];
if(ch==)
{token[m++]=ch;syn=22;
}
else if(ch===)
{token[m++]=ch;
syn=21;
}
else
{p--;syn=20;
}
break;
case:token[m++]=ch;
ch=prog[p++];
if(ch===)
{token[m++]=ch;syn=24;
}
else
{p--;syn=23;
}
break;
case+:token[m++]=ch;syn=13;break;
case-:token[m++]=ch;syn=14;break;
case*:token[m++]=ch;syn=15;break;
case/:token[m++]=ch;syn=16;break;
case:token[m++]=ch;ch=prog[p++];
if(ch===){token[m++]=ch;syn=18;}
else{p--;syn=17;}break;
case=:token[m++]=ch;syn=25;break;
case;:token[m++]=ch;syn=26;break;
case(:token[m++]=ch;syn=27;break;
case):token[m++]=ch;syn=28;break;
case#:syn=0;token[m++]=#;break;
default:syn=-1;}
return 0;
}
Irparser()
{
if{syn==1)
{
scaner();
yucu();
if(syn==6)
{
scaner();
if(syn==0(kk==0));
printf(\nSuccess);
}
else
{
if(kk!=1)
printf(\nend lost);
kk=1;
}
}
else
{
printf(\nbegin error!);
kk=1;
}
return;
}
yucn()
{
statement();
while(syn==26)
{
scaner();
statement();
}
return
}
statement();
{if(syn==10)
{
scaner();
if(syn==18)
{
scaner();
expression();
}
else
{
printf(\nAssign symbol error!);
kk=1;
}
}
else
{
printf(\nStatement error!);
kk=1;
}
return;
expression()
{ term();
while((syn==13)||(syn==14))
{
scaner();
term();
}
}
trem();
{
factor();
while((syn==15)||(syn==16))
{
scaner();
factor();
}
retuen;
}
factor();
{
if((syn
原创力文档

文档评论(0)