您的位置:首页 > 其它

0917 实验一词法分析程序

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

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\t数字\n",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\t语法错误!\n",code[k].chars);k++;j=-1;break;
}
if(j==-1)
n=0;
j++;
i++;
n++;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: