void scanner()
{
t=0;
//getcha();
getbc();
if(letter(ch))
{
while(letter(ch)||digit(ch))
{
concat();
getcha();
}
retract();
syn=reserve();
if(syn==10) syn=10;
}
else if(digit(ch))
{
while(digit(ch))
{
concat();
getcha();
}
retract();
syn=11;
}
else
switch(ch)
{
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'<':
token[0]=ch;
getcha();
if(ch=='=') {syn=22;token =ch;}
else if(ch=='>') {syn=21;token =ch;}
else
{retract();
syn=20;}
break;
case'>':
token[0]=ch;
getcha();
if(ch=='=') {syn=24;token =ch;}
else
{retract();
syn=23;}
break;
case'=': syn=25;token[0]=ch;break;
case':':
token[0]=ch;
getcha();
if(ch=='=') {syn=18;token =ch;}
else
{retract();
syn=17;}
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;break;
}
}
int main()
{
p=0;
printf("please input string: \n");
char c;
while(1)
{c=getchar();
if(c=='\n') break;
prog[p++]=c;
}
p=0;
scanner();
if(syn==1)
{Irparse();}//begin
else
{printf("语法分析出错! 请检查begin关键字\n");return 0;}
if(syn==6)//end
{
scanner();
if(syn==0)
{
printf("success!\n");
}
else
{printf("语法分析出错! 请检查是否缺少'#'\n");}
}
else{printf("语法分析出错! 请检查是否缺少'end'\n");}
return 0;
}