#include <stdio.h>
#include <string.h>
char str[100] = { '\0' };
bool flag = 1;
int i = 0;
void pS();
void pA();
void pB();
void main() {
printf("制作人:咕咕来砸米\t练习时长:两年半\n\n\t【递归下降子程序法】\n\n推导文法 =>\n");
printf("\tS->aBc\t\t{ a }\n\tS->bAB\t\t{ b }\n\tA->aAb\t\t{ a }\n\tA->b\t\t{ b }\n\tB->b\t\t{ b }\n\tB->ε\t\t{ c,# }\n\n");
printf("请输入一串表达式,长度小于100 比如:baabbbb\n");
fgets(str, sizeof(str), stdin);
pS();//从起始符推导
i++;
if (str[i] == '\n' && flag == 1)
{
printf("是该文法的句子");
}
else
{
printf("主人,不是该文法的句子哦");
}
}
void pS() {
if (str[i] == 'a')
{
printf("a");
i++;
pB();
i++;
if (str[i] == 'c')
{
printf("c");
}
else
{
flag = 0;
}
}
else if (str[i] == 'b')
{
printf("b");
i++;
pA();
i++;
pB();
}
else
{
flag = 0;
}
}
void pA() {
if (str[i] == 'a')
{
printf("a");
i++;
pA();
i++;
if (str[i] == 'b')
{
printf("b");
}
else
{
flag = 0;
}
}
else if (str[i] == 'b') {
printf("b");
}
else
{
flag = 0;
}
}
void pB() {
if (str[i] == 'b')
{
printf("b");
}
else {
i--;//回退
}
}
直接上代码,人和程序,有一个能跑就行。
一年前写的,编译原理已经还给老师了!Σ(゚д゚lll)