• 大小: 180KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-16
  • 语言: 其他
  • 标签:

资源简介

编译原理实验 语义分析与中间代码生成 Sample语言的语义和代码生成规则,熟悉Sample语言的语义分析和代码生成过

资源截图

代码片段和文件信息

/*
  文法G(S)
  S-->DGWE
  G-->c=R
  R-->dTe|d
  T-->+|-|*|/
  E-->aFb
  F--> >|<
*/

#include 
#include
#include
#include

char a[50]g[50][50]; //a[50]保存输入串g[50][50]保存四元式
char ch;
int i1=0i2=0i3=0; //i1通过自加来取得a[i1]输入串中的字符 i2用来选择用哪种四元式i3用来选择用‘W‘的报错
int total=0;  

void S();
void D();
void G();
void W();
void E();
void R();
void T();
void F();



void main()
{   
   int pj=0;
   char str[20];
   
  
    printf(“请输入do-while语句(D代表doW代表while)并以#结束:\n“);
do{
  scanf(“%s“str);
  
  if(strcmp(str“do“)==0)
  { 
  a[j]=‘D‘;
  j++;
  }
  else if(strcmp(str“while“)==0)
  { 
  a[j]=‘W‘;
  j++;
  }
  else if(strcmp(str“c=d+e“)==0)
  { 
  a[j]=‘c‘;
  a[j+1]=‘=‘;
  a[j+2]=‘d‘;
  a[j+3]=‘+‘;
  a[j+4]=‘e‘;
  j=j+5;
  continue;
  }
  else if(strcmp(str“c=d-e“)==0)
  {
  a[j]=‘c‘;
  a[j+1]=‘=‘;
  a[j+2]=‘d‘;
  a[j+3]=‘-‘;
  a[j+4]=‘e‘;
  j=j+5;
  continue;
  }
  else if(strcmp(str“c=d*e“)==0)
  {
  a[j]=‘c‘;
  a[j+1]=‘=‘;
  a[j+2]=‘d‘;
  a[j+3]=‘*‘;
  a[j+4]=‘e‘;
  j=j+5;
  continue;
  }
  else if(strcmp(str“c=d/e“)==0)
  {
  a[j]=‘c‘;
  a[j+1]=‘=‘;
  a[j+2]=‘d‘;
  a[j+3]=‘/‘;
  a[j+4]=‘e‘;
  j=j+5;
  continue;
  }
  else if(strcmp(str“a>b“)==0)
  {
  a[j]=‘a‘;
  a[j+1]=‘>‘;
  a[j+2]=‘b‘;  
  j=j+3;
  continue;
  }
  else if(strcmp(str“a   {
  a[j]=‘a‘;
  a[j+1]=‘>‘;
  a[j+2]=‘b‘;  
  j=j+3;
  continue;
  }
  else {
        for(unsigned int i=0;i {
   a[j+i]=str[i];

}
     j=j+strlen(str);
  
  }
 
}while(strcmp(str“#“)!=0);
     printf(“\n“);
printf(“输入串变为%s\n“a);
printf(“\n“);

ch=a[0];

  
       S();
       
      
   if (ch==‘#‘)  
       {   printf(“accept\n“);
              printf(“四元式为:\n“);
              p=0;
              for(;p   {
    printf(“10%d %s\n“pg[p]);   

  }                               
              

       }

       else {

              printf(“error\n“);

              printf(“回车返回\n“);

              getchar();getchar(); 

              return; 

       }

       printf(“\n“);

       printf(“回车返回\n“);

       getchar();
       getchar();
}

void S()
{
 
   printf(“%d\tS-->DGWE\n“total);total++;//total用来记数
     
   D();
   G();
   
   
   
}

void D()

 if(ch!=‘D‘)
 { printf(“第%d个字符%c为有非法字符请按回车返回!!“i1+1ch);
  getchar();
      getchar();
  exit(1);}
       ch=a[++i1];

}
 
void G()
{  int i=i1+1;
  
  if(ch!=‘c‘)
 { printf(“第%d个字符%c为有非法字符请按回车返回!!“i1+1ch);
  getchar();
      getchar();
  exit(1);}
  if(a[i]!=‘=‘)
 { printf(“第%d个字符%c为有非法字符请按回车返回!!“i+1a[i]);
  getchar();
      getchar();
  exit(1);}

  printf(“%d\tG-->c=R\n“total);total++;
  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      33792  2010-06-27 17:09  语义分析\Debug\vc60.idb

     文件      45056  2010-06-27 16:58  语义分析\Debug\vc60.pdb

     文件     192626  2010-06-27 16:58  语义分析\Debug\语义.exe

     文件     189700  2010-06-27 16:58  语义分析\Debug\语义.ilk

     文件      23491  2010-06-27 16:58  语义分析\Debug\语义.obj

    I.A....    227508  2010-06-27 16:58  语义分析\Debug\语义.pch

     文件     369664  2010-06-27 16:58  语义分析\Debug\语义.pdb

    I.A....      5729  2010-06-27 16:54  语义分析\语义.cpp

     文件       3379  2010-06-27 16:58  语义分析\语义.dsp

     文件        533  2010-06-27 17:11  语义分析\语义.dsw

     文件      41984  2010-06-27 17:39  语义分析\语义.ncb

     文件      48640  2010-06-27 17:39  语义分析\语义.opt

     文件        744  2010-06-27 16:58  语义分析\语义.plg

     目录          0  2010-06-27 16:58  语义分析\Debug

     目录          0  2010-06-27 17:39  语义分析

----------- ---------  ---------- -----  ----

              1182846                    15


评论

共有 条评论

相关资源