递归下降分析程序

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

专业:商业软件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就会提示正确。

 

 

一、        实验总结

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

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

原文地址:https://www.cnblogs.com/cairuiqi/p/6188534.html