通过逆波兰表达式对五防逻辑表达式进行校验的方法

文档序号:9910895阅读:1086来源:国知局
通过逆波兰表达式对五防逻辑表达式进行校验的方法
【技术领域】
[0001]本发明涉及电子信息及数据处理技术领域,具体涉及一种通过逆波兰表达式对五防逻辑表达式进行校验的方法。
【背景技术】
[0002]变电站的倒闸操作需要使用操作票,而操作票中的操作步骤的合法性,需要由五防软件进行判断,目前五防软件的判断依据只有两种方法:(I)五防逻辑校核表达式;(2)电网拓朴分析。但是由于电网拓朴分析不具备可视性,一般的变电站要求必须采用五防逻辑校核表达式判断操作步骤的合法性。综上,一般变电站进行倒闸操作必须得使用五防逻辑校核表达式。
[0003]—种五防逻辑校核表达式的结构,例如:
[0004]“1115-3L: {} 1111115 = 10,(1115-1=01+1115-2 = 01)!”解释如下:
[0005]1115-3L:此为操作设备与状态,表示该条逻辑表达式是对1115-3编号的设备进行分操作(L为分操作,H为合操作);
[0006]{}| I 1:此为情况条件,表示该逻辑表达式是单一情况操作。如果有多种情况条件,那么会表达成“{...} I 2 1...; I 11...!”,且没有个数限制。多种情况条件下,情况条件I中“{Γ中不能有语句,其他情况条件的“{}”必须都存在语句,同时必须为高条件在前,低条件在后。例如:1115H:{ 1115 = 00} |2|...} 111...!;
[0007]1115 = 10,(1115-1 = 01+1115-2 = 01)!:此为第一种情况条件对应的逻辑表达式,表示满足当前设备操作需要的其他设备状态。其中“=”左侧表示当前需要判断的设备,右侧第二位表示当前设备需要判断的设备需要的状态,右侧第一位表示如果当前设备需要判断的设备需要的状态与其实际状态不符的错误原因序号;“,”表示“且”的意思;“O”表示括号内的是一个整体,优先判断;“+”表示或的意思。
[0008]那么当前这条表达式解释为1115-3设备需要分开的条件为:1115当前状态为分(如果不为分,提示为I号错误),而且1115-1或者1115-2当前状态为合(如果都不满足,提示O号错误)。
[0009]五防逻辑校核表达式直接关系到电网的人身与财产安全,但是五防逻辑校核表达式中存在校核优先级顺序,导致表达式中存在“O”等来表明优先级的符号。
[0010]如此,存在一个明显缺陷:程序员在编写代码时,判断当前设备是否满足五防逻辑表达式的语句,进行表达式字符串拆分时,会对含有多重“O”的表达式进行拆分,难免会出现拆分错误或者考虑不全面的情况,引起变电站现场倒闸操作的错误,严重时,会影响操作人员的人生安全。
[0011]波兰逻辑学家J.Lukasiewi CZ于1929年提出了逆波兰表达式,逆波兰表达式又叫做后缀表达式,下面是一些例子:
[0012]正常的表达式逆波兰表达式
[0013]a+b--->a,b,+
[0014]a+(b_c)--->a,b,c,-,+
[0015]a+(b_c)*d--->a,b,c,-,d,*,+
[0016]a+d*(b_c)--->a,d,b,c,-,*,+
[0017]a = 1+3--->a = 1,3+
[0018]它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)*(c+d)转换为ab+cd+*。它的优势在于只用两种简单操作,入栈和出栈就可以搞定任何普通表达式的运算。其运算方式如下:
[0019]如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。

【发明内容】

[0020]本发明提供一种通过逆波兰表达式对五防逻辑表达式进行校验的方法,能够在五防逻辑校核表达式转换成逆波兰表达式的过程中,把最明显的缺陷一一“()”全部转换掉,从而完全避免在判断当前设备是否满足五防逻辑表达式的语句时,可能出现的问题。本发明的目的由以下技术方案实现:
[0021 ] 一种通过逆波兰表达式对五防逻辑表达式进行校验的方法,如下:
[0022](I)首先构造一个运算符栈SI和逆波兰栈S2,运算符在运算符栈SI内遵循越往栈顶优先级越尚的原则;
[0023](2)读入需要操作设备对应状态的五防逻辑;
[0024](3)判断是否存在没有转换的情况条件,存在则进入步骤(4),否则逻辑校验不通过并结束;
[0025](4)读入该情况条件下对应的五防逻辑表达式,并从左至右扫描该情况条件下对应的五防逻辑表达式;
[0026](5)如果当前字符是数字,则分析到该数字串的结束并将该数字串直接输出并压入逆波兰栈S2;如果不是数字,该字符则是运算符,此时需比较优先关系后再将该字符压入逆波兰栈S2 ;
[0027](6)重复步骤(5)直至扫描完该情况条件下对应的五防逻辑表达式,确定所有字符都得到处理,便将该情况条件下对应的五防逻辑表达式转化为逆波兰表示的简单算术表达式;
[0028](7)将逆波兰栈S2中所有元素出栈,组成字符串,各个元素之间以“I”分割,并对转换完成的逆波兰表达式进行求值运算;
[0029](8)判断求值结果是否通过,通过则提示校验通过可以操作,否则返回步骤(3)。
[0030]作为具体的技术方案,所述步骤(5)中比较优先关系的做法如下:将该字符与运算符栈SI栈顶的运算符的优先关系相比较,如果该字符优先关系高于此运算符栈顶的运算符,则将该字符压入逆波兰栈S2,否则将栈顶的运算符从运算符栈SI中弹出,如此比较,直到运算符栈SI栈顶运算符的优先级低于当前运算符,将该字符压入逆波兰栈S2。
[0031]本发明的有益效果在于,根据逆波兰表达式将传统的五防逻辑表达式进行转换,剔除表达式中复杂的算术符号“O”,只留下最简单的运算,能够保证方法的正确性的同时,减少程序员出现BUG的可能性,提高五防软件对于五防校验的准确性,同时能减少测试部门的测试压力。
【附图说明】
[0032]图1为逆波兰表达式转换流程图。
[0033]图2为本发明提供的通过逆波兰表达式对五防逻辑表达式进行校验的方法的流程图。
【具体实施方式】
[0034]如图1所示,将一个普通的中序表达式转换为逆波兰表达式的一般算法是:
[0035](I)首先构造一个运算符栈SI和逆波兰栈S2,运算符在运算符栈SI内遵循越往栈顶优先级越
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1