实验三 递归下降识别程序的构造

说明:本实验参照教材第126页例 4.1的文法为其构造递归下降识别程序。题目如下:
对于文法G4.2[E]:
E::=E+T|T T::=T*F|F F::=(E)|i
首先确定该文法存在左递归,消去之后同时也就消去了回溯性之后的等价文法〖G4.2〗^’ [E]:
E::=TE^’ E’::=+TE’|ε T::=FT^’ T’::=*FT’|ε F:;=(E)|i
二 实验说明
拿到一文法之后应该首先判断是否具有文法左递归和规则左递归,如果存在,应该首先进行消除,然后才可以进行下一步的操作
三 程序关键代码与数据结构
由于此代码比较简单,说明设置数组char str[100];用来存放用户输入的数据
int index = 0;设置变化过程中的下标。
试验完整代码:

#include "stdio.h"
char str[100];
int index = 0;
void E()
{
    T();
    E1();
}
void E1()
{
    if(str[index]=='+')
    {
        index++;
        T();
        E1();
    }
}
void T()
{
    F();
    T1();
}
void T1()
{
    if(str[index]=='*')
    {
        index++;
        F();
        T1();
    }
}
void F()
{
    if(str[index]=='i')
    {
        index++;
    }
    else
    {
        if(str[index]=='(')
        {
            index++;
            E();
            if(str[index]==')')
            {
                index++;
            }
            else
            {
                Error();
            }
        }
        else
        {
            Error();

        }
    }
}
void Error()
{
    printf("错误");
    exit(0);
}
int main()
{
    printf("请输入句子:");
    scanf("%s",&str);
    E();
    printf("正确语句");
}

缺陷:出错处理没有处理好,么有做到详细处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值