正则表达式,正则语法和有限自动机只是同一事物的三种不同形式主义。有算法可以将它们中的任何一种转换为其他任何一种。
我们拥有这三个的基本原因是它们是独立创建的,并且具有由Kleene证明的第一对等价集(也存在其他几种形式主义)(此结果或其一部分称为Kleene定理)。
因此,在这种情况下,取决于您要运行模型的方式,它们都可以识别或生成常规语言的字符串,从数学上讲,就没有什么区别了。
当然,由于形式主义的细节,有时一个模型比另一个模型更容易用于特定任务。此外,它们在人脑中的工作方式通常有些不同,有限的自动机“感觉”(如计算机),正则表达式“感觉”(如您要从较小的子字符串构造字符串)和正则语法“感觉”(如较传统的语法)语言中句子的派生或分类(当您查看历史记录时就不足为奇了)。
因此,为了比较两者,让我们定义它们:
常用表达
因此,正则表达式的递归定义如下:
是一个正则表达式∅∅
是一个正则表达式εε
是每一个正则表达式一个∈Σ一个a一个∈Σa∈Σ
如果和B是正则表达式,则
一个A乙B是正则表达式(concatentation)一个⋅乙A⋅B
是一个正则表达式(替换)一个|乙A∣B
是一个正则表达式(克林星)一个∗A∗
连同一些语义(即,我们如何解释运算符以获取字符串),我们获得了一种从常规语言生成字符串的方法。
普通文法
(N,∑,P,S∈ñ)(N,Σ,P,S∈N)ñNΣΣ小号SPPΣ∗Σ∗PP
右线性文法
乙BCC一个aεε
B→aB→a
B→ACB→aC
B→εB→ε
左线性文法
B→C一个B→Ca
思考的事情
因此,查看这些定义并使用它们,我们可以看到正则表达式看起来像匹配规则,或一次处理字符串的方式。
SS
但是,这些工具确实在做相同的基本事情,如何看待它们的功能隐喻完全取决于您。