当前位置: 首页 > 专利查询>华侨大学专利>正文

一种智慧物流控制系统的正则表达式测试方法和系统技术方案

技术编号:36861381 阅读:16 留言:0更新日期:2023-03-15 18:33
本发明专利技术涉及一种智慧物流控制系统的正则表达式测试方法和系统,属于电子技术领域。本发明专利技术基于给定的正则表达式识别得到元字符后,确定元字符的优先级关系,并基于优先级关系构建优先级表,接着,基于优先级表,将正则表达式转换为后缀形式的正则表达式,以构造抽象语法树,然后,遍历抽象语法树,并在遍历过程中对访问到的结点创建字符串集合,提取字符串集合中与抽象语法树根结点对应的字符串集合,并进行整理得到测试字符串,最后,基于测试字符串正则表达式的测试,能够在提高正则表达式描述效率的同时,提高正则表达式测试的正确性,进而能够为智慧物流机器人控制系统的有效和可靠应用提供支持。应用提供支持。应用提供支持。

【技术实现步骤摘要】
一种智慧物流控制系统的正则表达式测试方法和系统


[0001]本专利技术涉及电子
,特别是涉及一种智慧物流控制系统的正则表达式测试方法和系统。

技术介绍

[0002]智慧物流机器人控制系统中广泛使用正则表达式来描述快递单号、邮寄地址、电话号码等信息的模式规则,进而实现相关信息的智能识别、自动匹配等操作。然而,由于正则表达式语法比较紧凑,并且使用大量元字符,导致开发人员在定义和使用时容易出错。即便是对于非常短的正则表达式,也很难快速读懂和理解其语义。错误的正则表达式会导致使用它们的物流控制系统出现缺陷,在部署后可能会产生无法预测的行为和结果。因此,保证正则表达式的正确性是其可靠应用的重要前提条件。

技术实现思路

[0003]本专利技术的目的是提供一种智慧物流控制系统的正则表达式测试方法和系统,能够在提高正则表达式描述效率的同时,提高正则表达式测试的正确性。
[0004]为实现上述目的,本专利技术提供了如下方案:
[0005]一种智慧物流控制系统的正则表达式测试方法,包括:
[0006]步骤1、对给定的正则表达式进行预处理,识别得到元字符;
[0007]步骤2、确定所述元字符的优先级关系,并基于所述优先级关系构建优先级表;
[0008]步骤3、基于所述优先级表,采用元字符栈将所述正则表达式转换为后缀形式的正则表达式;
[0009]步骤4、基于所述后缀形式的正则表达式构造抽象语法树;
[0010]步骤5、遍历所述抽象语法树,并在遍历过程中对访问到的结点创建字符串集合;
[0011]步骤6、提取所述字符串集合中与抽象语法树根结点对应的字符串集合,并进行整理得到测试字符串;
[0012]步骤7、基于所述测试字符串完成对给定的正则表达式的测试。
[0013]优选地,所述步骤3具体包括:
[0014]步骤3.1、定义元字符栈,并对所述元字符栈进行初始化操作;
[0015]步骤3.2、设置后缀表达式E

初始为空,选取一个没有在给定的正则表达式中出现过的符号,令该符号入栈,并令该符号的优先级最低;
[0016]步骤3.3、从左到右扫描给定的正则表达式中字符,并设当前扫描到的字符为ch;若字符ch是普通字符,则将字符ch连接到所述后缀表达式E

中;若字符ch是元字符,则进行如下操作:
[0017]若字符ch是左小括号,则将字符ch压入所述元字符栈;
[0018]若字符ch是右小括号,则根据括号配对规则,将元字符栈的当前栈顶元素设为与字符ch匹配的左小括号,以从元字符栈弹出左小括号进行脱括号操作;
[0019]若字符ch是运算符且字符ch优先级比当前元字符栈中最后进入的元素的优先级高,则将字符ch压入元字符栈;
[0020]若字符ch是运算符且其优先级比当前元字符栈中最后进入的元素的优先级低,则从元字符栈中连续弹出优先级比字符ch高的运算符并按照弹出顺序依次连接到后缀表达式E

