编译原理 实验3 递归下降语法分析程序设计

编译原理 实验3 递归下降语法分析程序设计实验目的】练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高语法分析方法的实践能力【实验要求】利用某一高级程序设计语言构造语法分析程序【具体要求】对于给定的文法G[E]E->TE’E’->+TE’|εT->F…

大家好,又见面了,我是你们的朋友全栈君。

实验目的】

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

【实验要求】

    利用某一高级程序设计语言构造语法分析程序  

【具体要求】对于给定的文法G[E]

              E->TE’

             E’->+TE’ | ε

            T->FT’

            T’->*F T’| ε

            F->(E) | i

     采用递归下降语法分析法编写语法分析程序,该语法分析程序判断输入的字符串是否符合上述文法,并能够输出相应的结果(是语法成分或不是语法成分)。

 

编译原理 实验3 递归下降语法分析程序设计

 

上面一版有个bug当输入 i)会提示正确

下面做了修改, 第29-35行,可能还有其他错误,欢迎留言。

/*
    实验名称:实验3  递归下降语法分析程序设计
    学号:
    姓名:niu91(859222829)
    班级:
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str[10];
int index = 0;
void E();  // E->TX;
void X();  // X->+TX | e
void T();  // T->FY
void Y();  // Y->*FY | e
void F();  // F->(E) | i
int main() {
    int len;
    int m;
    printf("请输入要测试的次数:");
    scanf("%d", &m);
    while (m--) {
        printf("请输入算数表达式:");
        scanf("%s", str);
        len = strlen(str);
        str[len] = '#';
        str[len + 1] = '\0';
        E();
        //<< 2020年12月15日 fixbug:: i)
        if (str[index] == '#')
            printf("正确语句!\n");
        else {
            printf("分析失败!\n");
        }
        //>>

        strcpy(str, "");
        index = 0;
    }
    return 0;
}
void E() {
    T();
    X();
}
void X() {
    if (str[index] == '+') {
        index++;
        T();
        X();
    }
}
void T() {
    F();
    Y();
}
void Y() {
    if (str[index] == '*') {
        index++;
        F();
        Y();
    }
}
void F() {
    if (str[index] == 'i') {
        index++;
    } else if (str[index] == '(') {
        index++;
        E();
        if (str[index] == ')') {
            index++;
        } else {
            printf("分析失败!\n");
            exit(0);
        }
    } else {
        printf("分析失败!\n");
        exit(0);
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149859.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 从单一到融合,扫地机器人导航技术的“最优解”?

    从单一到融合,扫地机器人导航技术的“最优解”?人工智能浪潮下,智能家居产品层出不穷,但纵观行业发展能真正走入家庭中的产品屈指可数,而扫地机器人却是其中的“网红产品”。根据中怡康数据显示,2013年,我国扫地机器人市场规模仅为8.4亿元,而到了2020年,市场规模已达到94亿元。快速增长的市场同时也在倒逼扫地机器人的性能不断提升“下限”,尤其智能化已成为扫地机器人的高附加值特征。循次渐进,扫地机器人正逐步“完善”在经历2019年的市场寒潮后,2020年扫地机市场快速回暖,除了受疫情影响之外,最关键的原因仍是扫地机器人技术的创新和进步。尤其是各

    2022年5月30日
    33
  • matlab经典版_魔方矩阵matlab

    matlab经典版_魔方矩阵matlabfs=44100;dt=1/fs;T16=0.125;t16=[0:dt:T16];[tempk]=size(t16);t4=linspace(0,4*T16,4*k);t8=linspace(0,2*T16,2*k);[tempi]=size(t4);[tempj]=size(t8);mod4=(t4.^4).*exp(-30*(t4.^0.5));mo…

    2022年9月22日
    0
  • 吞噬星空是鸿蒙三部曲吗,星辰变吞噬星空盘龙三部有什么关系

    吞噬星空是鸿蒙三部曲吗,星辰变吞噬星空盘龙三部有什么关系三部小说之间的关系就说这三部小说都属于鸿蒙三部曲,其中的各个宇宙之间都有一定的联系。《星辰变》是在红袖网上连载的奇幻修真小说,作者是我吃西红柿。小说以一个庞大的修真世界为背景,讲述了主角秦羽不甘于没落、努力修炼跨越先天不足的劣势,一步步踏上强者之路,最终成为鸿蒙掌控者的故事。《吞噬星空》,是一部东方科幻类型的网络小说,小说签约授权首发连载于红袖网。小说已经完本,作者是我吃西红柿。小说主要讲述了地球…

    2022年6月16日
    119
  • 谈vuex的…mapGetters

    谈vuex的…mapGetters谈vuex的…mapGetterscomputed:{…mapGetters([‘test’]),}我们在vue文件中就可以直接this.test来访问vuex中的属性了。但是…mapGetters是什么?mapGetters前用了扩展运算符”…”functionfn(){ return{a:1,b:2};}//如mapGettersvara={…

    2022年6月11日
    25
  • matlab 柱状图不同颜色(取巧哈)[通俗易懂]

    matlab 柱状图不同颜色(取巧哈)[通俗易懂]以前写过一个颜色索引的柱状图,但是年代久远想不起来了。今天需要出一个不同颜色的柱状图,看了一下博客,首先使用了matlab中的children,但是发现颜色没有变化。后来从另外的博客中发现,matalb2014以后的版本这个功能不能用了,what?只能用bar。好吧,用bar一遍一遍写,这里做个取巧的方式哈。mydata=[0.5,1.5,2.5,3.5,4.5];figure(1)holdonfori=1:length(mydata)h=bar(i,mydata.

    2022年10月10日
    0
  • 黄陈宏_特朗普禁止美投资者投资部分中企

    黄陈宏_特朗普禁止美投资者投资部分中企黄陈宏:跨国企业不要把自己当外人

    2022年4月20日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号