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

文档序号:9910895阅读:来源:国知局
高的原则。
[0036](2)读入一个用中缀表示的简单算术表达式,并从左至右扫描该算术表达式。
[0037](3)如果当前字符是数字,则分析到该数字串的结束并将该数字串直接输出并压入逆波兰栈S2;如果不是数字,该字符则是运算符,此时需比较优先关系,做法如下:将该字符与运算符栈SI栈顶的运算符的优先关系相比较,如果该字符优先关系高于此运算符栈顶的运算符,则将该字符压入逆波兰栈S2,否则将栈顶的运算符从运算符栈SI中弹出,如此比较,直到运算符栈SI栈顶运算符的优先级低于当前运算符,将该字符压入逆波兰栈S2。
[0038](4)重复上述操作(3)-(4)直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。
[0039]本实施例通过将常规的五防逻辑校核表达式进行分析转换,得到一种逆波兰表达式,从而进行逆波兰表达式的算术运算,得出当前操作是否满足逆波兰表达式的算术运算,最终得出当前操作是否可以操作。
[0040]结合图2所示,本实施例提供的通过逆波兰表达式对五防逻辑表达式进行校验的方法,包括如下步骤:
[0041 ] (I)首先构造一个运算符栈SI和逆波兰栈S2,运算符在运算符栈SI内遵循越往栈顶优先级越高的原则。
[0042](2)读入需要操作设备对应状态的五防逻辑。
[0043](3)判断是否存在没有转换的情况条件,存在则进入步骤(4),否则逻辑校验不通过并结束。
[0044](4)读入该情况条件下对应的五防逻辑表达式,并从左至右扫描该情况条件下对应的五防逻辑表达式。
[0045](5)如果当前字符是数字,则分析到该数字串的结束并将该数字串直接输出并压入逆波兰栈S2;如果不是数字,该字符则是运算符,此时需比较优先关系,做法如下:将该字符与运算符栈SI栈顶的运算符的优先关系相比较,如果该字符优先关系高于此运算符栈顶的运算符,则将该字符压入逆波兰栈S2,否则将栈顶的运算符从运算符栈SI中弹出,如此比较,直到运算符栈SI栈顶运算符的优先级低于当前运算符,将该字符压入逆波兰栈S2。
[0046](6)重复步骤(5)直至扫描完该情况条件下对应的五防逻辑表达式,确定所有字符都得到处理,便将该情况条件下对应的五防逻辑表达式转化为逆波兰表示的简单算术表达式。
[0047](7)将逆波兰栈S2中所有元素出栈,组成字符串,各个元素之间以“I”分割,并对转换完成的逆波兰表达式进行求值运算。
[0048](8)判断求值结果是否通过,通过则提示校验通过可以操作,否则返回步骤(3)。
[0049]下面通过一个实例帮助理解上述方法及过程:
[0050]如果要操作1115-3设备由合到分状态,获取到“1115-3L: {} 111115 = 10,(1115—1= 01+1115-2 = 01)!” 的逻辑表达式,“1115 = 10 ,(1115-1 = 01+1115-2 = 01)” 转换成:“1115
1I = 11115-11011 = 11115-21 OIl = I +1,I ”。“ I ”表示分割符号,方便对此字符串拆解。
[0051]出栈及运算的过程如下:
[0052]读到1115,压栈;读到10,压栈;读到“= ”,将栈顶的两个元素“1115” “10”弹出,判断1115与10是否相等,将结果入栈。
[0053]继续读取到1115-1,压栈;读到01,压栈;读到“= ”,将栈顶的两个元素“1115-1”“01”弹出,判断1115-1与01是否相等,将结果入栈。
[0054]如此循环,最后读取到“+”,则将栈顶两个元素(即之前运算的结果)弹出,出作相应运算,结果再入栈。最终栈里只剩下一个值,即为表达式的结果。
[0055]上述实施例仅为充分公开而非限制本发明,凡是依据本发明创新主旨且未经创造性劳动即可获得的等效技术特征替换及增减,均应属于本发明涵盖范围。
【主权项】
1.一种通过逆波兰表达式对五防逻辑表达式进行校验的方法,其特征在于,包括如下步骤: (1)首先构造一个运算符栈SI和逆波兰栈S2,运算符在运算符栈SI内遵循越往栈顶优先级越尚的原则; (2)读入需要操作设备对应状态的五防逻辑; (3)判断是否存在没有转换的情况条件,存在则进入步骤(4),否则逻辑校验不通过并结束; (4)读入该情况条件下对应的五防逻辑表达式,并从左至右扫描该情况条件下对应的五防逻辑表达式; (5)如果当前字符是数字,则分析到该数字串的结束并将该数字串直接输出并压入逆波兰栈S2;如果不是数字,该字符则是运算符,此时需比较优先关系后再将该字符压入逆波兰栈S2 ; (6)重复步骤(5)直至扫描完该情况条件下对应的五防逻辑表达式,确定所有字符都得到处理,便将该情况条件下对应的五防逻辑表达式转化为逆波兰表示的简单算术表达式; (7)将逆波兰栈S2中所有元素出栈,组成字符串,各个元素之间以“I”分割,并对转换完成的逆波兰表达式进行求值运算; (8)判断求值结果是否通过,通过则提示校验通过可以操作,否则返回步骤(3)。2.根据权利要求1所述的通过逆波兰表达式对五防逻辑表达式进行校验的方法,其特征在于,所述步骤(5)中比较优先关系的做法如下:将该字符与运算符栈SI栈顶的运算符的优先关系相比较,如果该字符优先关系高于此运算符栈顶的运算符,则将该字符压入逆波兰栈S2,否则将栈顶的运算符从运算符栈SI中弹出,如此比较,直到运算符栈SI栈顶运算符的优先级低于当前运算符,将该字符压入逆波兰栈S2。
【专利摘要】本发明公开一种通过逆波兰表达式对五防逻辑表达式进行校验的方法,该方法主要是通过构造一个运算符栈S1和逆波兰栈S2,然后读入需要操作设备对应状态的五防逻辑,判断是否存在没有转换的情况条件,并读入没有转换的情况条件下对应的五防逻辑表达式,并从左至右扫描该情况条件下对应的五防逻辑表达式;最后根据逆波兰表达式将传统的五防逻辑表达式进行转换,剔除表达式中复杂的算术符号“()”,只留下最简单的运算,能够保证方法的正确性的同时,减少程序员出现BUG的可能性,提高五防软件对于五防校验的准确性,同时能减少测试部门的测试压力。
【IPC分类】G06F11/25
【公开号】CN105677528
【申请号】CN201610012671
【发明人】王中, 叶文林, 刘翔, 张林颢
【申请人】长园共创电力安全技术股份有限公司
【公开日】2016年6月15日
【申请日】2016年1月6日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1