中,然后将字符ch压入元字符栈;所述普通字符包括数字和字母;所述元字符为用于描述字符串上不同运算的运算符;
[0021]步骤3.4、重复步骤3.2至步骤3.3,直至所述给定的正则表达式中的字符全部扫描完毕,得到所述后缀形式的正则表达式。
[0022]优选地,所述步骤4具体包括:
[0023]步骤4.1、定义一个结点栈并初始化为空;
[0024]步骤4.2、从左到右扫描所述后缀形式的正则表达式中的字符,并设当前扫描到的字符为ch


[0025]步骤4.3、若字符ch

是普通字符,则将字符ch

构造成叶子结点,并将该叶子结点压入所述结点栈;
[0026]步骤4.4、若字符ch

是元字符,则执行以下操作:
[0027]若字符ch

是二元运算符,则将字符ch

构造成非叶子结点,将后缀形式的正则表达式中与字符ch

相邻的操作数存放在结点栈中,并从结点栈中连续弹出两个结点分别作为字符ch

的右孩子和左孩子,然后将字符ch

构造成的非叶子结点压入结点栈;
[0028]若字符ch

是一元运算符,则将字符ch

构造成非叶子结点,同时从结点栈中弹出一个结点作为字符ch

的左孩子,字符ch

的右孩子构造成空结点,然后将字符ch

