首页 > 技术文章 > 词法分析器

BOXczx 2016-10-08 11:28 原文

分析器有个问题一直无法解决,分析完会出现27和28。

#include<stdio.h>
#include<stdlib.h>
void main()
{
int i;
char s[100];
printf("请输入字符串:");
scanf("%s",&s);
for(i=0;i<100;i++)
{
if(s[i]=='b'&&s[i+1]=='e'&&s[i+2]=='g'&&s[i+3]=='i'&&s[i+4]=='n')
printf("1 , begin\n");
else if(s[i]=='i'&&s[i+1]=='f')
printf("2 , if\n");
else if(s[i]=='t'&&s[i+1]=='h'&&s[i+2]=='e'&&s[i+3]=='n')
printf("3 , then\n");
else if(s[i]=='w'&&s[i+1]=='h'&&s[i+2]=='i'&&s[i+3]=='l'&&s[i+4]=='e')
printf("4 , while\n");
else if(s[i]=='d'&&s[i+1]=='o')
printf("5 , do\n");
else if(s[i]=='e'&&s[i+1]=='n'&&s[i+2]=='d')
printf("6 , end\n");
else if(s[i]=='l'&&s[i+1]=='('&&s[i+2]=='l'&&s[i+3]=='|'&&s[i+3]=='d'&&s[i+3]==')'&&s[i+4]=='*')
printf("10 , l(l|d)*\n");
else if(s[i]=='d'&&s[i+1]=='d'&&s[i+2]=='*')
printf("11 , dd*\n");
else if(s[i]=='-')
printf("14 , -\n");
else if(s[i]=='*')
printf("15 , *\n");
else if(s[i]=='/')
printf("16 , /\n");
else if(s[i]==':'&&s[i+1]!='=')
printf("17 , :\n");
else if(s[i]==':'&&s[i+1]=='=')
printf("18 , :=\n");
else if(s[i]=='<'&&s[i+1]!='='&&s[i+1]!='>')
printf("20 , <\n");
else if(s[i]=='<'&&s[i+1]=='=')
printf("21 , <=\n");
else if(s[i]=='<'&&s[i+1]=='>')
printf("22 , <>\n");
else if(s[i]=='>'&&s[i+1]!='=')
printf("23 , >\n");
else if(s[i]=='>'&&s[i+1]=='=')
printf("24 , >=\n");
else if(s[i]=='=')
printf("25 , =\n");
else if(s[i]==';')
printf("26 , ;\n");
else if(s[i]=='(')
printf("27 , (\n");
else if(s[i]==')')
printf("28 , )\n");
else if(s[i]=='#')
printf("0 , #\n");

}

}

推荐阅读