- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言求文法的FIRST集
//Copyright:ChenZexi , JXNU
#includestring.h
#includestdio.h
#include stdlib.h
#define MAXS 50
#define epsilon *
char noend[MAXS]; //非终极符
char End[MAXS]; //终极符
int N;
struct STR
{
int has_epsion;
char left;
char right[MAXS];
};
struct First
{
char letter;
char gather[MAXS];
};
int getlr(struct STR *p,int i,char *temp)
{
int j;
int k=0;
int succ=0;
for(j=0;jstrlen(temp);j++)
{
if(temp[j]==- temp[j+1]== )
{
succ=1;
if(j==1){
p[i].left=temp[0];
j=3;
p[i].has_epsion=0;
while(temp[j]!=\0){
p[i].right[k]=temp[j];
if(temp[j]==epsilon){
p[i].has_epsion=1;
}
k++;j++;
}
p[i].right[k]=\0;
}
}
}
return succ;
}
int findchar(char *s,char c)
{
int i;
int index=-1;
for(i=0;istrlen(s);i++)
{
if(s[i]==c) index=i;
}
return index;
}
int hasepsilon(struct STR *p,char c)
{
int i;
int index=-1;
for(i=0;iN;i++)
{
if(p[i].left==c p[i].has_epsion==1)
index=1;
}
return index;
}
//求VN(终极符)和VT(非终极符)
void VNVT(struct STR *p)
{
int i,j,x;
for(i=0;iN;i++)
{
for(j=0;j1;j++)
{
if((p[i].left = A p[i].left = Z))
{
if(findchar(noend,p[i].left)0)
{
x=strlen(noend);
noend[x]=p[i].left;
noend[x+1]=\0;
}
}
}
for(j=0;jstrlen(p[i].right);j++)
{
if(!(p[i].right[j]=Ap[i].right[j]=Z))
{
if(findchar(End,p[i].right[j])0)
{
x=strlen(End);
End[x]=p[i].right[j];
End[x+1]=\0;
}
}
else
{
if(findchar(noend,p[i].right[j])0)
{
x=strlen(noend);
文档评论(0)