#include <stdio.h>
#include <string.h>
int Input1(char a)
{
int i=0;
switch(a)
{
case('+'):
printf("%c 13
",a);i++;break;
case('-'):
printf("%c 14
",a);i++;break;
case('*'):
printf("%c 15
",a);i++;break;
case('/'):
printf("%c 16
",a);i++;break;
case(':'):
printf("%c 17
",a);i++;break;
case('<'):
printf("%c 20
",a);i++;break;
case('>'):
printf("%c 23
",a);i++;break;
case('='):
printf("%c 25
",a);i++;break;
case(';'):
printf("%c 26
",a);i++;break;
case('('):
printf("%c 27
",a);i++;break;
case(')'):
printf("%c 28
",a);i++;break;
case('#'):
printf("%c 0
",a);i++;break;
}
return i;
}
int Input2(char a[])
{
int i=0;
if((strcmp(a,"if")==0))
{printf("if 2
"); i++;}
else if((strcmp(a,"do")==0))
{printf("do 5
"); i++;}
else if((strcmp(a,":=")==0))
{printf(":= 18
"); i++;}
else if((strcmp(a,"<=")==0))
{printf("<= 21
"); i++;}
else if((strcmp(a,"<>")==0))
{printf("<> 22
"); i++;}
else if((strcmp(a,">=")==0))
{printf(">= 24
"); i++;}
return i;
}
int Input3(char a[])
{
int i=0;
if((strcmp(a,"end")==0))
{printf("end 6
"); i++;}
else if((strcmp(a,"dd*")==0))
{printf("dd* 11
"); i++;}
return i;
}
int Input4(char a[])
{
int i=0;
if((strcmp(a,"then")==0))
{printf("then 3
"); i++;}
return i;
}
int Input5(char a[])
{
int i=0;
if((strcmp(a,"begin")==0))
{printf("begin 1
"); i++;}
else if((strcmp(a,"while")==0))
{printf("while 4
"); i++;}
return i;
}
int Input7(char a[])
{
int i=0;
if((strcmp(a,"|(||d)*")==0))
{printf("l(l|d)* 10
"); i++;}
return i;
}
#define MAX 100
struct Code
{
char chars[MAX];
};
int main()
{
char SC[MAX];
Code code[MAX];
int i,j,k,n;
printf("------词法分析------
");
printf("请输入代码: ");
gets(SC);
printf("
单词符号 种别码
");
i=j=k=0;
n=1;
while(SC[i]!=' ')
{
if(SC[i]==' ')
i++;
code[k].chars[j]=SC[i];
code[k].chars[j+1]=' ';
if(code[k].chars[j]>='0'&&code[k].chars[j]<='9'||code[k].chars[j]=='.'){
j++;i++;
if((SC[i]<'0'||SC[i]>'9')&&SC[i]!='.')
{printf("%s 数字
",code[k].chars);n=1;j=0;}
}
else
{
switch(n)
{
case(1): if(Input1(code[k].chars[j])==1)
{k++;j=-1;}break;
case(2): if(Input2(code[k].chars)==1)
{k++;j=-1;}break;
case(3): if(Input3(code[k].chars)==1)
{k++;j=-1;}break;
case(4): if(Input4(code[k].chars)==1)
{k++;j=-1;}break;
case(5): if(Input5(code[k].chars)==1)
{k++;j=-1;}break;
case(7): if(Input7(code[k].chars)==1)
{k++;j=-1;}break;
default:
printf("%s 语法错误!
",code[k].chars);k++;j=-1;break;
}
if(j==-1)
n=0;
j++;
i++;
n++;
}
}
return 0;
}