#include<stdio.h>
#include<string.h>
int plu(char a[200],int i)
{
switch(a[i])
{
case '+':case '-':case '*':case '/':case '=':case ';':case '(':case ')':
{
return(1);
}
case ':':
{
if(a[i+1]=='=')
{
return(2);
}
else
return(1);
}
case '<':
{
if(a[i+1]=='>')
{
return(2);
}
else if(a[i+1]=='=')
{
return(2);
}
else
return(1);
}
case '>':
{
if(a[i+1]=='=')
{
return(2);
}
else
return(1);
}
default:
return(0);
break;
}
}
int dlc(char a[100],int i)
{
switch(a[i])
{
case '+':
{
printf("(13,+)");
return(1);
}
case '-':
{
printf("(14,-)");
return(1);
}
case '*':
{
printf("(15,*)");
return(1);
}
case '/':
{
printf("(16,/)");
return(1);
}
case ':':
{
if(a[i+1]=='=')
{
printf("(18,:=)");
return(2);
}
else
printf("(17,:)");
return(1);
}
case '<':
{
if(a[i+1]=='>')
{
printf("(21,<>)");
return(2);
}
else if(a[i+1]=='=')
{
printf("(22,<=)");
return(2);
}
else
printf("(20,<");
return(1);
}
case '>':
{
if(a[i+1]=='=')
{
printf("(24,>=)");
return(2);
}
else
printf("(23,>");
return(1);
}
case '=':
{
printf("(25,=)");
return(1);
}
case ';':
{
printf("(26,;)");
return(1);
}
case '(':
{
printf("(27,()");
return(1);
}
case ')':
{
printf("(28,)");
return(1);
}
default:
return(0);
break;
}
}
void number(char a[10])
{
int i=0;
char text[10];
while(a[i]!='\0')
{
text[i]=a[i];
i++;
}
text[i]='\0';
printf("(11,%s)",text);
}
void discov(char a[10])
{
int i=0;
char text[10];
while(a[i]!='\0')
{
text[i]=a[i];
i++;
}
text[i]='\0';
if( strcmp(text,"begin")==0)
{
printf("(1,begin)");
}
else if( strcmp(text,"if")==0)
{
printf("(2,if)");
}
else if( strcmp(text,"then")==0)
{
printf("(3,then)");
}
else if( strcmp(text,"while")==0)
{
printf("(4,while)");
}
else if( strcmp(text,"do")==0)
{
printf("(5,do)");
}
else if( strcmp(text,"end")==0)
{
printf("(6,end)");
}
else
{
printf("(10,%s)",text);
}
}
main(){
int i=0,j=-1,l=0,x=0;
char a[200],text[10];
printf("输入源程序,以#号结束");
gets(a);
while(1)
{
if(a[i]>='0'&&a[i]<='9')
{
while(a[i]>='0'&&a[i]<='9')
i++;
l=0;
for(++j;j<i;j++)
{
text[l]=a[j];
l++;
}
text[l]='\0';
number(text);
i--;
}
else if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z')
{l=0;
for(i;a[i]>='a' && a[i]<='z' ||a[i]>='A'&&a[i]<='Z';i++)
{
text[l]=a[i];
l++;
}
i--;
text[l]='\0';
discov(text);
}
else
{
if(a[i]=='#')
{
printf("(0,#)");
break;
}
x=dlc(a,i);
if(x==1)
{
j=i;
}
else if(x==2)
{
i++;
j=i;
}
}
i++;
}