if(c=='q') exit(1);
}
}
string head_temp="";
string tail_temp="";
////得到字符 c 的 head 集//////////////////////////////////////////////////////
string head(char c)
{
for(int i=0;i
=65&&p[i].right[0]<=90) //如果是非终结符
{
head_temp+=p[i].right[0];
head_temp+=head(p[i].right[0]); //递归调用 head
}
else head_temp+=p[i].right[0];
}
}
}
return head_temp;
}
////得到字符 c 的 tail 集/////////////////////////////////////////////////////////////////
string tail(char c)
{
char t;
for(int i=0;i=65&&p[i].right[p[i].right.length()-1]<=90) //
如果是非终结符
{
tail_temp+=p[i].right[p[i].right.length()-1];
tail_temp+=tail(p[i].right[p[i].right.length()-1]);
//递归调用 tail
}
else tail_temp+=p[i].right[p[i].right.length()-1];
}
}
}
return tail_temp;
}
/////////////////////////////////////////////////////////////////////
string list="ZEMTF+-*/()0123456789#";
int matrix[L_LENGTH][L_LENGTH];
//关系矩阵
/////给矩阵中 A,B 对应的位置赋值/////////////////////////////////////
void set_value(char a,char b,int v)
{
int i=list.find(a);
int j=list.find(b);
if(i==-1||j==-1) error();
matrix[i][j]=v;
}
////创建关系矩阵///////////////////////////////////////////
void create_relation()
{
for(int i=0;i
1)
{
////////////选取产生式长度多于一个字符的
for(int j=0;j='A') //////如果第一个字符是非终结符
{