请知道编译原理的高人进来

来源:百度知道 编辑:UC知道 时间:2024/05/26 17:26:02
/* S→aH */
/* H→aMd|d */
/* M→Ab|ε */
/* A→aM|e */

#include "stdio.h"
char ch;
error()
{ printf("The characters is ERROR!");
getch();
exit(0);
}

ps()
{
if (ch=='a')
{ ch=getchar();
pa();
}
else
error();
}

pa()
{ if (ch=='a')
{ ch=getchar();
pm();
}
else
if (ch=='e')
ch=getchar();
else
error();
}

pm()
{ if ((ch=='a')||(ch=='e'))
{ ch=getchar();
pa();
if (ch=='b')
ch=getchar();
else
error();
}
else
if ((ch=='b')||(ch=='d'))
ch=getchar();
else
error();
}

ph()
{ if (ch=='a')
{ ch=getchar();
pm(

晕了,你这来回调用还不带返回值的……恕我眼拙,完全看不出你这程序要做什么。
你的这几个函数我都没有找到函数返回return,全是一个跳到另一个。我能找到的终止函数的出口只有exit(0)。而那个时候,整个程序也已经终止了。
因此,你这里有些函数里的语句,因为函数的来回调用,是不会被执行的。比如:
pm()
{ if ((ch=='a')||(ch=='e'))
{ ch=getchar();
pa(); //从这里开始,下面的if语句是不可能执行的。
if (ch=='b')
ch=getchar();
else
error();
}
还有
ph()
{ if (ch=='a')
{ ch=getchar();
pm(); //从这一句开始,下面的if是不会被执行的。
if (ch=='d')
ch=getchar();
else
error();
}

main()
{ printf("Please input the string:");
ch=getchar();
ps(); //这一句以后,永远不可能跳转到下一个printf。
printf("Successful!!");
getch();
}

差点没看出来!你学过C?
第一眼就看到 你那个变量ch是字符型,你要得是字符串 ,难怪他罢工!
也不多看了,你写的我第一眼就晕!
兄弟啊!奉劝下
自己多看看基础!

这是什么语言