发布时间 : 星期日 文章算符优先分析方法更新完毕开始阅读9436228102d276a200292e00
{
if(str[I][J+1]=='\\0') {I++;J=3;} else {
while(str[I][J+1]!='\\0') {
char aa=str[I][J]; char bb=str[I][J+1];
if(!IsLetter(aa)&&!IsLetter(bb))//优先及等于的情况,用1值表示等于 {
for(i=1;i<=kk;i++) {
if(ccrr2[i][0]==aa) break; } for(j=1;j<=kk;j++) {
if(ccrr1[0][j]==bb) break; } if(crr[i][j]==0) crr[i][j]=1;
else {FLAG=1;I=n+1;} J++; }
if(!IsLetter(aa)&&IsLetter(bb)&&str[I]
[J+2]!='\\0'&&!IsLetter(str[I][J+2]))//优先及等于的情况 {
for(i=1;i<=kk;i++)
16
{
if(ccrr2[i][0]==aa) break;
} for(int j=1;j<=kk;j++) {
if(ccrr1[0][j]==str[I][J+2]) break; } if(crr[i][j]==0) crr[i][j]=1;
else {FLAG=1;I=n+1;} }
if(!IsLetter(aa)&&IsLetter(bb))//优先及小于的情况,用2值表示小于 {
for(i=1;i<=kk;i++) {
if(aa==ccrr2[i][0]) break;
} for(j=0;j<=p;j++) {
if(bb==arr[j][0]) break;
}
for(int mm=1;arr[j][mm]!='\\0';mm++) {
for(int pp=1;pp<=kk;pp++) {
if(ccrr1[0][pp]==arr[j][mm])
17
break; }
if(crr[i][pp]==0) crr[i][pp]=2;
else {FLAG=1;I=n+1;} } J++; }
if(IsLetter(aa)&&!IsLetter(bb))//优先及大于的情况,用3值表示大于 {
for(i=1;i<=kk;i++) {
if(ccrr1[0][i]==bb) break; }
for(j=0;j<=ppp;j++) {
if(aa==brr[j][0]) break; }
for(int mm=1;brr[j][mm]!='\\0';mm++) {
for(int pp=1;pp<=kk;pp++) {
if(ccrr2[pp][0]==brr[j][mm]) break; }
if(crr[pp][i]==0) crr[pp][i]=3;
else {FLAG=1;I=n+1;}
18
} J++; } } } } }
//judge3是用来返回在归约过程中两个非终结符相比较的值 int judge3(char s,char a) {
int i=1,j=1; while(ccrr2[i][0]!=s) i++;
while(ccrr1[0][j]!=a) j++;
if(crr[i][j]==3) return 3; else if(crr[i][j]==2) return 2; else if(crr[i][j]==1) return 1; else return 0; }
void print(char s[],char STR[][20],int q,int u,int ii,int k)//打印归约的过程 {
cout<
19