算符优先分析方法 联系客服

发布时间 : 星期日 文章算符优先分析方法更新完毕开始阅读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