正则表达式属性(理论)

时间:2019-07-13 23:25:12

标签: regex theory

我正在阅读Aho和Ullman的书《解析,翻译和编译理论》。在第2章介绍正则表达式的部分中,列出了正则表达式的属性。我不了解属性2和8。这是属性列表:

(1)? + ? = ? + ?

(2)∅* =?

(3)? +(? + ?)=(? + ?)+ ?

(4)?(??)=(??)?

(5)?(? + ?)= ?? + ??

(6)(? + ?)? = ?? + ??

(7)?? = ?? = ?

(8)∅? = ?∅ =∅

(9)? * = ? + ? *

(10)(? *)* = ? *

(11)? + ? = ?

(12)? +∅= ?

其中∅是表示正则集合∅的正则表达式,∅,?,?是任意正则表达式,?是空字符串。

属性(2)和(8)如何合理?

编辑:为解释+,*等的表示法,这是本书(引用)中给出的一些定义:

  

定义令?为有限字母。我们定义一个常规集   ?以下列方式递归:

     

(1)∅(空集)是over上的常规集。

     

(2){?}是?的常规集。

     

(3){?}是?中所有?上regular的常规集。

     

(4)如果?和?是?上的正则集,那么

     

(a)?。

     

(b)??。

     

(c)?*。

     

(5)没有什么是常规集合了。

     

因此,且仅当if *的子集为∅,{?}或{?}时,它才是正规的,   ?中的某些?,或者可以通过有限数量的   合并,连接和关闭操作的应用程序。

  p和正则表达式的

DEFINITION 正则表达式   它们表示是递归定义的,如下所示:

     

(1)∅是表示正则集∅的正则表达式。

     

(2)?是一个正则表达式,表示正则集{?}。

     

(3)中的?是表示正则集{?}的正则表达式。

     

(4)如果?和?是表示正则集regular的正则表达式   和?,然后

     

(a)(?+?)是表示??的正则表达式。

     

(b)(??)是表示??的正则表达式。

     

(c)(?)*是表示?*的正则表达式。

     

(5)没什么是正则表达式。

1 个答案:

答案 0 :(得分:4)

我的猜测是2和8个属性可能只是一个简单的数学运算:

属性2

∅是一个空集,则∅* = ?是正确的,∅+ = ?也是如此,∅{Infinity} = ?也正确,因为e是一个空字符串。

正则表达式是字符串,因此重复任意次数或执行任何操作的空正则表达式仍是空正则表达式,再次等于右侧的空字符串。

参考: Why is the Kleene star of a null set is an empty string?


属性8

∅? = ?∅ = ∅是对的,∅?∅?∅? = ?∅?∅?∅ = ∅也是对的,因为空集与任何内容组合将导致空集。


参考:

Regular expressions with empty set/empty string

What is the difference between language of empty string and empty set language?

How can concatenating empty sets (languages) result in a set containing empty string?