深入浅出编译原理-5-一个简单语法分析器的C语言实现(二)

2014-11-23 23:55:04 · 作者: · 浏览: 37
n;
}
void scaner(void)
{
sum=0;

for(m=0;m<8;m++)
token[m++]=NULL;

m=0;
ch=prog[p++];

while(ch==' ')
ch=prog[p++];

if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
{
while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))
{
token[m++]=ch;
ch=prog[p++];
}
p--;
syn=10;
token[m++]='\0';
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++];
}
p--;
syn=11;
}
else
switch(ch)
{
case '<':
m=0;
ch=prog[p++];
if(ch=='>')
{
syn=21;
}
else if(ch=='=')
{
syn=22;
}
else
{
syn=20;
p--;
}
break;

case '>':
m=0;
ch=prog[p++];
if(ch=='=')
{
syn=24;
}
else
{
syn=23;
p--;
}
break;

case ':':
m=0;
ch=prog[p++];
if(ch=='=')
{
syn=18;
}
else
{
syn=17;
p--;
}
break;

case '+':
syn=13;
break;

case '-':
syn=14;
break;

case '*':
syn=15;
break;

case '/':
syn=16;
break;

case '(':
syn=27;
break;

case ')':
syn=28;
break;

case '=':
syn=25;
break;

case ';':
syn=26;
break;

case '#':
syn=0;
break;

default:
syn=-1;
break;
}
}