logo资料库

带出错处理的LR分析器总控程序的实现.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
#include #include using namespace std; int fenxi_list[10][7]= {{33,11,11,32,12,11,1}, {13,34,35,13,12,100,0}, {33,11,11,32,12,11,6}, {24,24,24,24,24,24,0}, {33,11,11,32,12,11,7}, {33,11,11,32,12,11,8}, {13,34,35,13,39,14,0}, {21,21,35,21,21,21,0}, {22,22,22,22,22,22,0}, {23,23,23,23,23,23,0}}; //输入串转换成 LR 分析表相应的列标号 int input_str[10]; //输入串长度 int len=0; //输入串 string str=" "; //状态数组长度 int state_len=1; //符号数组长度 int sign_len=1; //以处理的输入串长度 int input_len=0; int length=1; //分析次数 //输入字符串,将输入串转换为相应的数字 void input() { int i=0,j=0; cout <<"请输入分析字符串:"<>str; string strl="#"; str=str+strl; len=str.length(); char action[6]={'i','+','*','(',')','#'}; for(i=0;i
} } } //输出分析过程中的状态、符号、输入串 void output(int state[],char sign[],string str) { cout<<"("<
{ cout<<"***********LR 分析器总控程序的实现************"<10)) { length++; if(fenxi==11) { cout<<"缺少运算量"<
} else if((fenxi>30)&&(fenxi<40))//移进:只要移入 { } int k=fenxi-10*3; state[state_len]=k; sign[sign_len]=str[input_len]; state_len++; sign_len++; input_len++; length++; else if((fenxi<30)&&(fenxi>20)) { if(fenxi==21) { state_len=state_len-2; sign_len=sign_len-2; sign[sign_len-1]='E'; } if(fenxi==22) { state_len=state_len-2; sign_len=sign_len-2; sign[sign_len-1]='E'; } if(fenxi==23) { state_len=state_len-2;//状态 sign_len=sign_len-2;//符号 sign[sign_len-1]='E'; } if(fenxi==24) { sign[sign_len-1]='E'; } m=state[state_len-2]; n=6; fenxi=fenxi_list[m][n]; state[state_len-1]=fenxi; length++; } } }
分享到:
收藏