m0_69424485 2023-11-29 23:09 采纳率: 50%
浏览 13
已结题

求解,有偿,可商量价格

img


编译原理的一道题目如图所示,在校大学生已经被难倒了,请厉害的人出手救场,有偿,价钱可议。明天就要交了,请一下厉害的人出手了吧,不然就要被记不及格了

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-11-29 23:20
    关注

    引自强大而免费的微信小程序:皆我百晓生

    根据给定的文法,使用递归下降法进行语法分析的代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    
    char input[100];
    int pointer = 0;
    
    void error() {
        printf("Error: Invalid input\n");
        exit(0);
    }
    
    void S();
    void A();
    void A_prime();
    void B();
    void B_prime();
    void C();
    
    void S() {
        A();
        A_prime();
    }
    
    void A() {
        if (input[pointer] == 'i') {
            pointer++;
            B();
            A_prime();
            if (input[pointer] == 'E') {
                pointer++;
            } else {
                error();
            }
        }
    }
    
    void A_prime() {
        if (input[pointer] == 'i' || input[pointer] == '(') {
            B();
            A_prime();
        } else if (input[pointer] == '#') {
            pointer++;
        } else {
            error();
        }
    }
    
    void B() {
        C();
        B_prime();
    }
    
    void B_prime() {
        if (input[pointer] == '+') {
            pointer++;
            C();
            B_prime();
        }
    }
    
    void C() {
        if (input[pointer] == '(') {
            pointer++;
            A();
            if (input[pointer] == '*') {
                pointer++;
                if (input[pointer] == ')') {
                    pointer++;
                } else {
                    error();
                }
            } else {
                error();
            }
        }
    }
    
    int main() {
        printf("Enter the input string: ");
        scanf("%s", input);
    
        S();
    
        if (input[pointer] == '\0') {
            printf("Input is valid\n");
        } else {
            error();
        }
    
        return 0;
    }
    

    此代码实现了对给定文法的递归下降语法分析。它通过递归地调用各个非终结符的函数来进行分析。在输入字符串的每个位置,它会检查当前字符是否符合该位置上的非终结符的定义,并根据情况继续向前推进。如果最后指针指向了输入字符串的末尾,则说明输入符合文法,否则会报错。

    请注意,此代码仅仅实现了语法分析,对于语义分析、代码生成等尚未包含在内。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 已采纳回答 11月30日
  • 创建了问题 11月29日