• 递归下降分析程序


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

    专业:商业软件2班   姓名:蔡瑞奇  学号:20150611061

    一、        实验目的

     

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

    二、        实验内容和要求

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

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

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

    可执行程序名:×××.exe

    1. 1.      原理分析及流程图

    主要总体设计问题。

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

    ·用户输入一段表达式,然后调用S这个函数,如果遇到a或^这两个字符的话,就跳到下一个字符,否则如果是左括号的话,就读取下一个字符并调用这个T函数,在T函数里面又调用了S和X这两个函数,同样的,在X函数里,先判断是不是‘,’如果不是,读取下一个字符,然后再调用S和X两个函数。

    1. 2.      主要程序段及其解释:

    实现主要功能的程序段,重要的是程序的注释解释。

    #include<stdio.h>

    #include<string.h>

    #include<stdlib.h>

    char str[10];

    int index=0;

    void S();

    void X();

    void T();

    main()

    {

        int len;

        int m;

        printf("请输入要测试的次数: ");

        scanf("%d",&m);

        while(m--)

        {

               printf("请输入表达式: ");

               scanf("%s",str);

               len=strlen(str);

               str[len]='#';

               str[len+1]='';

               S();

               printf("语句正确! ");

               strcpy(str,"");

               index=0;

        }

        return 0;

    }

    void S()

    {

        if(str[index]=='a'||str[index]='^')

        {

               index++;

        }

        else if(str[index]=='(')

        {

               index++;

               T();

               if(str[index]==')')

               {

                      index++;

               }

               else

               {

                      printf("分析失败!");

                      exit(0);

               }

        }

               else

               {

                      printf("分析失败!");

                      exit(0);

               }

    }

    void T()

    {

        S();

        X();

    }

    void X()

    {

        if(str[index]==',')

              

        {index++;

               S();

               X();

        }

        else

        {

               printf("分析失败! ");

               exit(0);

        }

    }

    1. 3.      运行结果及分析

    一般必须配运行结果截图,结果是否符合预期及其分析。

       (截图需根据实际,截取有代表性的测试例子)

    感觉这个结果和我想要的不大一样,每次输入一个a的时候,最后的结果老是能够得到正确的结果,例如像a????这样的语句它也能够提示正确,反正它第一个输入的只要是a就会提示正确。

     

     

    一、        实验总结

    心得体会,实验过程的难点问题及其解决的方法。

    个人感觉这个不难,只是用递归函数就可以做了,不过难的是在那些函数里面如何去判断条件,这个才是重难点,因为本身编译原理就难,再加上没有太多的电脑知识基础,所以写出来的程序还是有些问题的。

  • 相关阅读:
    CSS基础(二)-- CSS选择器之ID选择器
    CSS基础(一)-- CSS的存在形式以及优先级
    HTML--Boby部分之fieldset标签
    HTML--Boby部分之label标签
    HTML--Boby部分之表格
    HTML--Boby部分之<img>标签
    rpm和yum的用法
    网络模型
    内存扩容
    磁盘介绍
  • 原文地址:https://www.cnblogs.com/cairuiqi/p/6188534.html
Copyright © 2020-2023  润新知