我向学过编译原理的同学发出请求(没代码的不要发言)
我想递归下降分析程序结构
我写了程序他的情况就在这儿
他的文法为
E-->TE'
E'-->+TE'|@
T-->FT'
T'-->*FT'|@
F-->(E)|i;
@为空字符
大家都知道的哈哈我给你程序
他的pascl;
PROCEDURE E;
BEGIN
T;E'
END;
PROCEDURE E'
IF SYM='+'THEN
BEGIN
ADVANCE;
T;E'
END
PROCEDURE T;
BEGIN
F;T'
END
PROCEDURE T'
BEGIN
ADVANCE;
F;T'
END;
PROCEDURE F;
IF SYM='I'THEN ADVANCE
ELSE
IF SYM='('THEN
BEGN
ADVANCE;
E;
IF SYM=')'THEN ADVANCE;
ELSE ERROR
END
ELSE ERROR;
ADVANCE 是指把输入串指示器IP调至指向下一个输入符号;
SYM 是指IP当前所指的哪个输入符号;
ERROR 为出错侦察处理程序;
我写的代码为下:我想要那位大虾帮我他改出到在屏幕上打出
that is right exception
#include <stdlib.h>
#include <stdio.h>
char str[6]={'i','*','i','+','i','#'};
char T_project();
char t_project();
void F_project();
char e_project();
int i=0;
char ch=0;
char E_project()
{
ch=T_project();
if(ch==0)
ch=t_project();
return ch;
}
char T_project()
{
F_project();
if(ch==0)
ch=t_project();
return ch;
}
char e_project()
{
if(str[i]=='+')
i++;
ch=T_project();
if(ch==0)
ch=e_project();
return ch;
}
char t_project()
{
if(str[i]=='*')
i++;
F_project();
if(ch==0)
ch=t_project();
return ch;
}
void F_project()
{
if(str[i]=='i')
i++;
else
{
if(str[i]=='(')
i++;
ch=E_project();
if(str[i]==')')
i++;
else
{
printf("the exption can't come out");
exit(1);
}
printf("the exption can't come out");
exit(1);
}
if(str[i]=='#')
printf("that is right exception");
}
main()
{
ch=E_project();
getch();
}