while(str[i]!='\\0')i++; return i; }
int index(char ch,char str[]){ int i=0; while(str[i]!='\\0'){ if(ch!=str[i])i++; else break;} if(str[i]=='\\0')return -1; return i; }
void err(int n){ if(n==1)cout<<\字符不匹配\ else if(n==2)cout<<\字符没有出现在产生式中\ else if(n==3)cout<<\没有找到合适的¨选产式\ else cout<<\该句子是文法语言的句子\}
void print(){ cout<<\ if(count<10)cout<<'0'; cout< void semantic(){ if(VT[opr]=='='){arr[d][0]='=';arr[d][1]=arr_i[opd];arr[d][2]=id;arr[d][3]='--';id++;} else if(opr==-2){arr[d][0]='=';arr[d][1]=id-1;arr[d][2]=arr_i[opd];arr[d][3]='--';} else {arr[d][0]=VT[opr];arr[d][1]=arr_i[opd];arr[d][2]=id; if(VT[opr]!='<'&&VT[opr]!='>')arr[d][3]=id-1;else arr[d][3]=id+1;id++;} d++; } void syntax(){//语法分析 int n; count++; print(); X=stack[sp]; a=queue[front]; if(X=='#'&&a=='#')f=4; if(X<'A'||X>'Z'){ if(X==a){ sp--; front++; if(a!='i'){ if(a!='d'&&a!='w'&&a!=';'&&a!='#'){opr=index(a,VT);semantic();} else if(a==';'||a=='w'||a=='#'){opr=-2;semantic();} cout<<'\\t'<<'\\''< i=len(p[n])-1;i>=0;i--){stack[++sp]=p[n][i];cout< void lexical(){ //词法分析 int i,j,d; char ch; j=d=0; for(i=0;var[i]!='#';i++){ ch=var[i]; if(ch=='d'&&var[i+1]=='o'){cout<<\ } else if(ch=='w'){ch=var[i+1]; if(ch=='h'){ch=var[i+2]; if(ch=='i'){ch=var[i+3]; if(ch=='l'){ch=var[i+4]; if(ch=='e'){ch=var[i+5];}}}} cout<<\ } else if(index(ch,VT)<=0){ if(ch!='{'&&ch!='}'&&ch!='('&&ch!=')'){cout< int main(){ int i=0,j=0;int len,length;char temp; char S='K'; sp=front=0; stack[0]='#'; sp++; stack[1]='K'; cout<<\ ****************************\ cout<<\ * DO-WHILE循环语句 *\ cout<<\ * (简单优先法输出四元式) *\ cout<<\ ****************************\ ifstream table; table.open(\ if(!table) { cout<<\ } table.seekg(0,ios::end); length = table.tellg(); table.seekg(0,ios::beg); while(length!=table.tellg()) { table.read((char*)&temp,1); var[i]=temp; i++; if(var[i]==' ')i--; if(var[i]=='#')break; } table.close(); len=i; var[i]='\\0'; cout<<\词法分析\lexical(); char fuzhi[20];int flag1,fuzhilen;int s=0; for(i=0;i fuzhilen=flag1-2; for(i=3;i fuzhi[s]='#'; char shuru;char zh[100];int kaishi=0; zh[0]='d'; for(kaishi=1;kaishi zh[kaishi++]=';'; zh[kaishi++]='W'; for(i=flag1+8;i zh[kaishi++]='#'; zhlen=kaishi; cout<<\输出四元式\ cout<<\ translatefuzhi(fuzhi); cout<<\\ cout<<\ goto T0\ return 0;} 三、测试结果: 词法分析部分: 输出四元式: 四、课程小结: 这次编译原理课程设计的题目是用简单优先分析法进行DO-WHILE循环语句的语法分析,并输出四元式.设计的特点是利用定义每个终极符和非终极符之间优先关系,来进行符号的