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

📄 diguifenxi.c

📁 这是c语言的语法分析器
💻 C
字号:
#include "stdio.h" 

#include "string.h" 


char sym; 

char str[50]; 

int count = 0; 
void procpart(void);

void vdeclar(void);

void vlist(void);

void varitab(void);

void statelist(void);

void state(void);

void variable(void);

void identifier(void);

void alpha(void);

void assigns(void);

void whiles(void);

void type(void);

void error(void); 

void Scaner(void); 

void  expression(void);

void Scaner(){ 

    sym = str[count++]; 


} 




void procedure(){

    if(sym=="main")

       Scaner();

       if(sym=='(')

       identifier ();

       else error();

       Scaner();

       if(sym==')')

       Scaner();

       else error();

       if(sym=='{')

       procpart();

       else error;

       if(sym=='}')

       printf("right!");




} 

void procpart(){

     vdeclar();

     statelist();

} 


void vdeclar(){

    vlist();

    if(sym==';')

    Scaner();

    else error();
}
void vlist(){
                        /*变量说明表::==变量表:类型 |变量表:类型 ;变量说明表 */
    varitab();

    Scaner();

    if(sym==':')

   { Scaner();

    type(); }

    else error();

    if(sym==';')

    Scaner();

    vlist();

    }
void type(){

    if(sym=="int")

    Scaner();

    else if(sym=="real")
         Scaner();

    else if(sym=="char")
         Scaner();

         }
void varitab(){

     variable();

     Scaner();

     if(sym==',')

     Scaner();

     varitab();

     }

void  statelist(){

      state();

      if(sym==';')

      Scaner();

      statelist();
      }
void  state(){                      /*语句*/

      assigns();                   /*赋值语句*/

      whiles();
      }
void  assigns(){

      variable();

      Scaner();

      if(sym==":=")

      Scaner();

      expression();
      }
void  whiles(){

      if(sym=="while")

      Scaner();

      if(sym=='(')

      {Scaner();

      rela_exp()  ;}

      else error();

      if(sym==')')

      Scaner();

      else error();
      }
void  expression(){

      if(isnum||isalpha)      /*判断是数字或字母*/

      Scaner();

      else error();
      }
void  variable(){

      identifier();

      }
void  identifier(){

                             /*标识符->标识符字母|标识符数字|字母*/
      alpha();

      }
void  alpha(){

      if(isalpha)

      Scaner();

      else if(isnum)

      Scaner();

      else error();
      }

















void error(){ 

    printf("Error!\n"); 

} 


void main(){ 

    char ch; char str[20];

    int i = 0;  FILE *fin,*Scanin;

    printf("input file name! ");
    scanf("%s",Scanin);
    if ((fin=fopen(Scanin,"r"))==NULL)
    printf("cannt open file\n");
    else
   {   ch =fgetc(fin);

  while(ch != '$'){

       str[i++] = ch; 


       ch =fgetc(fin);
    } 

    str[i++] = '$'; 

    str[i] = '\0'; 

    Scaner(); 

    S(); 

    if (sym == '$') 

       printf("success!\n"); 

    else 

       printf("Fail!\n"); 

} 

}

⌨️ 快捷键说明

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