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

    实验 递归下降分析程序实验

    专业 计算机科学与技术   姓名 王晓峰  学号 201506110163

    一、        实验目的

     

            通过设计,编制,调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构的分析。

            

    二、        实验内容和要求      

         输入:源程序字符串

         输出:正确或者错误

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

         

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

          2.      原理分析及流程图

           这里的存储结构主要是用数组来存储字符串。

           采用递归子程序方法进行语法分析,对文法中的每个非终结符号按其产生式结构产生相应的语法分析子程序,完成相应的识别任务。其中终结符产生匹配命令,非终结符则产生调用命令。每次进入子程序之前都预先读入一个单词。简单地说就是识别程序由一组子程序组成,每个子程序对应于一个非终结符号。

    代码如下:

    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
    char str[10];   //记录要分析的字符串
    int x=0;        //记录第一个字符
    void E();           
    void X();           
    void T();           
    void Y(); 
    void F(); 
     
    int main()
    {
        int len;
        printf("请输入算数表达式:(以#为结束)");
        scanf("%s",str);
        len=strlen(str);
        str[len]='#';
        str[len+1]='';
        E();
        printf("
    True!
    ");
        strcpy(str,"");
        x=0;
        return 0;
    }
     
    void E()
    {
        T();
        X();
    }
     
    void X()
    {
        if(str[x]=='+'||str[x]=='-')
        {
            x++;
            T();
            X();
        } 
    }
     
    void T()
    {
        F();
        Y();
    }
     
    void Y()
    {
        if(str[x]=='*'||str[x]=='/')
        {
            x++;
            F();
            Y();
        }
    }
     
    void F()
    {
        if(str[x]>='a'&&str[x]<='z')
        {
            x++;
        }
        else if(str[x]>=0&&str[x]<=9)
        {
            x++;
        }
        else if (str[x]=='(')
        {     
            x++;
            E();
            if(str[x]==')')
            {
                x++; 
            }
            else
            {
                printf("
    Error!
    ");
                exit(0);
            }
        } 
        else
        {
            printf("
    Error!
    "); exit(0); } }

    E(),X(),T(),Y(),F()

    上面几个函数只适用于有括号,字母,加减乘除的算式表达式分析,像其他符号的由于时间问题还有没有添加进去。

    结果测试

           

  • 相关阅读:
    阿里云服务器购买后的配置指南
    第一阶段总结
    RDD的checkpoint机制和键值对RDD数据分区
    广播变量与累加器
    Spark的监控
    Spark和MR的区别
    hadoop离线项目处理流程
    Flume(一)
    Sparkcore高级应用3
    SparkCore高级应用2(Spark on yarn)
  • 原文地址:https://www.cnblogs.com/wxf2/p/6187227.html
Copyright © 2011-2022 走看看