zoukankan      html  css  js  c++  java
  • 递归下降分析实验报告

    实验三:语法分析实验

    一、    实验目的

     编制一个递归下降分析程序。

    二、    实验内容和要求

    输入:算术表达式;

    输出:判断结果(输入正确/错误)。

    三、实验方法、步骤及结果测试

    1.源程序名:递归下降分析.c

       可执行程序名:递归下降分析.exe

    2. 原理分析及流程图

     

    3. 主要程序段及其解释:

    #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) | i
    int i();           //i
    int main()
    {
        int len;
        int m;
    
            printf("请输入算数表达式:");
            scanf("%s",str);
            len=strlen(str);
            str[len]='#';
            str[len+1]='\0';
            E();
            printf("输入正确!\n");
            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(i())
        {
            index++;
        }
        else if (str[index]=='(')
        {     
            index++;
            E();
            if(str[index]==')')
            {
                index++; 
            }else{
                printf("\n分析失败!\n");
                exit (0);
            }
        } 
        else{
            printf("分析失败!\n"); 
            exit(0);
        }
    }
    int i()
    {
         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;
         
    }

    4. 运行结果及分析

  • 相关阅读:
    js 各种常用js验证
    js url校验
    最近遇到的技术问题
    a标签的target的四个值
    新系统用到的新知识
    7 天打造前端性能监控系统
    前端必读:浏览器内部工作原理
    怎么判断ThreadPool线程池里的任务都执行完毕
    docker 在window 10 专业版的安装 && .net core 在docker的部署
    .net core 中后台获取前台 数据(post)的方法
  • 原文地址:https://www.cnblogs.com/ffde/p/6187262.html
Copyright © 2011-2022 走看看