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

📄 main.c

📁 该程序是用c实现的词法语法分析器,使用方式参见程序说明.
💻 C
📖 第 1 页 / 共 3 页
字号:
          link[number].data[0]=s;
          //strcpy(link[number].type,"fuhao");
          link[number].type[0]=s;
          link[number].Isfirst=1;
          number++;
          
          }
            inToken[tokennumber][0]=s;
            tokennumber++; 
    }



void maketree(int i)
{
     int n,m;
     switch(i)
     {
            case 1:
                 struct tree *root1=(struct tree*)malloc(sizeof(struct tree));
                  struct tree *a=(struct tree*)malloc(sizeof(struct tree));
                 strcpy(root1.name,expression1[0]);
                 root1->son=a;
                 
                 for(n=2;n<8;n++)
                 {
                      //struct tree *a=(struct tree*)malloc(sizeof(struct tree));          
                      for(;root1->;m++)
                      {
                            root1=root1->next;
                      }
                      
                 }
                 
                 break;
            case 2:
                 break;
            case 3:
                 break;
            case 4:
                 break;
            case 5:
                 break;
            case 6:
                 break;
            case 7:
                 break;
            case 8:
                 break;
            case 9:
                 break;
            case 10:
                 break;
            case 11:
                 break;
            case 12:
                 break;
            case 13:
                 break;
            case 14:
                 break;
            case 15:
                 break;
            case 16:
                 break;
            case 17:
                 break;
            case 18:
                 break;
            case 19:
                 break;
            case 20:
                 break;
            case 21:
                 break;
            case 22:
                 break;
            case 23:
                 break;
            case 24:
                 break;
            case 25:
                 break;
            case 26:
                 break;
            case 27:
                 break;
            case 28:
                 break;
            case 29:
                 break;
            case 30:
                 break;
     }
}


// empty stack
void makeNull(struct STACK * s)
{
     s->top = MAXLENGTH;     
}

// get stack top
int top(struct STACK * s)
{
    return s->top;
}

// pop stack
void pop(struct STACK * s)
{
     s->top = s->top + 1;
}

// push stack
void push(char * x,struct STACK * s)
{     
     s->top = s->top - 1;
     strcpy(s->elements[s->top],x);     
}

//identify terminal
int indenT(char * t)
{
    if(!strcmp(t,"id"))
    {
        return 1;   
    }
    else if(!strcmp(t,"num"))
    {
         return 2;
    }
    else if(!strcmp(t,"relop"))
    {
         return 3;
    }
    else if(!strcmp(t,"addop"))
    {
         return 4;
    }
    else if(!strcmp(t,"mulop"))
    {
         return 5;
    }
    else if(!strcmp(t,"("))
    {
         return 6;
    }
    else if(!strcmp(t,")"))
    {
         return 7;
    }
    else if(!strcmp(t,"{"))
    {
         return 8;
    }
    else if(!strcmp(t,"}"))
    {
         return 9;
    }
    else if(!strcmp(t,";"))
    {
         return 10;
    }
    else if(!strcmp(t,"if"))
    {
         return 11;
    }
    else if(!strcmp(t,"else"))
    {
         return 12;
    }
    else if(!strcmp(t,"while"))
    {
         return 13;
    }
    else if(!strcmp(t,"!"))
    {
         return 14;
    }
    else if(!strcmp(t,"="))
    {
         return 15;
    }
    else if(!strcmp(t,"int"))
    {
         return 16;
    }
    else if(!strcmp(t,"$"))
    {
         return 17;
    }
    else 
    {
         return 0;
    }
}

// identify UnTerminal
int indenX(char * t)
{
    if(!strcmp(t,"Program"))
    {
        return 1;   
    }
    else if(!strcmp(t,"Slist"))
    {
         return 2;
    }
    else if(!strcmp(t,"Dlist"))
    {
         return 3;
    }
    else if(!strcmp(t,"A'"))
    {
         return 4;
    }
    else if(!strcmp(t,"D"))
    {
         return 5;
    }
    else if(!strcmp(t,"Olist"))
    {
         return 6;
    }
    else if(!strcmp(t,"O"))
    {
         return 7;
    }
    else if(!strcmp(t,"B'"))
    {
         return 8;
    }
    else if(!strcmp(t,"Type"))
    {
         return 9;
    }
    else if(!strcmp(t,"Expression"))
    {
         return 10;
    }
    else if(!strcmp(t,"Simple_expression"))
    {
         return 11;
    }
    else if(!strcmp(t,"F'"))
    {
         return 12;
    }
    else if(!strcmp(t,"Term"))
    {
         return 13;
    }
    else if(!strcmp(t,"C'"))
    {
         return 14;
    }
    else if(!strcmp(t,"Factor"))
    {
         return 15;
    }
    else if(!strcmp(t,"D'"))
    {
         return 16;
    }
    else if(!strcmp(t,"E'"))
    {
         return 17;
    }
    else 
    {
         return 0;
    }
}

