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

📄 wang词法分析.c

📁 一个简单的词法分析器
💻 C
字号:
#include <stdlib.h>
#include <stdio.h> 
#include <string.h> 
    int flag=0; 
    char cch; 
    char bchar; 
    char str[100]; 
    FILE *fp; 
void Pushback(char c) 
{ 
     bchar=c; 
     flag=1; 
} 

char GetC( ) 
{        char t; 
      if(flag==1) 
      { 
          flag=0; 
          return bchar; 
      } 
      t=fgetc(fp); 
      if(t=='\n'||t=='\t'||t=='\r') 
      t=' '; 
      return t; 
} 

int SearchKey( ) 
{       int i; 
    char StrToken[33][10]={"?","printf","break","case","char","area",
        "continue","default","do","double","else","enum","extern",
        "float","for","goto","if","int","long","register","return",
        "short","signed","sizeof","static","struct","switch",
	"typedef","union","unsigned","void","volatile","while"};
      for(i=1;i<33;i++)
      { 
      if(strcmp(StrToken[i],str)==0) 
         return i; 
       } 
      return 0; 
} 

void GetNextWord( ) 
{ 
    int k; 
    cch=GetC(); 
    while(cch==' ') 
     { 
         cch=GetC( ); 
     } 
    k=0; 
    str[0]=cch; 
    if((cch>='a'&&cch<='z')||(cch>='A'&&cch<='Z')) 
    { 


cch=GetC( ); 
        str[++k]=cch; 
        while((cch>='a'&&cch<='z')||(cch>='A'&&cch<='Z')|| 
            (cch>='0'&&cch<='9')) 
     { 
            str[k++]=cch; 
    cch=GetC( ); 
             
     } 
        str[k]='\0'; 
        Pushback(cch); 
        if(SearchKey( )==0) 
            printf("1 %s,",str); 
else printf("2 %s ,",str); 

     } 
    else if(cch<='9'&&cch>='0') 
    { 
        while(cch<='9'&&cch>='0') 
            cch=GetC( ); 
        if(cch=='E'||cch=='D') 
            cch=GetC( ); 
        if(cch=='+'||cch=='-') 
        {   cch=GetC( ); 
            if(cch<='9'&&cch>='0') 
                cch=GetC( ); 
            while(cch<='9'&&cch>='0') 
                cch=GetC( ); 
            Pushback(cch); 
            printf("400, "); 
     } 
        else if(cch<='9'&&cch>='0') 
     { 
            while(cch<='9'&&cch>='0') 
                cch=GetC( ); 
            Pushback(cch); 
            printf("400, "); 
     } 
        else if(cch=='.') 
     { 
            while(cch<='9'&&cch>='0') 
                cch=GetC( ); 
            if(cch=='E'||cch=='D') 
                cch=GetC( ); 
            if(cch=='+'||cch=='-') 
     { 
            cch=GetC( ); 
            if(cch<='9'&&cch>='0') 
                cch=GetC( ); 
            while(cch<='9'&&cch>='0') 
                cch=GetC( ); 
            Pushback(cch); 
            printf("400, "); 
     } 
        else if(cch<='9'&&cch>='0') 
     { 
            while(cch<='9'&&cch>='0') 
                cch=GetC( ); 
            Pushback(cch); 
            printf("400, "); 
     } 
        else Pushback(cch); 
        printf("400, "); 
     } 
     } 

             else  
         { 
                 switch(cch) 
         { 
                    case '+':{cch=GetC( ); 
                             switch(cch) 
                             {case '+':printf("4 ++, ");break; 
                              case '-':printf("4 +=, ");break; 
                              default:Pushback(cch); 
                                      printf("4 +, ");break; 
              } 
                  };break; 
                
                    case '-':{cch=GetC( ); 
                             switch(cch) 
                             {case '-':printf("4 --, ");break; 
                              case '=':printf("4  -=, ");break; 
                              case '>':printf("4 ->, ");break; 
                              default:Pushback(cch); 
                                      printf("4  -, "); 
                  };break; 
              } 
                    case '*':{cch=GetC( ); 
                            if(cch=='=') printf("4  *=, "); 
                 else { 
                         Pushback(cch); 
                             printf("4  *, "); 
         } 
                  };break; 
           
                    case '/':{cch=GetC( ); 
                            if(cch=='=') printf("4  =, "); 
                 else { 
                         Pushback(cch); 
                             printf("4  /, "); 
         } 
                  };break; 
           
                    case '<':{cch=GetC( ); 
                             switch(cch) 
              { 
                             case'=':printf("4  <=, ");break; 
                             case'<':cch=GetC( ); 
                                 if(cch=='=')printf("4  <<=, "); 
                  else { 
                         Pushback(cch); 
                             printf("4  <<, "); 
             }; 
                             default:Pushback(cch); 
                              printf("4  <, "); 
              } 
                  };break; 
           
                  case '>':{cch=GetC( ); 
                             switch(cch) 
              { 
                             case'=':printf("4  >=, ");break; 
                             case'>':cch=GetC( ); 
                                 if(cch=='=')printf("4  >>=, "); 
                  else { 
                         Pushback(cch); 
                                printf("4  >>, ");break;} 
                             default:Pushback(cch); 
                              printf("4  >, "); 
              } 
                       };break; 
                    case '=':{cch=GetC( ); 
                            if(cch=='=') printf("4  ==, "); 
                 else { 
                         Pushback(cch); 
                             printf("4  =, "); 
         } 
                       };break; 
                    case '%':{cch=GetC( ); 
                            if(cch=='=') printf("4  %=, "); 
                 else { 
                         Pushback(cch); 
                             printf("4  %, "); 
         } 
                  };break; 
                    case '!':{cch=GetC( ); 
                            if(cch=='=') printf("4  !=, "); 
                 else { 
                         Pushback(cch); 
                             printf("4  !, "); 
         } 
                  };break; 
                    case '&':{cch=GetC( ); 
                             switch(cch) 
              { 
                             case '&':printf("4  &&, ");break; 
                             case '=':printf("4  &=, ");break; 
                             default:Pushback(cch); 
                              printf("4  &, "); 
              } 
                  };break; 
                    case '^':cch=GetC( ); 
                        if(cch=='=')printf("4  ^=, "); 
                        else{Pushback(cch); 
                        printf("4  ^, "); 
                 };break; 
                    case '|':cch=GetC( ); 
                     switch(cch) 
         { 
                        case'|':printf("4  ||, ");break; 
                        case'=':printf("4  |=");break; 
                        default:Pushback(cch); 
                            printf("4  |, "); 
                 };break; 
                    case '(':printf("4  (, ");break; 
                    case ')':printf("4  ), ");break; 
                    case '[':printf("4  [, ");break; 
                    case ']':printf("4  ], ");break; 
                    case '{':printf("4  {, ");break; 
                    case '}':printf("4  }, ");break; 
                    case '~':printf("4  ~, ");break; 
                    case '.':printf("4  ., ");break; 
                    case ';':printf("4  ;, ");break; 
                    case ',':printf("4  ,, ");break; 
                    case '?':{cch=GetC( ); 
                             if(cch==':')printf("4  ?:, "); 
                             else printf("error!\n"); 
                  }break; 
         } 
         } 

         } 





void main() 
{ 
    if((fp=fopen("c:\\windows\\desktop\\wangs.txt","r"))==0) 
        printf("Please Change Your TXT Flies Position...\nAnd Make Sure the TXT Flie's Name is wangs.txt\nGood Luck! ^_^ \n"); 
else 
 { while(cch!=EOF) 
      { 
    GetNextWord( ); 
    printf("  "); 
      } 
  } 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -