编译原理实验二递归下降分析语法

 产生式如下:

运行结果截图:

#include<iostream>
#include<cstring>
using namespace std;

int k;
char sentence[50];
void A(char);
void M(char);
int flag=1;

void A(char ch){
  if(ch == '#');
  else if(ch == 'a'){
   k++;
   ch = sentence[k];
   M(ch);
 }
 else if(ch =='e'){
    k++;
 }
 else{
    flag =0 ;
 }
}

void M(char ch){
  if(ch == '#') return;
  else if(ch == 'b'||ch == 'd');//从A路分析,当为b或者d时,M当做空处理
  else{
    ch = sentence[k];
    A(ch);
    k++;
    //cout<<sentence[k]<<endl;
    if(sentence[k] == 'd'){//从H路分析
        k++;
        if(sentence[k] != '#'){
            flag=0;
        }
    }
    else{
        flag = 0;
    }
  }
}

void H(char ch){
   if(ch == '#') return;
   else if(ch == 'a'){
    k++;
    ch = sentence[k];
    M(ch);
    //cout<<flag<<endl;
    //在M中分析了就不需要在这再写d了
    }
    else if(ch == 'd'){
    k++;
    if(sentence[k] != '#'){
            flag=0;
        }
    }
    else{
      flag = 0;
    }
}

void S(char ch){
  if(ch == '#');
  else if(ch =='a'){
    k++;
    ch = sentence[k];
    H(ch);
  }

   else {
    flag = 0;
   }
}



int main(){
 do{
 cout<<"请输入一个句子,以#结尾"<<endl;
 cin>>sentence;
   k=0;
   flag=1;
 S(sentence[k]);
 if(flag == 1){
    cout<<"是文法给定的句子\n\n";
 }
 else{
    cout<<"不是文法给定的句子\n\n";
 }
 }while(1);

}
发布了69 篇原创文章 · 获赞 50 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq873044564/article/details/89814663
今日推荐