regex - 可空性(正则表达式)

标签 regex nullable derivative

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

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

显然,如果 R1 和 R2 都可以为空,则 (R1 · R2) 可以为空,如果 R1 或 R2 可以为空,则 (R1 + R2) 可以为空。然而,我不清楚上述条款的含义。我的第一个想法是,将 (+)、(·) 或 bool 运算映射到常规集合是无意义的,因为在基本情况下,
δ(a) = ∅ (for all a ∈ Σ)
δ(λ) = λ
δ(∅) = ∅

并且 λ 不是集合(也不是集合 δ 的返回类型,它是一个正则表达式)。此外,此映射未指明,并且有单独的表示法。我理解可空性,但我对 δ 定义中的和、乘积和 bool 运算的定义迷失了:例如,在定义中,λ 或 ∅ 是如何从 δ(R1) ∧ δ(R2) 返回的关闭δ(R1·R2)?

最佳答案

我认为你是正确的映射 +^到 bool 值 orand分别。看起来您引用的两行处理交替(总和)和串联(产品):

δ(R1 + R2) = δ(R1) + δ(R2)
R1的交替和 R2如果 R1 可以为空可以为空,R2可以为空,或者两者都可以为空 R1R2可以为空。
δ(R1 · R2) = δ(R1) ∧ δ(R2)
R1的串联和 R2只有在 R1 时才可以为空和 R2可以为空。

here对于这些规则的 Haskell 实现。

关于regex - 可空性(正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577653/

相关文章:

matlab - 在 MATLAB 中数值计算复值函数的导数

machine-learning - 为什么使用函数的导数而不是实际函数来计算局部最小值?

javascript - 从javascript中的字符串中删除反斜杠

c# - 基于严格要求的正则表达式拆分和提取

php - 使用 PHP 匹配 HTML <p> 标记的正则表达式

c# - 如何将 nullable int 转换为 nullable short?

oracle - 如何约束多列以防止重复,但忽略空值?

c++ - 在 C++ 中计算尖点的斜率

regex - Vim 查找并替换 '=' 之后的所有内容,直到行尾 ($)

c# - 为什么可为空的 bool 值不允许 if(nullable) 但允许 if(nullable == true)?