📄 词法分析器.txt
字号:
#include <stdio.h>
#include <string.h>
char stand[30][15]={"main","int","char","long","short","unsigned","float","struct","union","while","if","printf","scanf","for","else","switch","case"};
char token[15]; /*定义相关全局变量*/
char character[1];
char table[50][30];
reserve() /*若TOKEN中的字符串是保留字则返回1,否则返回0*/
{int i;
for(i=0;i<30;i++)
if(strcmp(token,stand[i])==0)
return(1);
return(0);
}
main()
{int i,j,c,k;
printf("input source program:\n");
for(i=0;;i++) /*输入原程序*/
{
gets(table[i]);
if(strcmp(table[i],"\0")==0)
break; /*.............................*/
}
printf("the result is:\n");
for(i=0,j=0;i<50;j++)
{if(j==30)
{i++;j=0;}
for(k=0;k<15;k++)
token[k]='\0';
if(table[i][0]=='*')break;
while(table[i][j]==' ')j++;
character[0]=table[i][j];
switch(character[0])
{
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z':
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
while((character[0]>=48&&character[0]<=57)||(character[0]>=65&&character[0]<=90)||(character[0]>=97&&character[0]<=122))
{
strcat(token,character);
j++;
if(j==30)
{i++;j=0;}
character[0]=table[i][j];
}
j--;
/*character[0]='NULL'; */
c=reserve();
if(c==0)
printf("<id,%s>\n",token);
else
printf("<%s,_>\n",token);
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
while(character[0]>=48&&character[0]<=57)
{
strcat(token,character);
j++;
if(j==30)
{i++;j=0;}
character[0]=table[i][j];
}
j--;
/* character[0]='NULL'; */
printf("<const,%s>\n",token);
break;
case '+':
printf("<%c,_>\n",character[0]);
break;
case '-':
printf("<%c,_>\n",character[0]);
break;
case '*':
printf("<%c,_>\n",character[0]);
break;
case '<':
j++;
if(j==30)
{i++;j=0;}
if(table[i][j]=='=')
printf("<<=,_>\n");
else
{j--;printf("<<,_>\n");}
break;
case '=':
j++;
if(j==30)
{i++;j=0;}
if(table[i][j]=='=')
printf("<==,_>\n");
else
{j--;printf("<=,_>\n");}
break;
case '!':
j++;
if(j==30)
{i++;j=0;}
if(table[i][j]=='=')
printf("<!=,_>\n");
else
{j--;printf("<!,_>\n");}
break;
case ';':
printf("<;,_>\n");
break;
case '(':
printf("<(,_>\n");
break;
case ')':
printf("<),_>\n");
break;
case '{':
printf("<{,_>\n");
break;
case '}':
printf("<},_>\n");
break;
case '&':
printf("<&,_>\n");
break;
case '\0':
break;
case '"':
printf("<\",_>\n");
break;
case ',':
printf("<,,_>\n");
break;
default:printf("error!\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -