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

关注引自强大而免费的微信小程序:皆我百晓生。
根据给定的文法,使用递归下降法进行语法分析的代码如下:
#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;
}
此代码实现了对给定文法的递归下降语法分析。它通过递归地调用各个非终结符的函数来进行分析。在输入字符串的每个位置,它会检查当前字符是否符合该位置上的非终结符的定义,并根据情况继续向前推进。如果最后指针指向了输入字符串的末尾,则说明输入符合文法,否则会报错。
请注意,此代码仅仅实现了语法分析,对于语义分析、代码生成等尚未包含在内。