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

📄 cifafenxi.c

📁 不是专业的词法分析 只适合编译原理课程设计(再难就不像是学生做的了)
💻 C
📖 第 1 页 / 共 2 页
字号:

            else if (ch == '*')
            {   /* *判断 */
                GetAChar(fp1,&ch);
                if (ch == '*')

                  {   GetAChar(fp1,&ch);
                      if (ch == '*')
                      {
                       printf("此处有错误的表示方式~\n");
                       fprintf(fp3,"<--$error,%d,%d,此处有错误的表示方式~-->\n",code,hang);
                      }
                      else
                      {
                          if (Pha(ch))
                           {
                               while (Pha(ch) ||Num(ch))
                               {
                              Join(string,&ch);
                              GetAChar(fp1,&ch);

                               }
                               code=63;
                              printf("<--$pingfang,%d,%d,**%s-->\n",code,hang,string);
                           }
                                else
                                  {
                                     code=53;
                                     printf("<--$POWER,%d,%d,**-->\n",code,hang);
                                     fprintf(fp2,"<--$POWER,%d,%d,**-->\n",code,hang);
                                     fprintf(fp6,"<--%d,**-->\n",hang);
                                   }
                       }
                   }
                     else
                       {    if (Pha(ch))
                           {
                               while (Pha(ch) ||Num(ch))
                               {
                              Join(string,&ch);
                              GetAChar(fp1,&ch);

                               }
                               code=62;
                              printf("<--$cheng,%d,%d,*%s-->\n",code,hang,string);
                           }
                          /* Return_A(fp1,&ch);   */
                           else
                           {  Return_A(fp1,&ch);
                           code=54;
                           printf("<--$STAR,%d,%d,*-->\n",code,hang);
                           fprintf(fp2,"<--$STAR,%d,%d,*-->\n",code,hang);
                           fprintf(fp6,"<--%d,%c-->\n",hang,ch);
                           }
                        }
                   }


            else if (ch == ';')
            {     /* ;判断 */
                  code=55;
                   printf("<--$SEMICOLON,%d,%d,%c-->\n",code,hang,ch);
                   fprintf(fp2,"<--$SEMICOLON,%d,%d,%c-->\n",code,hang,ch);
                   fprintf(fp6,"<--%d,%c-->\n",hang,ch);
            }
           else if (ch == '(')
           {   /* (判断 */
               code=56;
               printf("<--$LPAR,%d,%d,(-->\n",code,hang);
               fprintf(fp2,"<--$LPAR,%d,%d,%c-->\n",code,hang,ch);
               fprintf(fp6,"<--%d,%c-->\n",hang,ch);
           }
           else if (ch == ')')
           {   /* )判断 */
               code=57;
               printf("<--$RPAR,%d,%d,%c,-->\n",code,hang,ch);
               fprintf(fp2,"<--$RPAR,%d,%d,%c-->\n",code,hang,ch);
               fprintf(fp6,"<--%d,%c-->\n",hang,ch);
           }
           else if (ch == '{')
            {  /* {判断 */
               code=58;
               printf("<--$LBRACE,%d,%d,%c-->\n",code,hang,ch);
               fprintf(fp2,"<--$LBRACE,%d,%d,%c-->\n",code,hang,ch);
               fprintf(fp6,"<--%d,%c-->\n",hang,ch);
            }
           else if (ch == '}')
           {   /* }判断 */
               code=59;
               printf("<--$RBRACE,%d,%d,}-->\n",code,hang);
               fprintf(fp2,"<--$RBRACE,%d,%d,}-->\n",code,hang);
               fprintf(fp6,"<--%d,%c-->\n",hang,ch);
            }
            else if (ch == '"')
           {   /* ”判断 */
               code=65;
               printf("<--$YINHAO,%d,%d,%c-->\n",code,hang,ch);
               fprintf(fp2,"<--$YINHAO,%d,%d,%c-->\n",code,hang,ch);
               fprintf(fp6,"<--%d,%c-->\n",hang,ch);
            }
           else if(ch=='\b')
           {    /* 转义符\b判断 */
                code=66;
               printf("<--$ZHUANYI,%d,%d,b-->\n",code,hang);
               fprintf(fp2,"<--$ZHUANYI,%d,%d,b-->\n",code,hang);
               fprintf(fp6,"<--%d,%c-->\n",hang,ch);
            }
            else if(ch=='\t')
           {    /* 转义符\t判断 */
                code=66;
               printf("<--$ZHUANYI_1,%d,%d,t-->\n",code,hang);
               fprintf(fp2,"<--$ZHUANYI_1,%d,%d,t-->\n",code,hang);
               fprintf(fp6,"<--%d,%c-->\n",hang,ch);
            }
            /* GetAChar(fp1,&ch);
            else if(ch=='"')
             {   code=63;
                 GetAChar(fp1,&ch);
                 while(ch!='"'&&ch!=EOF)
                   {
                       Join(string,&ch);
                       GetAChar(fp1,&ch);
                       if(ch==EOF)
                      { printf("'''' 无结尾,此处有错误,请改正~\n");
                        getch();
                        return(0);
                      }
                   }
                  printf("<--$talk,%d,%d,''%s''-->\n",code,hang,string);
                  fprintf(fp2,"<--$talk,%d,%d,''%s''-->\n",code,hang,string);
               }*/
            else if(ch=='<')
             {     code=64;
                 GetAChar(fp1,&ch);
                 while(ch!='>')
                   {
                       Join(string,&ch);
                       GetAChar(fp1,&ch);
                       if(ch==EOF)
                      { printf("'<' 无结尾,此处有错误,请改正~\n");
                        fprintf(fp3,"<--$error,%d,%d,此处'<' 无结尾-->\n",code,hang);
                        getch();
                        return(0);
                       }
                   }
                  printf("<--$talk_2,%d,%d,<%s>-->\n",code,hang,string);
                  fprintf(fp2,"<--$talk_2,%d,%d,<%s>-->\n",code,hang,string);
               }

             else    if (ch=='/')
               {
                GetAChar(fp1,&ch);

                if (ch == '*')
                  {
                     code=61;
                     GetAChar(fp1,&ch);



                    while(ch != '*'&&ch !=EOF)
                       {
                         Join(string,&ch);
                         GetAChar(fp1,&ch);
                        }
                           GetAChar(fp1,&ch);
                           if(ch=='/')
                               { printf("<--$note,%d,%d,/*%s*/-->\n",code,hang,string);
                                 fprintf(fp2,"<--$note,%d,%d,/*%s*/-->\n",code,hang,string);
                                }
                              else
                              {
                              printf("\n此处有错\n");
                              fprintf(fp3,"<--$error,%d,%d,此处存在注释不完全错误-->\n",code,hang);
                              }
                   }
                   else
                       {
                           Return_A(fp1,&ch);
                           code=62;
                           printf("<--$XIAHUA,%d,%d,/-->\n",code,hang);
                           fprintf(fp2,"<--$XIAHUA,%d,%d/-->\n",code,hang);
                        }
                 }
       fclose(fp4) ;
   }

   printf("词法分析结束,按任意键结束!");
   getch();

} 
/* 主程序 */
void main()
{
FILE *fp1,*fp2,*fp3,*fp5,*fp6;
char ch,ch1;
char file_name;
printf("请输入文件名:\n");
scanf("%s",&file_name);
if((fp1=fopen(&file_name,"rt"))==NULL)
{ 
    printf("文件名有错,或者文件路径有错,按任意键重新输入: \n");
    scanf("%s",&file_name);
    if((fp1=fopen("in.txt","rt"))==NULL)
        { printf("文件名有错,或者文件路径有错,请核实后运行,按任意键退出~\n");
          getch();
          exit(1);
         }

}
  printf("分析结果为(保存文件为out.txt):\n");
   printf("输出的格式为:<--$助记符,种别编码,行号,代码-->\n");

  /*  ch=fgetc(fp1);
    while(ch!=EOF)
    {
       putchar(ch);
       ch=fgetc(fp1);
       }
      */

if((fp2=fopen("out.txt","wt+"))==NULL) 
{ 
printf("不能创建out.txt文件,按任意键退出~");
getch();
exit(1); 
} 

if((fp3=fopen("error.txt","wt+"))==NULL)
{ 
printf("不能创建error.txt文件,按任意键退出~");
getch();
exit(1); 
}
if((fp5=fopen("biaoshifu.txt","wt+"))==NULL)
{ 
printf("不能创建biaoshifu.txt文件,按任意键退出~");
getch();
exit(1); 
}
if((fp6=fopen("fuhao.txt","wt+"))==NULL)
{ 
printf("不能创建fuhao.txt文件,按任意键退出~");
getch();
exit(1); 
}  
cifafenxi(fp1,fp2,fp6,fp3,fp5);
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp5);
fclose(fp6);
} 
/*======================最后再次鄙视下不排队检查作业的人们=====================*/

⌨️ 快捷键说明

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