表达式语法分析——递归子程序法

#include
#include
#include
#include  //exit(0)函数头文件
using namespace std;
char str[100];
int num = 0;
int cur = 0;

void E();
void F();
void G();
void T();
void S();

void S(){
    if(str[cur] == '*'){
        printf("%d S-->*FS\n",num++);
        cur++;
        F();
        S();
    }else
        printf("%d S-->&\n",num++);
}
void G(){
    if(str[cur] == '+'){
        printf("%d G-->+TG\n",num++);
        cur++;
        T();
        G();
    }else
        printf("%d G-->&\n",num++);
}
void F(){
    if(str[cur] == 'i'){
        printf("%d F-->i\n",num++);
        cur++;
    }else if(str[cur] == '('){
        printf("%d F-->(E)\n",num++);
        cur++;
        E();
        if(str[cur] == ')'){
            cur++;
        }else{
            printf("error\n");
            exit(0);
        }
    }else{
            printf("error\n");
            exit(0);
    }
}
void T(){
    printf("%d T-->FS\n",num++);
    F();
    S();
}
void E(){
    printf("%d E-->TG\n",num++);
    T();
    G();
}
int main(){
    scanf("%s",str);
    E();
    if(str[cur]!='#')
        printf("error\n");
    else
        printf("accept\n");
    return 0;
}

你可能感兴趣的:(表达式语法分析——递归子程序法)