资源简介

编译原理实验,语法分析的递归下降分析法,C语言实现的源代码

资源截图

代码片段和文件信息

#include “stdio.h“
#define N 50
//////////////////
/*
文法 G[Z]:Z->aAcB|Bd
   A->AaB|c
   B->bBcA|b
   
*/
void Z();
void A();
void A_();
void B();
void B_();
void advance();
void error();
//////////////////
char sym;
char str[N];
char *next;
int i;
int flag=0f;
///////////////////
void Z()
{
printf(“Z\n“);
if(flag)
return;
if(sym==‘a‘)
{
advance();
A();
if(sym==‘c‘)
{
advance();
B();
}
else
error();
}
else 
if(sym==‘b‘)
{
B();
if(sym==‘d‘)
{
advance();
}
else
error();
}
else
error();
}
///////////////////
void A()
{
if(flag)
return;
printf(“A\n“);
if(sym==‘c‘)
{
advance();
if(flag)
return;
A_();
}

}
///////////////////
void A_()
{
if(flag)
return;
printf(“A_\n“);
if(sym==‘a‘)
{
advance();
if(flag)
return;
B();
A_();
}
}
///////////////////
void B()
{
printf(“B\n“);
if(sym==‘b‘)
{
advance();
if(flag)
return;
B_();
}
else 
if(*(next+1)==‘#‘)
error();
}
///////////////////
void B_()
{

if(flag)
return;
printf(“B_\n“);
if(*(next+1)!=‘#‘)
{
B();
if(sym==‘c‘)
{
advance();
if(flag)
return;
A();
}
}
}
///////////////////
void advance()
{
printf(“advance\n“);
if(*(next+1)!=‘#‘)
{
next++;
sym=*next;
printf(“%c\n“*next);
}
else
{
flag=1;
}
}
//////////////////
void error()
{

printf(“This sentence is not in accordance with the rules of grammar\n“);//不符合文法
}
//////////////////
void main()
{
next=str;
i=0;
printf(“input a string :\n“);
scanf(“%c“&str[i]);
while(str[i]!=‘#‘)
{
i++;
scanf(“%c“&str[i]);
}
sym=str[0];
Z();
if(flag)
printf(“grammaticality\n“); //符合 文法 
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1837  2010-04-13 15:52  shy2.cpp

----------- ---------  ---------- -----  ----

                 1837                    1


评论

共有 条评论