1231递归下降语法分析


#include<stdio.h>
#include<string.h>  
char str[10];
int index=0;
/*
E→TE'
E'→+TE'|-TE'|$
T→FT'
T'→*FT'|/FT'|$
F→(E)|i
*/
void E();          
void X();           
void T();         
void Y();            
void F();            
int id();           
int main()
{
    int len;
    printf("请输入算数表达式:");
    scanf("%s",str);
    len=strlen(str);
    str[len]='#';
    str[len+1]='';
    E();
    printf("正确语句!
");
    strcpy(str,"");
    index=0; 
    return 0;
}
void E()
{
    T();
    X();
}
void X()
{
    if(str[index]=='+')
    {
        index++;
        T();
        X();
    } 
    else if(str[index]=='-')
    {
        index++;
        T();
        X();
    } 
}
void T()
{
    F();
    Y();
}
void Y()
{
    if(str[index]=='*')
    {
        index++;
        F();
        Y();
    }
    else if(str[index]=='/')
    {
        index++;
        F();
        Y();
    }
}
void F()
{
    if(id())
    {
        index++;
    }
    else if (str[index]=='(')
    {     
        index++;
        E();
        if(str[index]==')')
        {
            index++; 
        }else{
            printf("
分析失败!
");
            exit (0);
        }
    } 
    else{
        printf("分析失败!
"); 
        exit(0);
    }
 }
int id()
{
     if(str[index]>='0'&&str[index]<='9')
    {
        while( str[index+1]>='0'&&str[index+1]<='9' )
        {
            index++;
        }
        if(str[index+1]>='a'&&str[index+1]<='z' )
            return 0;

        return 1;
    }
     else if(str[index]>='a'&&str[index]<='z' )
     {
         return 1;
     }
     else 
         return 0;
     
}


原文地址:https://www.cnblogs.com/xjy-gg/p/5089579.html