void showExp(int i)
{    
     int j;
     switch(i)
     {
              case 1: 
                   {                  
                   for(j = 7;j > 1;j--)
                   {
                          push(expression1[j],&st) ;                          
                   }
                   for(j =0;j < 8;j++)
                   {
                           printf("%s ",expression1[j]);
                           fprintf(out,"%s ",expression1[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
                   }
              case 2:
                   for(j = 3;j > 1;j--)
                   {
                          push(expression2[j],&st) ;                          
                   }
                   for(j =0;j < 4;j++)
                   {
                           printf("%s ",expression2[j]);
                           fprintf(out,"%s ",expression2[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 3:
                   for(j = 2;j > 1;j--)
                   {
                          push(expression3[j],&st) ;                          
                   }
                   for(j =0;j < 3;j++)
                   {
                           printf("%s ",expression3[j]);
                           fprintf(out,"%s ",expression3[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 4:
                   /*for(j = 2;j > 1;j--)
                   {
                          push(expression4[j],&st) ;                          
                   }*/
                   for(j =0;j < 3;j++)
                   {
                           printf("%s ",expression4[j]);
                           fprintf(out,"%s ",expression4[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 5:
                   for(j = 3;j > 1;j--)
                   {
                          push(expression5[j],&st) ;                          
                   }
                   for(j =0;j < 4;j++)
                   {
                           printf("%s ",expression5[j]);
                           fprintf(out,"%s ",expression5[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 6:
                   for(j = 3;j > 1;j--)
                   {
                          push(expression6[j],&st) ;                          
                   }
                   for(j =0;j < 4;j++)
                   {
                           printf("%s ",expression6[j]);
                           fprintf(out,"%s ",expression6[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 7:
                   /*for(j = 2;j > 1;j--)
                   {
                          push(expression7[j],&st) ;                          
                   }*/
                   for(j =0;j < 3;j++)
                   {
                           printf("%s ",expression7[j]);
                           fprintf(out,"%s ",expression7[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 8:
                   for(j = 4;j > 1;j--)
                   {
                          push(expression8[j],&st) ;                          
                   }
                   for(j =0;j < 5;j++)
                   {
                           printf("%s ",expression8[j]);
                           fprintf(out,"%s ",expression8[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 9:
                   for(j = 3;j > 1;j--)
                   {
                          push(expression9[j],&st) ;                          
                   }
                   for(j =0;j < 4;j++)
                   {
                           printf("%s ",expression9[j]);
                           fprintf(out,"%s ",expression9[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 10:
                   for(j = 3;j > 1;j--)
                   {
                          push(expression10[j],&st) ;                          
                   }
                   for(j =0;j < 4;j++)
                   {
                           printf("%s ",expression10[j]);
                           fprintf(out,"%s ",expression10[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 11:
                   /*for(j = 2;j > 1;j--)
                   {
                          push(expression11[j],&st) ;                          
                   }*/
                   for(j =0;j < 3;j++)
                   {
                           printf("%s ",expression11[j]);
                           fprintf(out,"%s ",expression11[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 12:
                   for(j = 5;j > 1;j--)
                   {
                          push(expression12[j],&st) ;                          
                   }
                   for(j =0;j < 6;j++)
                   {
                           printf("%s ",expression12[j]);
                           fprintf(out,"%s ",expression12[j]);
                   }
                   printf("\n");
                   fprintf(out,"\n");
                   break;
              case 13:
                   for(j = 8;j > 1;j--)
                   {
                          push(expression13[j],&st) ;                          
                   }
                   for(j =0;j < 9;j++)

⌨️ 快捷键说明

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