• 递归下降分析实验报告


                                                                          实验三:语法分析实验

     

     

    一、        实验目的

     

    编写递归下降分析语法分析程序。

    二、        实验内容和要求

    输入:输入算术表达式以“#”结束

    输出:是否分析成功

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

     1.      源程序名:压缩包文件(rarzip)中源程序名

    语法分析.c

    可执行程序名:语法分析.exe

     2.      原理分析及流程图

    主要总体设计问题。

    (包括存储结构,主要算法,关键函数的实现等)

    E→TX

    X→(+T|-T)X|ε

    T→FY

    Y→(*F|/F)Y|ε

    F→(E)|i

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

    #include<stdio.h>
    #include<string.h>  
    char str[10];
    int index=0;
    void E();            //E->TX;
    void X();            //X->+TX|-TX|ε
    void T();            //T->FY
    void Y();            //Y->*FY |/FY|ε
    void F();            //F->(E) | i
    int i();             //i
    int main()
    {
        int len;
        int m;
        printf("请输入要测试的次数:");
        scanf("%d",&m);  
        printf("输入表达式以#结束
    ");
        while(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(i())
        {
            index++;
        }
        else if (str[index]=='(')
        {     
            index++;
            E();
            if(str[index]==')')
            {
                index++; 
            }else{
                printf("分析失败!
    ");
                exit (0);
            }
        } 
        else{
            printf("分析失败!
    "); 
            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.  运行结果及分析

    四、    实验总结

    一开始不太会写,参考了网上的一些资源 

    通过学习了语法分析,再经过实验,让我对语法分析有一定的认识和了解。递归下降分析法,是

    一种确定的自顶向下分析技术,它的实现思想是,对文法中分别代表一种语法成分的每个非终结符号编写

    一个子程序,已完成非终结符号所对应的语法成分的分析任务。在分析过程中调用一系列过程或函数,对

    源程序进行语法语义分析直到整个程序处理结束。

  • 相关阅读:
    第一篇博客
    【面试大系】PHP程序员的知识盘点
    【PHP资源】PHP 资源大全
    【前端经纬】将页面元素定位
    大爱卡农三百年
    【夯实PHP基础】PHP标准库 SPL
    【http抓包】记录一次抓手机app的接口
    【算法】PHP实现冒泡排序和快速排序--防遗忘
    Apache的初中级面试题
    【生活感悟系列】感悟在一瞬间(不断完善中)
  • 原文地址:https://www.cnblogs.com/stcy520/p/6188891.html
Copyright © 2020-2023  润新知