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

    实验一、递归下降分析实验

    专业 商业软件  姓名 李嘉嘉 学号201506110247

    一、 实验目的

         练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高语法分析方法的实践能力

    二、 实验内容和要求

         利用c语言构造语法分析程序

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

    1. 原理分析及流程图

    对于给定的文法:

    E> a E’ 

    E’—> = T

    T> F F

    F> ( F’) | F’

    F’—> bK   

    K> +F’ | -F’| ;

    1. 主要程序段及其解释:
    #include<stdio.h>
    #include<string.h>
    char str[50];   //要分析的字符串
    int ch=0;
    
           
    void scaner();
    void E();   
    void E2();                    
    void T();
    void F();   
    void F2();        
    void K();
    void error();
    
     
    
    main()
    {
        int len;
        printf("请输入算数表达式:");
        scanf("%s",str);
        len=strlen(str);
        str[len]='#';
        E();
        strcpy(str,"");
    }
    
     
    
     
    
    void scaner()
    {
    ch++;
    }
    
     
    
    void E()
    {
        if(str[ch]=='a')
        {
    scaner();
    printf("E() ");
    E2();
    }
    else error(); 
    }
    
     
    
    void E2()
    {
        if(str[ch]=='=')
        {
    printf("E2() ");
    scaner();
    T();
    }
    else error();
    }
    
     
    
    void T()
    {
     printf("T() ");
         F();
         F2();
    }
    
     
    
    void F()
    {
       if (str[ch]=='(')
        {     
        printf("F() ");
            scaner();
            F2();
            if(str[ch]==')')
            {
     scaner();
     F2();
            } 
        }
        else if(str[ch]=='b')
    {
    printf("F() ");
    F2();
    }
    }
    
     
    
    void F2()
    {
       if(str[ch]=='b')
       {
        printf("F2() ");
        scaner();
       K();
       }
    }
    
     
    
    void K()
    {
       if(str[ch]=='+'||str[ch]=='-')
       {
      printf("K() ");
      scaner();
       F2();
       }
       else if (str[ch]!=';')
       error();
       else if(str[ch]==';')
       printf("正确");
    }
    
     
    
    void error()
    {
    printf("
    错误!
    ");
    }
    

      

    1. 运行结果及分析

     

     

    四、 实验总结

    要清楚文法规则。

     

     

     

     

     

  • 相关阅读:
    linux 时间设置
    linux
    linux 关闭防火墙
    GIS-008-ArcGIS JS API 全图
    GIS-007-Terrain跨域访问
    GIS-006-ArcGIS API 空间关系
    Python 中文乱码
    GIS-005-Dojo & jQuery 事件处理
    GIS-004-Cesium版权信息隐藏
    GIS-003-在线地图下载及应用
  • 原文地址:https://www.cnblogs.com/veol/p/6188951.html
Copyright © 2011-2022 走看看