📄 shixunview.cpp
字号:
}
}
else
{
if(!strcmp(result[flog].class0,"2")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(变量-〉,<标志符><变量>|空)中缺少多余的,!\r\n");
flog++;
bianliang();
return 0;
}
else
{
flog--;
return 1;
}
}
}
//<赋值语句> →<变量> = <算术表达式><赋值语句2>
bool CShixunView::fuzhi()
{
if(!strcmp(result[flog].class0,"2"))
{
strcpy(temp6,result[flog].value0);
flog++;
if(!strcmp(result[flog].value0,"=")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
{
strcpy(temp5,"=");
flog++;
strcpy(temp7,suanshubds());
if(suanshubds())
{
strcpy(temp8," ");
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".");
m_chucuo+=_T("<");
m_chucuo+=_T(temp5);
m_chucuo+=_T(",");
m_chucuo+=_T(temp6);
m_chucuo+=_T(",");
m_chucuo+=_T(temp7);
m_chucuo+=_T(",");
m_chucuo+=_T(temp8);
m_chucuo+=_T("\t>\r\n");
flog++;
return fuzhi2();
}
else
{
flog++;
fuzhi2();
return 0;
}
}
else
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<赋值语句> →<变量> = <算术表达式><赋值语句2>)中缺少=!\r\n");
suanshubds();
flog++;
fuzhi2();
return 0;
}
}
else
{
if(!strcmp(result[flog].class0,"6")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<赋值语句> →<变量> = <算术表达式><赋值语句2>)中左边必须是变量!\r\n");
flog++;
suanshubds();
flog++;
fuzhi2();
return 0;
}
else
{
suanshubds();
flog++;
fuzhi2();
return 0;
}
}
}
//<赋值语句2> →;<语句><赋值语句2>|;
bool CShixunView::fuzhi2()
{
if(!strcmp(result[flog].value0,";"))
{
flog++;
if(!strcmp(result[flog].class0,"2"))
{
return fuzhi();
}
else if(!strcmp(result[flog].value0,"if"))
{
return tiaojian();
}
else
{
flog--;
return 1;
}
}
else
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<赋值语句2> →;<语句><赋值语句2>|;)中缺少;!\r\n");
if(!strcmp(result[flog].class0,"2"))
{
return fuzhi();
}
else if(!strcmp(result[flog].value0,"if"))
{
return tiaojian();
}
flog--;
return 0;
}
}
//<条件判断语句> → if <关系表达式> <语句><条件判断语句2>|
// if <关系表达式> <语句> else <语句><条件判断语句2>
bool CShixunView::tiaojian()
{
flog++;
if(guanxibds()&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
{
flog++;
if(yuju())
{
flog++;
if(!strcmp(result[flog].value0,"else"))
{
flog++;
return yuju();
}
else
{
flog--;
return 1;
}
}
else
{
flog++;
if(!result[flog].value0,"else")
{
flog++;
yuju();
return 0;
}
flog--;
return 0;
}
}
else
{
flog++;
yuju();
flog++;
if(!strcmp(result[flog].value0,"else"))
{
flog++;
yuju();
}
else
{
tiaojian2();
}
return 0;
}
}
// <条件判断语句2> →;<语句><条件判断语句2>|空
bool CShixunView::tiaojian2()
{
if(!strcmp(result[flog].value0,";"))
{
flog++;
if(!strcmp(result[flog].class0,"2"))
{
return fuzhi();
}
else if(!strcmp(result[flog].value0,"if"))
{
return tiaojian();
}
else
{
flog--;
return 1;
}
}
else
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<条件判断语句2> →;<语句><条件判断语句2>|空)中缺少;!\r\n");
if(!strcmp(result[flog].class0,"2"))
{
return fuzhi();
}
else if(!strcmp(result[flog].value0,"if"))
{
return tiaojian();
}
flog--;
return 0;
}
}
//<算术表达式> →<项><算术表达式2>
char* CShixunView::suanshubds()
{
strcpy(temp20,xiang());
if(xiang())
{
flog++;
return suanshubds2();
}
else
{
flog++;
suanshubds2();
return(temp20);
//m_chucuo+=_T("产生式(<算术表达式> →<项><算术表达式2>)中<项>分析出错!\r\n");
//return 0;
}
}
//<算术表达式2> → + <项><算术表达式2>|-<项><算术表达式2>|空
char* CShixunView::suanshubds2()
{
int f1=0,f2=0,f3=0,f4=0;
f1=atoi(result1[flog-1].value1);
f2=atoi(result1[flog].value1);
f3=atoi(result1[flog-1].value2);
f4=atoi(result1[flog].value2);
char temp1[30];
char temp3[30];
char temp4[30];
if((!strcmp(result[flog].value0,"+"))||(!strcmp(result[flog].value0,"-")))
{
strcpy(temp1,result[flog].value0);
flog++;
strcpy(temp3,xiang());
if(xiang())
{
strcpy(temp4,newtemp());
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".");
m_chucuo+=_T("<");
m_chucuo+=_T(temp1);
m_chucuo+=_T(",");
m_chucuo+=_T(temp20);
m_chucuo+=_T(",");
m_chucuo+=_T(temp3);
m_chucuo+=_T(",");
m_chucuo+=_T(temp4);
m_chucuo+=_T("\t>\r\n");
strcpy(temp20,temp4);
flog++;
return suanshubds2();
}
else
{
flog++;
suanshubds();
//return 0;
return(temp20);
}
}
else if((!strcmp(result[flog].value0,"("))
||(!strcmp(result[flog].class0,"3"))
||(!strcmp(result[flog].class0,"2"))
&&(f1==f2)
&&(f3==f4-1))
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<算术表达式2> → + <项><算术表达式2>|-<项><算术表达式2>|空)中缺少算术运算符!\r\n");
flog++;
suanshubds2();
//return 0;
return(temp20);
}
else
{
flog--;
return(temp20);
//return 1;
}
}
//<项>→<因式><项2>
char* CShixunView::xiang()
{
strcpy(temp2,yinshi());
if(yinshi())
{
flog++;
return xiang2();
//strcpy(eplace,xiang2());
}
else
{
flog++;
xiang2();
return(temp2);
//return 0;
m_chucuo+=_T("产生式(<项>→<因式><项2>)中<因式>分析出错!\r\n");
}
}
//<项2>→*<因式><项2>|/<因式><项2>|空
char* CShixunView::xiang2()
{
int f5=0,f6=0,f7=0,f8=0;
f5=atoi(result1[flog-1].value1);
f6=atoi(result1[flog].value1);
f7=atoi(result1[flog-1].value2);
f8=atoi(result1[flog].value2);
char temp1[30];
char temp3[30];
char temp4[30];
if((!strcmp(result[flog].value0,"*"))||(!strcmp(result[flog].value0,"/")))
{
strcpy(temp1,result[flog].value0);
flog++;
strcpy(temp3,yinshi());
if(!yinshi())
{
flog++;
xiang2();
//return 0;
return(temp2);
}
else
{
strcpy(temp4,newtemp());
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".");
m_chucuo+=_T("<");
m_chucuo+=_T(temp1);
m_chucuo+=_T(",");
m_chucuo+=_T(temp2);
m_chucuo+=_T(",");
m_chucuo+=_T(temp3);
m_chucuo+=_T(",");
m_chucuo+=_T(temp4);
m_chucuo+=_T("\t>\r\n");
strcpy(temp2,temp4);
flog++;
return xiang2();
}
}
else if((!strcmp(result[flog].value0,"("))
||(!strcmp(result[flog].class0,"3"))
||(!strcmp(result[flog].class0,"2"))
&&(!strcmp(result1[flog-1].value1,result1[flog].value1))
&&(f7==f8-1))
{
yinshi();
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<项2>→*<因式><项2>|/<因式><项2>|空)中缺少算术运算符!\r\n");
flog++;
xiang2();
//return 0;
return(temp2);
}
else
{
flog--;
//return 1;
return(temp2);
}
}
//<因式> → <变量> | <常数>|(<算术表达式>)
char* CShixunView::yinshi()
{
char *fplace;
fplace=(char*)malloc(30);
strcpy(fplace," ");
if((!strcmp(result[flog].class0,"2"))||(!strcmp(result[flog].class0,"3")))
{
strcpy(fplace,result[flog].value0);
//return 1;
}
else if(!strcmp(result[flog].value0,"("))
{
flog++;
if(suanshubds())
{
strcpy(fplace,suanshubds());
flog++;
if(strcmp(result[flog].value0,")")!=0)
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少)!\r\n");
flog--;
//return 0;
}
//return 1;
}
else
{
if(strcmp(result[flog].value0,")")!=0)
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少)!\r\n");
//return 0;
}
flog++;
//return 0;
}
}
else//!=(
{
if((!strcmp(result[flog].class0,"2"))||(!strcmp(result[flog].class0,"3")))
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少(!\r\n");
flog++;
if(strcmp(result[flog].value0,")")!=0)
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少)!\r\n");
flog--;
}
}
else
{
if(!strcmp(result[flog].value0,")"))
{
flog++;
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少(!\r\n");
}
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中没有预期的算术表达式或是常量!\r\n");
}
//return 0;
}
return(fplace);
}
//<关系表达式> → <算术表达式><关系符><算术表达式>
bool CShixunView::guanxibds()
{
strcpy(temp10,suanshubds());
if(suanshubds())
{
flog++;
if(!strcmp(result[flog].class0,"7"))
{
strcpy(temp9,result[flog].value0);
flog++;
strcpy(temp11,suanshubds());
strcpy(temp12," ");
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".");
m_chucuo+=_T("<");
m_chucuo+=_T(temp9);
m_chucuo+=_T(",");
m_chucuo+=_T(temp10);
m_chucuo+=_T(",");
m_chucuo+=_T(temp11);
m_chucuo+=_T(",");
m_chucuo+=_T(temp12);
m_chucuo+=_T("\t>\r\n");
return suanshubds();
}
else
{
bb++;
itoa(bb,B,10);
m_chucuo+=_T(B);
m_chucuo+=_T(".语法出错的位置坐标为");
m_chucuo+=_T("(");
m_chucuo+=_T(result1[flog-1].value1);
m_chucuo+=_T(",");
m_chucuo+=_T(result1[flog-1].value2);
m_chucuo+=_T("):");
//m_chucuo+=_T("产生式(<条件判断语句2> →;<语句><条件判断语句2>|空)中缺少;!\r\n");
m_chucuo+=_T("产生式(<关系表达式> → <算术表达式><关系符><算术表达式>) 中缺少<关系符>!\r\n");
suanshubds();
return 0;
}
}
else
{
if(!strcmp(result[flog].class0,"7"))
{
flog++;
suanshubds();
}
else
suanshubds();
return 0;
}
}
char* CShixunView::newtemp()
{
char *p;
char m[100];
p=(char*)malloc(100);
k2++;
itoa(k2,m,10);
strcpy(p+1,m);
p[0]='T';
return(p);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -