zoukankan      html  css  js  c++  java
  • 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;
         
    }


  • 相关阅读:
    for 循环/ while 循环/ do-while 循环
    让元素脱离动画流
    缓存布局信息
    一个程序员的管理心得
    CenOS下Tomcat外网不能访问
    卸载CentOS自带的JDK并配置指定JDK环境变量
    Linux系统安装Mysql
    系统的非功能性需求
    做软件的追求
    路途小歇
  • 原文地址:https://www.cnblogs.com/xjy-gg/p/5089579.html
Copyright © 2011-2022 走看看