JMU软件工程编译原理实验三

实验三递归下降语法分析程序构造

 1.实验目的熟悉语法分析阶段的要求,掌握LL(1)语法分析的原理,利用递归下降方式构造语法分析器。

 2.实验设备硬件:PC 机一台软件:Windows 系统,高级语言集成开发环境

3.实验内容

根据要求构造递归下降语法分析器

4.实验要求及步骤

文法G(E):

E→TE’

                        

E’→+TE’ | 

                        

T→FT’      

                         

T’→*FT’|

                        

F→(E) | i

                        

自设10个输入语句(每个语句多加一个#作为结束标记),展示这10个语句经该语法分析器分析后的结果,如果正确输出“Right”,错误输出“ERROR”并输出判错时指针所指字符。

 代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char str[10];
int index = 0;


void E();  
void EP(); 
void T();  
void TP();  
void F();  


int main() {
    int len;
    int n;
    printf("请输入要测试的次数:");
    scanf("%d", &n);
    while (n--) {
        printf("请输入要测试的语句:");
        scanf("%s", str);
        len = strlen(str);
        str[len] = '#';
        str[len + 1] = '\0';
        E();
        if (str[index] == '#')
            printf("Right!\n");
        else {
            printf("ERROR!\n");
            printf("此时指针所指字符为:%c\n", str[index]);
        }
        strcpy(str, "");
        index = 0;
    }
    return 0;
}
void E() {
    T();
    EP();
}
void EP() {
    if (str[index] == '+') {
        index++;
        T();
        EP();
    }
}
void T() {
    F();
    TP();
}
void TP() {
    if (str[index] == '*') {
        index++;
        F();
        TP();
    }
}
void F() {
    if (str[index] == 'i') {
        index++;
    }
    else if (str[index] == '(') {
        index++;
        E();
        if (str[index] == ')') {
            index++;
        }
        else {
            printf("ERROR!\n");
            printf("此时指针所指字符为:%c\n", str[index]);
            exit(0);
        }
    }
    else {
        printf("ERROR!\n");
        printf("此时指针所指字符为:%c\n", str[index]);
        exit(0);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hiOoo.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值