递归下降子程序

版权声明:如果能帮上忙最好啦,转载注明出处谢谢啦♪(・ω・)ノ https://blog.csdn.net/Rainbow__sea/article/details/80530056

递归下降子程序

1、实验目的

实现递归下降子程序的功能。

2、语言描述

利用函数相互递归实现递归下降子程序的基础功能。

3、具体实现

#include <cstdio>

#include <iostream>

#include <algorithm>

#include <cstring>

#include <cstdlib>

using namespace std;

char str[50];//输入要判断的字符串

int len;//字符串长度

int look=0;//记录下标

bool flag=false;//判断是否合法

void intput();

void next();

void output();

void E();

void E1();

void T();

void T1();

void F();

int main()

{

    intput();

    E();

    output();

    return 0;

}

void intput()

{

    printf("文法如下:\n");

    printf("G'[E]:(1) E->TE'\n      (2) E'->+TE'|ε\n");

    printf("      (3) T->FT'\n      (4) T'->*FT'|ε\n      (5) F->(E)|i\n");

    printf("请输入要分析的字符串(以‘#’号结束):\n");

    for(int i=0;i<50;i++)

    {

        scanf("%c",&str[i]);

        if(str[i]=='#')

        {

            len=i;

            break;

        }

    }

    printf("\n");

}

void next()

{

    if(look==len)

    {

        exit(0);

    }

    else

    {

        look++;

    }

}

void E()

{

    T();

    E1();

}

void E1()

{

    if(str[look]=='+')

    {

        next();

        T();

        E1();

    }

}

void T()

{

    F();

    T1();

}

void T1()

{

    if(str[look]=='*')

    {

        next();

        F();

        T1();

    }

}

void F()

{

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

    {

        next();

        E();

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

        {

            next();

        }

        else

        {

            flag=true;

        }

    }

    else if(str[look]=='i')

    {

        next();

    }

    else

        flag=true;

}

void output()

{

    printf("分析结果:字符串");

    for(int i=0;i<len;i++)

    {

        printf("%c",str[i]);

    }

    if(flag==false)

        printf("是合法的字符串\n");

    else

        printf("是非法的字符串\n");

}

4、实验截图


展开阅读全文

没有更多推荐了,返回首页