可空性(正则表达式)

时间:2011-01-02 08:01:07

标签: regex nullable derivative

在Brzozowski的“正则表达式的导数”和其他地方,如果R可以为空,函数δ(R)返回λ,否则,包括如下条款:

δ(R1 + R2) = δ(R1) + δ(R2)
δ(R1 · R2) = δ(R1) ∧ δ(R2)

显然,如果 R1 R2 都可以为空,那么( R1·R2 )可以为空,如果 R1 < / em>或 R2 可以为空,然后( R1 + R2 )可以为空。然而,我不清楚上述条款应该是什么意思。我的第一个想法,映射(+),(·)或布尔运算到常规集是没有意义的,因为在基本情况下,

δ(a) = ∅ (for all a ∈ Σ)
δ(λ) = λ
δ(∅) = ∅

和λ不是集合(也不是设置δ的返回类型,这是正则表达式)。此外,没有指出这种映射,并且有一个单独的表示法。我理解可空性,但我对δ定义中的和,乘积和布尔运算的定义感到迷失:λ或how如何从δ( R1 )∧δ( R2 ),例如,在关闭δ的定义中( R1·R2 )?

3 个答案:

答案 0 :(得分:3)

我认为您分别将+^映射到布尔orand是正确的。看起来你引用的两行涉及交替(总和)和连接(产品):

δ(R1 + R2) = δ(R1) + δ(R2)

如果R1可以为空,R2可以为空,或R1R2,则R1R2更改可以为空并且δ(R1 · R2) = δ(R1) ∧ δ(R2) 可以为空。

R1

R2R1连接只有在R2和{{1}}都可以为空的情况下才可以为空。

有关这些规则的Haskell实现,请参阅here

答案 1 :(得分:2)

(我不能深入研究Brzozowski的文章,以便更好地理解那里的含义),但我可以提出两种方法来解释这种符号(除了用符号表示,我看,没有问题) :这个定义的意图很好理解):

1)在定义的左边,我们只有正则表达式的“语法”模式。在右边,我们制作套装;记住,正则表达式是表示语言(集合)的一种方式,因此这种写下定义的方式变得可以理解:在右边,我们只是使用一些(简单)正则表达式作为引用的简短方法集。即,∅表示空语言(空集),λ(如果解释作为正则表达式)表示仅包含空字(具有此元素的集合)的语言。

操作只是对集合的操作:可能是union和交集。

如果符号以这种方式解释,则使用的符号与基本案例相抵触并不矛盾:同样,“a”是一个正则表达式,表示带有单词“a”的语言。

2)我们首先在右侧构建常规表达式,但作者已经扩展了使用楔形构建正则表达式的操作,该楔形具有语言交集的语义。

答案 2 :(得分:2)

我认为你被作者所采取的符号自由所困扰。 δ(R)的返回类型肯定是一组,或者更确切地说是一种语言。如果你看一下定义:

alt text

你可以看到返回类型存在不一致,正式λ是一个元素,但是∅是空语言......应该说的是:

alt text

作者对空字符串以及仅包含空字符串的语言使用λ这一事实进一步证明了他对Kleene星运算符的定义:

alt text

显然,如果我们想要迂腐,最后一部分应该是alt text

鉴于δ(R)的返回类型是一个集合,或者更确切地说是一种语言,你给出的方程式非常有意义,并且完全表达了你所描述的内容。