⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phrase_check.cpp

📁 开发虚拟的被控对象及虚拟的PLC,模似PLC的工作过程进行实验。用户可根据具体的实验,确定其输入和输出的控制条件,用虚拟的连线和虚拟的PLC连接,用户利用梯形图的编程方式编写PLC程序控制被控对象的动
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//程序输入和语法检查模块
#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 + -