构造成的非叶子结点压入结点栈;
[0029]重复步骤4.2至步骤4.4,直至后缀形式的正则表达式中的字符全部扫描完毕,则结点栈中的栈顶元素即作为抽象语法树的树根结点。
[0030]优选地,所述步骤5具体包括:
[0031]遍历所述抽象语法树时,若当前访问的抽象语法树中的结点n是空结点,则构造字符串集合S(n)为S(n)={ε},其中,ε是空字符串;
[0032]若当前访问的抽象语法树中的结点n是叶子结点,则构造字符串集合S(n)为S(n)={ch”},ch”是结点n的字符;
[0033]若当前访问的抽象语法树中的结点n是非叶子结点,则依据结点n中字符θ的字符类型进行字符串集合的构造。
[0034]优选地,依据结点n中字符θ的字符类型进行字符串集合的构造,具体包括:
[0035]若结点n中字符θ是选择运算符,则构造字符串集合S(n)为S(n)=S(nl)∪S(nr);nl为结点n的左孩子,nr为结点n的右孩子,结点n的左孩子对应的字符串集合为S(nl),结点n的右孩子对应的字符串集合为S(nr);
[0036]若结点n中字符θ是连接运算符,则通过结点n的左孩子对应的字符串集合S(nl)和结点n的右孩子对应的字符串集合S(nr)中字符串的连接构造字符串集合S(n);
[0037]若结点n中字符θ是零次或一次运算符,则通过左孩子结点对应的全部字符串和空串构造字符串集合S(n)为:S(n)=S(nl)∪{ε};
[0038]若结点n中字符θ是任意次重复运算符,则根据左孩子结点对应的字符串上的重复
运算构造字符串集合S(n);
[0039]若结点n中字符θ是一次或多次重复运算符,则根据左孩子结点对应的字符串上的重复运算构造字符串集合S(n)。
[0040]优选地,通过结点n的左孩子对应的字符串集合S(nl)和结点n的右孩子对应的字符串集合S(nr)中字符串的连接构造字符串集合S(n),具体步骤为:
[0041]对字符串集合S(nr)中的字符串按照长度进行排序;
[0042]按照排好的次序将字符串集合S(nl)中第一个字符串与字符串集合S(nr)中第一个字符串进行连接,并将得到的新字符串加入字符串集合S(n

)中,将字符串集合S(本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种智慧物流控制系统的正则表达式测试方法,其特征在于,包括:步骤1、对给定的正则表达式进行预处理,识别得到元字符;步骤2、确定所述元字符的优先级关系,并基于所述优先级关系构建优先级表;步骤3、基于所述优先级表,采用元字符栈将所述正则表达式转换为后缀形式的正则表达式;步骤4、基于所述后缀形式的正则表达式构造抽象语法树;步骤5、遍历所述抽象语法树,并在遍历过程中对访问到的结点创建字符串集合;步骤6、提取所述字符串集合中与抽象语法树根结点对应的字符串集合,并进行整理得到测试字符串;步骤7、基于所述测试字符串完成对给定的正则表达式的测试。2.根据权利要求1所述的智慧物流控制系统的正则表达式测试方法,其特征在于,所述步骤3具体包括:步骤3.1、定义元字符栈,并对所述元字符栈进行初始化操作;步骤3.2、设置后缀表达式E

初始为空,选取一个没有在给定的正则表达式中出现过的符号,令该符号入栈,并令该符号的优先级最低;步骤3.3、从左到右扫描给定的正则表达式中字符,并设当前扫描到的字符为ch;若字符ch是普通字符,则将字符ch连接到所述后缀表达式E

中;若字符ch是元字符,则进行如下操作:若字符ch是左小括号,则将字符ch压入所述元字符栈;若字符ch是右小括号,则根据括号配对规则,将元字符栈的当前栈顶元素设为与字符ch匹配的左小括号,以从元字符栈弹出左小括号进行脱括号操作;若字符ch是运算符且字符ch优先级比当前元字符栈中最后进入的元素的优先级高,则将字符ch压入元字符栈;若字符ch是运算符且其优先级比当前元字符栈中最后进入的元素的优先级低,则从元字符栈中连续弹出优先级比字符ch高的运算符并按照弹出顺序依次连接到后缀表达式E

中,然后将字符ch压入元字符栈;所述普通字符包括数字和字母;所述元字符为用于描述字符串上不同运算的运算符;步骤3.4、重复步骤3.2至步骤3.3,直至所述给定的正则表达式中的字符全部扫描完毕,得到所述后缀形式的正则表达式。3.根据权利要求1所述的智慧物流控制系统的正则表达式测试方法,其特征在于,所述步骤4具体包括:步骤4.1、定义一个结点栈并初始化为空;步骤4.2、从左到右扫描所述后缀形式的正则表达式中的字符,并设当前扫描到的字符为ch

;步骤4.3、若字符ch

是普通字符,则将字符ch

构造成叶子结点,并将该叶子结点压入所述结点栈;步骤4.4、若字符ch

是元字符,则执行以下操作:若字符ch

是二元运算符,则将字符ch

构造成非叶子结点,将后缀形式的正则表达式中与字符ch

相邻的操作数存放在结点栈中,并从结点栈中连续弹出两个结点分别作为字
符ch

的右孩子和左孩子,然后将字符ch

构造成的非叶子结点压入结点栈;若字符ch

是一元运算符,则将字符ch

构造成非叶子结点,同时从结点栈中弹出一个结点作为字符ch

的左孩子,字符ch

的右孩子构造成空结点,然后将字符ch

构造成的非叶子结点压入结点栈;重复步骤4.2至步骤4.4,直至后缀形式的正则表达式中的字符全部扫描完毕,则结点栈中的栈顶元素即作为抽象语法树的树根结点。4.根据权利要求1所述的智慧物流控制系统的正则表达式测试方法,其特征在于,所述步骤5具体包括:遍历所述抽象语法树时,若当前访问的抽象语法树中的结点n是空结点,则构造字符串集合S(n)为S(n)={ε},其中,ε是空字符串;若当前访问的抽象语法树中的结点n是叶子结点,则构造字符串集合S(n)为S(n)={ch”},ch”是结点n的字符;若当前访问的抽象语法树中的结点n是非叶子结点,则依据结点n中字符θ的字符类型进行字符串集合的构造。5.根据权利要求1所述的智慧物流控制系统的正则表达式测试方法,其特征在于,依据结点n中字符θ的字符类型进行字符串集合的构造,具体包括:若结点n中字符θ是选择运算符,则构造字符串集合S(n)为S(n)=S(nl)∪S(nr);nl为结点n的左孩子,nr为结点n的右孩子,结点n的左孩子对应的字符串集合为S(nl),结点n的右孩子对应的字符串集...

【专利技术属性】
技术研发人员:郑黎晓陈祖希骆翔宇周长利
申请(专利权)人:华侨大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1