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

资源简介

WHILE循环语句的翻译程序设计(递归下降法、输出四元式)

资源截图

代码片段和文件信息

/*
  文法G(S)
  S-->WEG   W代表while
  E-->aFb   E代表while的执行条件
  F--> >|<  
  G-->c=R
  R-->dTe|d  R为一个
  T-->+|-|*|/
*/


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


void S();  //文法开始
void W();  //判断输入是否为while文法.是 则字符串以W开头
void E();  //while(E)
void F();  //“<“or“>“
void G();
void R();
void T();

void main()
{   
   int pj=0;
   char str[20];
   
  
    printf(“请输入while语句并以#结束:\n“);
do{
  scanf(“%s“str);

  if(strcmp(str“W“)==0)
  { 
  a[j]=‘W‘;
  j++;
  }
  else if(strcmp(str“a>b“)==0)
  {
  a[j++]=‘a‘;
  a[j++]=‘>‘;
  a[j++]=‘b‘;  
  continue;
  }
  else if(strcmp(str“a   {
  a[j++]=‘a‘;
  a[j++]=‘<‘;
  a[j++]=‘b‘;  
  continue;
  }
  else if(strcmp(str“c=d+e“)==0)
  { 
  a[j++]=‘c‘;
  a[j++]=‘=‘;
  a[j++]=‘d‘;
  a[j++]=‘+‘;
  a[j++]=‘e‘;
  continue;
  }
  else if(strcmp(str“c=d-e“)==0)
  {
  a[j++]=‘c‘;
  a[j++]=‘=‘;
  a[j++]=‘d‘;
  a[j++]=‘-‘;
  a[j++]=‘e‘;
  continue;
  }
  else if(strcmp(str“c=d*e“)==0)
  {
  a[j++]=‘c‘;
  a[j++]=‘=‘;
  a[j++]=‘d‘;
  a[j++]=‘*‘;
  a[j++]=‘e‘;
  continue;
  }
  else if(strcmp(str“c=d/e“)==0)
  {
  a[j++]=‘c‘;
  a[j++]=‘=‘;
  a[j++]=‘d‘;
  a[j++]=‘/‘;
  a[j++]=‘e‘;
  continue;
  }
 
  else {
        for(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<=i2+1;p++)
  {
    printf(“%d %s\n“ps[p]);   

  }                               
              

       }

       else {

              printf(“error\n“);

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

              getchar();getchar(); 

              return; 

       }

       printf(“\n“);

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

       getchar();
       getchar();
}

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

void W()
{
 if(i3==0)
 { 
   ch=a[i1++];
   if(ch!=‘W‘)
   { 
   cout<<“不为W2“<   printf(“第%d个字符%c为有非法字符请按回车返回!!“i1+1ch);
  getchar();
      getchar();
  exit(1);
  }
 
 }
 else{
 ++i1;
 ch=a[++i1];
 if(ch!=‘W‘)
   { 
 cout<<“不为W“<   printf(“第%d个字符%c为有非法字符请按回车返回!!“i1+1ch);
  getchar();
      getchar();
  exit(1);
  }
 }
}

void E()
{
  ch=a[i1++];
   if(ch!=‘a‘)
   { 
   cout<<“不为a“<   printf(“第%d个字符%c为有非法字符请按回车返回!!“i1+1ch);
  getchar();
      getch

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

     文件        554  2010-01-10 20:08  while语句递归下降法分析\while语句递归下降法分析.dsw

     文件      33792  2010-01-10 20:10  while语句递归下降法分析\while语句递归下降法分析.ncb

     文件      41984  2010-01-10 20:09  while语句递归下降法分析\Debug\vc60.idb

     文件      61440  2010-01-10 20:09  while语句递归下降法分析\Debug\vc60.pdb

     文件     282224  2010-01-10 20:09  while语句递归下降法分析\Debug\while语句递归下降法分析.pch

     文件      26516  2010-01-10 20:09  while语句递归下降法分析\Debug\while语句递归下降法分析.obj

     文件     242356  2010-01-10 20:09  while语句递归下降法分析\Debug\while语句递归下降法分析.ilk

     文件     221271  2010-01-10 20:09  while语句递归下降法分析\Debug\while语句递归下降法分析.exe

     文件     418816  2010-01-10 20:09  while语句递归下降法分析\Debug\while语句递归下降法分析.pdb

     文件       5467  2010-01-10 20:09  while语句递归下降法分析\while语句递归下降法分析.cpp

     文件        973  2010-01-10 20:09  while语句递归下降法分析\while语句递归下降法分析.plg

     文件      48640  2010-01-10 20:10  while语句递归下降法分析\while语句递归下降法分析.opt

     文件       4490  2010-01-10 20:10  while语句递归下降法分析\while语句递归下降法分析.dsp

     目录          0  2010-01-10 20:08  while语句递归下降法分析\Debug

     目录          0  2010-01-10 20:08  while语句递归下降法分析

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

              1388523                    15


评论

共有 条评论