📄 shixunview.cpp
字号:
{
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("产生式(<程序> → main(){分程序})中'()'后面缺少'{'!\r\n");
fenchengxu();
flog++;
if(strcmp(result[flog].value0,""))
{
if(strcmp(result[flog].value0,"}"))
{
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("产生式(<程序> → main(){分程序})中555555缺少}!\r\n");
}
}
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("产生式(<程序> → main(){分程序})中777缺少}!\r\n");///////////
}
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("产生式(<程序> → main(){分程序})中'('后面缺少')'!\r\n");
if(strcmp(result[flog].value0,"{"))
{
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("产生式(<程序> → main(){分程序})中')'后面缺少'{'!\r\n");
}
else
{
flog++;
}
fenchengxu();
flog++;
if(strcmp(result[flog].value0,""))
{
if(strcmp(result[flog].value0,"}"))
{
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("产生式(<程序> → main(){分程序})中'{'后面缺少'}'!\r\n");
}
}
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("产生式(<程序> → main(){分程序})中'{'后面缺少'}'!\r\n");
}
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("产生式(<程序> → main(){分程序})中main后面缺少'('!\r\n");
if(strcmp(result[flog].value0,")"))
{
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("产生式(<程序> → main(){分程序5555})中main后面缺少')'!\r\n");
}
else
{
flog++;
}
if (strcmp(result[flog].value0,"{"))
{
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("产生式(<程序> → main(){分程5555序})中main后面缺少'{'!\r\n");
}
else
{
flog++;
}
fenchengxu();
flog++;
if(strcmp(result[flog].value0,""))
{
if(strcmp(result[flog].value0,"}"))
{
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("产生式(<程序> → main(){分444程序})中main后面缺少'}'!\r\n");
}
}
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("产生式(<程序> → main(){分程序})中main后5555面缺少'}'!\r\n");
}
return 0;
}
}
else//main
{
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("产生式(<程序> → main(){分程序})中源文件开头缺少'main'!\r\n");
return 0;
}
}
//<分程序> → <变量说明2> <变量说明><语句>
bool CShixunView::fenchengxu(void)
{
if(bianliangsm2())
{
flog++;
if(bianliangsm())
{
flog++;
return yuju();
}
else
{
flog++;
yuju();
// m_chucuo+=_T("产生式(<分程序> → <变量说明2> <变量说明><语句>)中<<变量说明>分析出错!\r\n");
return 0;
}
}
else
{
flog++;
bianliangsm();
flog++;
yuju();
//m_chucuo+=_T("产生式(<分程序> → <变量说明> <语句>)中<变量说明>分析出错!\r\n");
return 0;
}
}
//<变量说明> → 空| <类型><标识符><变量>;<变量声明>
bool CShixunView::bianliangsm()
{
int d;
if(leixing())
{
flog++;
if(!strcmp(result[flog].class0,"2"))
{
flog++;
if(bianliang())
{
flog++;
if(!strcmp(result[flog].value0,";"))
{
flog++;
return bianliangsm();
}
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("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中变量后面缺少缺少;!\r\n");
bianliangsm();
return 0;
}
}
else//,a变量出错
{
flog++;
if(strcmp(result[flog].value0,";"))
{
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--;
}
flog++;
bianliangsm();
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("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中<变量>分析出错!\r\n");
bianliang();
flog++;
if(strcmp(result[flog].value0,";"))
{
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--;
}
flog++;
bianliangsm();
return 0;
}
}
else//类型不符
{
if(!strcmp(result[flog].class0,"2"))
{
flog++;
d=bianliang();
if(d&&(!strcmp(result1[flog].value2,result1[flog-1].value2)))
{
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("产生式(<变量说明> → <类型> <变量>;| <类型>000000 <变量>;<变量说明>)中<类型>分析出错!\r\n");
//return 0;
flog++;
if(strcmp(result[flog].value0,";"))
{
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--;
}
flog++;
bianliangsm();
}
else if(!d)//非法的变量,| a
{
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++;
if(strcmp(result[flog].value0,";"))
{
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--;
}
flog++;
bianliangsm();
}
else
{
flog--;
return 1;
}
return 0;
}
else
{
flog--;
return 1;
}
}
}
// <变量声明2>-><类型><标识符><变量>;为空时出错!
bool CShixunView::bianliangsm2()
{
int d;
if(leixing())
{
flog++;
if(!strcmp(result[flog].class0,"2")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
{
flog++;
if((!strcmp(result1[flog-1].value1,result1[flog].value1))&&bianliang())
{
flog++;
if(!strcmp(result[flog].value0,";")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
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>-><类型><标识符><变量>)中<类型>缺少;!\r\n");
//return 0;
flog--;
return 0;
}
}
else//,a变量出错
{
flog++;
if(strcmp(result[flog].value0,";"))
{
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");
//return 0;
flog--;
}
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");
bianliang();
flog++;
if(strcmp(result[flog].value0,";"))
{
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");
//return 0;
flog--;
}
return 0;
}
}
else//类型不符
{
if(!strcmp(result[flog].class0,"2"))
{
flog++;
d=bianliang();
if(d&&(strcmp(result1[flog].value2,result1[flog-1].value2)))
{
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");
//return 0;
flog++;
if(strcmp(result[flog].value0,";"))
{
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");
//return 0;
flog--;
}
}
else if(!d)//非法的变量,| a
{
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");
//return 0;
flog++;
if(strcmp(result[flog].value0,";"))
{
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");
//return 0;
flog--;
}
}
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");
//return 0;
flog--;
}
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");
//return 0;
flog--;
return 0;
}
}
}
//<语句> → <赋值语句>| <条件判断语句>
bool CShixunView::yuju()
{
if(!strcmp(result[flog].value0,"if"))
{
return tiaojian();
}
else
{
return fuzhi();
}
}
//<类型> → int | real | char
bool CShixunView::leixing()
{
if((strcmp(result[flog].value0,"int")==0)||(strcmp(result[flog].value0,"real")==0)||(strcmp(result[flog].value0,"char")==0))
{
return 1;
}
else
{
return 0;
}
}
//变量-〉,<标志符><变量>|空
bool CShixunView::bianliang()
{
if(!strcmp(result[flog].value0,",")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
{
flog++;
if(!strcmp(result[flog].class0,"2")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
{
flog++;
return bianliang();
}
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("产生式(变量-〉,<标志符><变量>|空)中多余;!\r\n");
bianliang();
return 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -