这是词法分析的一个程序,请帮我看看!
#include <stdio.h>
#include <string.h>
char prog[80],token[8];
char ch;
int syn,p,m,n,sum;
char *rwtab[6]={"begin","if","then","while","do","end"};
//******************************
//词法扫描程序
//******************************
void scaner()
{
for(n=0;n<8;n++) token[n]=NULL;
ch=prog[p++];
while(ch==' ') ch=prog[p++];
if(ch>='a' || ch<='z' || ch>='A' || ch<='Z')
{
while(ch>='a' || ch<='z' || ch>='A' || ch<='Z' || ch>='0' || ch<='9')
{
token[m++]=ch;
ch=prog[p++];
}
token[m++]='\0';
ch=prog[p--];
syn=10;
for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0)
{
syn=n+1;
break;
}
}
else
if(ch>='0' || ch<='9')
{
while(ch>='0' || ch<='9')
{
sum=sum*10+ch-'0';
ch=prog[p++];
}
ch=prog[p--];
syn=11;
}
else
switch(ch)
{
case '<' :m=0;
token[m++]=ch;
ch=prog[p++];
if(ch=='>')
{
syn=21;
token[m++]=ch;
}
else if(ch=='=')
{
syn=22;
token[m++]=ch;
}
else
{
syn=20;
ch=prog[p--];
}
break;
case '>' :token[m++]=ch;
ch=prog[p++];
if(ch=='=')
{
syn=24;
token[m++]=ch;
}
else
{
syn=23;
ch=prog[p--];
}
break;
case ':' :token[m++]=ch;
ch=prog[p++];
if(ch=='=')
{
syn=18;
token[m++]=ch;
}
else
{
syn=17;
ch=prog[p--];
}
break;
case '+' :syn=13;
token[0]=ch;
break;
case '-' :syn=14;
token[0]=ch;
break;
case '*' :syn=15;
token[0]=ch;
break;
case '/' :syn=16;
token[0]=ch;
break;
case ';' :syn=26;
token[0]=ch;
break;
case '(' :syn=27;
token[0]=ch;
break;
case ')' :syn=28;
token[0]=ch;
break;
case '#' :syn=0;
token[0]=ch;
break;
default :syn=-1;
}
}
void main()
{
p=0;
printf("\n please input string:");
do{
scanf("%s",prog);
gets(prog);
ch=prog[p++];
}while(ch!='#');
// printf("%s\t",prog);
p=0;
do{
scaner();
switch(syn)
{
case 11:printf("数的二元组:\n %d",sum);
break;
case -1:printf("含有未识别的符号!");
break;
default:printf("单词的二元组:\n %s",token);
}
}while(syn!=0);
}