⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 词法分析器.txt

📁 c语言的词法分析器源代码
💻 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 + -