zoukankan      html  css  js  c++  java
  • 递归下降分析程序

    #include<stdio.h>
    #include<string.h> 
    char str[10];
    int index=0;
    void E();            //E->TX;
    void X();            //X->+TX|-TX| e
    void T();            //T->FY
    void Y();            //Y->*FY |/fy| e
    void F();            //F->(E) | id
    int id();           //id
    int main()
    {
        int len;
        int m;

            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;
        
    }

  • 相关阅读:
    deepin linux手工更新系统
    redis使用redis-cli查看所有的keys及清空所有的数据
    使用浏览器地址栏调用CXF Webservice的写法
    windows 80端口被占用
    How to install 64-bit Google Chrome 28+ on 64-bit RHEL/CentOS 6 or 7
    CAS 单点登录流程
    Restful是什么,SOAP Webservice和RESTful Webservice
    SpringMVC中的@PathVariable
    VMWare安装苹果操作系统OS X
    eclipse(adt-bundle)的Android SDK Manager下载不了谷歌的东西怎么办?
  • 原文地址:https://www.cnblogs.com/xiseven/p/5092654.html
Copyright © 2011-2022 走看看