📄 phrase_check.cpp
字号:
//程序输入和语法检查模块
#include "StdAfx.h"
#include "phrase_check.h"
char temporarilystr[100][20];//文本输入空间
int copyline;//文本输入行数
int instructionnumber;//指令数
char tidystr[300][20];//文本整理空间
instructionframe instructionstore[300];//指令存储空间
CString str;//显示消息的字符串
int Differinstruction(int);
int Storeandcheckinstruction(int,int);
void Tidythetext()//整理temporarilystr数组
{ //存入tidystr数组
instructionnumber=0;
for (int i=0;i<copyline;i++)//清除多余的空格和空行
{
int j=0;
while(temporarilystr[i][j]==' ')
j++;
if (temporarilystr[i][j]=='\0')
continue;
int theendnumber1=j,theendnumber2=0;
while(temporarilystr[i][theendnumber1]!='\0')
{
if(temporarilystr[i][theendnumber1]!=' ')
{
tidystr[instructionnumber][theendnumber2]=
temporarilystr[i][theendnumber1];
theendnumber1++;
theendnumber2++;
continue;
}
else if (tidystr[instructionnumber][theendnumber2-1]!=' ')
{
tidystr[instructionnumber][theendnumber2]=
temporarilystr[i][theendnumber1];
theendnumber1++;
theendnumber2++;
continue;
}
else
theendnumber1++;
}
if ( tidystr[instructionnumber][theendnumber2-1]==' ')
tidystr[instructionnumber][theendnumber2-1]='\0';
else tidystr[instructionnumber][theendnumber2]='\0';
instructionnumber++;
}
}
void Storeinstruction()//将指令存入存储器
{ //分析指令的正确性
BOOL checksign=TRUE;//指令有无语法错误的标志
int instructionnumber1=instructionnumber;
for(int i=0;i<instructionnumber1;i++)
{
int j=Differinstruction(i);//区分指令,得到指令代号j
if (j==0)//指令有一般的语法错误(j=0)
{
str.Format("语法错误:指令格式不符合要求或此类指令无定义(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
int m;
m=Storeandcheckinstruction(i,j);//存储指令,及检查有无错误
if (m==1)
{
str.Format("语法错误:你必须输入正确的继电器或定时器名称(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
else if(m==2)
{
str.Format("语法错误:你输入的继电器号或定时器不符合要求(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
else if(m==3)
{
str.Format("语法错误:你输入的继电器或定时器号超出范围(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
else if(m==4)
{
str.Format("语法错误:OT和KP指令不能用于(X,T)继电器或定时器(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
else if(m==5)
{
str.Format("语法错误:SET和RET指令不能用于(X,T)继电器或定时器(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
else if(m==6)
{
str.Format("语法错误:你输入的标号有错误(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
else if(m==7)
{
str.Format("语法错误:你输入的时间有错误(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
else if(m==8)
{
str.Format("语法错误:你输入的数据有错误(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
else if(m==9)
{
str.Format("语法错误:你输入的寄存器有错误(the NO %d Line)",i+1);
AfxMessageBox(str);
checksign=FALSE;
break;
}
//str.Format("%d",instructionnumber);
//AfxMessageBox(str);
//str.Format("%d",instructionstore[i].instructionname);
//AfxMessageBox(str);
//str.Format("%c",instructionstore[i].relaysort);
//AfxMessageBox(str);
//str.Format("%d",instructionstore[i].relaynumber);
//AfxMessageBox(str);
//str.Format("%c",instructionstore[i].register1);
//AfxMessageBox(str);
//str.Format("%d",instructionstore[i].register1number);
//AfxMessageBox(str);
//str.Format("%d",instructionstore[i].register2);
//AfxMessageBox(str);
//str.Format("%d",instructionstore[i].register2number);
//AfxMessageBox(str);
//str.Format("%d",instructionstore[i].register3);
//AfxMessageBox(str);
//str.Format("%d",instructionstore[i].register3number);
//AfxMessageBox(str);
//str.Format("%d",instructionstore[i].thenumber);
//AfxMessageBox(str);
}
if(checksign)
{
if(instructionstore[instructionnumber-1].instructionname!=25)
{
str.Format("语法错误:没有结束符ED");
AfxMessageBox(str);
checksign=FALSE;
}
}
if(checksign)
{
str.Format("你输入的程序无语法错误,接下来你可以运行你的程序");
AfxMessageBox(str);
}
}
int Differinstruction(int i)//区分指令类型
{
if(((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&(tidystr[i][2]==' '))
return (1);
else if (((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='/')
&&(tidystr[i][3]==' ')))
return (2);
else if (((tidystr[i][0]=='O')&&(tidystr[i][1]=='T'))
&&(tidystr[i][2]==' '))
return (3);
else if ((tidystr[i][0]=='/')&&(tidystr[i][1]=='\0'))
return (4);
else if (((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&(tidystr[i][2]==' '))
return (5);
else if (((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='/')
&&(tidystr[i][3]==' ')))
return (6);
else if (((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&(tidystr[i][2]==' '))
return (7);
else if (((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='/')
&&(tidystr[i][3]==' ')))
return (8);
else if (((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='S')
&&(tidystr[i][3]=='\0')))
return (9);
else if (((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='S')
&&(tidystr[i][3]=='\0')))
return (10);
else if ((((tidystr[i][0]=='P')&&(tidystr[i][1]=='S'))
&&((tidystr[i][2]=='H')
&&(tidystr[i][3]=='S')))&&(tidystr[i][4]=='\0'))
return (11);
else if (((tidystr[i][0]=='R')&&(tidystr[i][1]=='D'))
&&((tidystr[i][2]=='S')
&&(tidystr[i][3]=='\0')))
return (12);
else if ((((tidystr[i][0]=='P')&&(tidystr[i][1]=='O'))
&&((tidystr[i][2]=='P')
&&(tidystr[i][3]=='S')))&&(tidystr[i][4]=='\0'))
return (13);
else if (((tidystr[i][0]=='D')&&(tidystr[i][1]=='F'))
&&(tidystr[i][2]=='\0'))
return (14);
else if (((tidystr[i][0]=='D')&&(tidystr[i][1]=='F'))
&&((tidystr[i][2]=='/')
&&(tidystr[i][3]=='\0')))
return (15);
else if (((tidystr[i][0]=='S')&&(tidystr[i][1]=='E'))
&&((tidystr[i][2]=='T')
&&(tidystr[i][3]==' ')))
return (16);
else if (((tidystr[i][0]=='R')&&(tidystr[i][1]=='S'))
&&((tidystr[i][2]=='T')
&&(tidystr[i][3]==' ')))
return (17);
else if (((tidystr[i][0]=='N')&&(tidystr[i][1]=='O'))
&&((tidystr[i][2]=='P')
&&(tidystr[i][3]=='\0')))
return (18);
else if (((tidystr[i][0]=='K')&&(tidystr[i][1]=='P'))
&&(tidystr[i][2]==' '))
return (19);
else if (((tidystr[i][0]=='T')&&(tidystr[i][1]=='M'))
&&((tidystr[i][2]=='X')
&&(tidystr[i][3]==' ')))
return (20);
else if(((tidystr[i][0]=='M')&&(tidystr[i][1]=='C'))
&&(tidystr[i][2]==' '))
return (21);
else if (((tidystr[i][0]=='M')&&(tidystr[i][1]=='C'))
&&((tidystr[i][2]=='E')
&&(tidystr[i][3]==' ')))
return (22);
else if(((tidystr[i][0]=='J')&&(tidystr[i][1]=='P'))
&&(tidystr[i][2]==' '))
return (23);
else if (((tidystr[i][0]=='L')&&(tidystr[i][1]=='B'))
&&((tidystr[i][2]=='L')
&&(tidystr[i][3]==' ')))
return (24);
else if (((tidystr[i][0]=='E')&&(tidystr[i][1]=='D'))
&&(tidystr[i][2]=='\0'))
return (25); //以上为基本指令
else if (((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='=')
&&(tidystr[i][3]==' ')))
return (26);
else if (((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='>')
&&(tidystr[i][3]==' ')))
return (27);
else if (((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='<')
&&(tidystr[i][3]==' ')))
return (28);
else if ((((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='<')
&&(tidystr[i][3]=='>')))&&(tidystr[i][4]==' '))
return (29);
else if ((((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='>')
&&(tidystr[i][3]=='=')))&&(tidystr[i][4]==' '))
return (30);
else if ((((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='<')
&&(tidystr[i][3]=='=')))&&(tidystr[i][4]==' '))
return (31);
else if (((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='=')
&&(tidystr[i][3]==' ')))
return (32);
else if (((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='>')
&&(tidystr[i][3]==' ')))
return (33);
else if (((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='<')
&&(tidystr[i][3]==' ')))
return (34);
else if ((((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='<')
&&(tidystr[i][3]=='>')))&&(tidystr[i][4]==' '))
return (35);
else if ((((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='>')
&&(tidystr[i][3]=='=')))&&(tidystr[i][4]==' '))
return (36);
else if ((((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='<')
&&(tidystr[i][3]=='=')))&&(tidystr[i][4]==' '))
return (37);
else if (((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='=')
&&(tidystr[i][3]==' ')))
return (38);
else if (((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='>')
&&(tidystr[i][3]==' ')))
return (39);
else if (((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='<')
&&(tidystr[i][3]==' ')))
return (40);
else if ((((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='<')
&&(tidystr[i][3]=='>')))&&(tidystr[i][4]==' '))
return (41);
else if ((((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='>')
&&(tidystr[i][3]=='=')))&&(tidystr[i][4]==' '))
return (42);
else if ((((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='<')
&&(tidystr[i][3]=='=')))&&(tidystr[i][4]==' '))
return (43);
else if ((((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='=')))&&(tidystr[i][4]==' '))
return (44);
else if ((((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='>')))&&(tidystr[i][4]==' '))
return (45);
else if ((((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='<')))&&(tidystr[i][4]==' '))
return (46);
else if ((((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='<')))&&((tidystr[i][4]=='>')&&
(tidystr[i][5]==' ')))
return (47);
else if ((((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='>')))&&((tidystr[i][4]=='=')&&
(tidystr[i][5]==' ')))
return (48);
else if ((((tidystr[i][0]=='S')&&(tidystr[i][1]=='T'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='<')))&&((tidystr[i][4]=='=')&&
(tidystr[i][5]==' ')))
return (49);
else if ((((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='=')))&&(tidystr[i][4]==' '))
return (50);
else if ((((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='>')))&&(tidystr[i][4]==' '))
return (51);
else if ((((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='<')))&&(tidystr[i][4]==' '))
return (52);
else if ((((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='<')))&&((tidystr[i][4]=='>')&&
(tidystr[i][5]==' ')))
return (53);
else if ((((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='>')))&&((tidystr[i][4]=='=')&&
(tidystr[i][5]==' ')))
return (54);
else if ((((tidystr[i][0]=='A')&&(tidystr[i][1]=='N'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='<')))&&((tidystr[i][4]=='=')&&
(tidystr[i][5]==' ')))
return (55);
else if ((((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='=')))&&(tidystr[i][4]==' '))
return (56);
else if ((((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='>')))&&(tidystr[i][4]==' '))
return (57);
else if ((((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='<')))&&(tidystr[i][4]==' '))
return (58);
else if ((((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='<')))&&((tidystr[i][4]=='>')&&
(tidystr[i][5]==' ')))
return (59);
else if ((((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='>')))&&((tidystr[i][4]=='=')&&
(tidystr[i][5]==' ')))
return (60);
else if ((((tidystr[i][0]=='O')&&(tidystr[i][1]=='R'))
&&((tidystr[i][2]=='D')
&&(tidystr[i][3]=='<')))&&((tidystr[i][4]=='=')&&
(tidystr[i][5]==' ')))
return (61); //以上为基本比较指令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -