自动机中正则表达式与语法的区别


12

我是自动机的新手,仅在昨天才对正则表达式进行了简要介绍。我已经阅读了定义正则表达式的各种规则。但是我无法区分正则表达式和某种语言的语法(没有教我正则表达式的语法)。

我知道语法可以帮助我们生成一种语言中的有效字符串,但这就是定义正则表达式状态的规则。那么区别在哪里呢?我问我的教授,他说正则表达式是一种语言中最基本的字符串,语法是任何一种语言的规则集,其顺序比正则表达式高。有人可以提供一些更深入的信息吗?

Answers:


22

正则表达式,正则语法和有限自动机只是同一事物的三种不同形式主义。有算法可以将它们中的任何一种转换为其他任何一种。

我们拥有这三个的基本原因是它们是独立创建的,并且具有由Kleene证明的第一对等价集(也存在其他几种形式主义)(此结果或其一部分称为Kleene定理)。

因此,在这种情况下,取决于您要运行模型的方式,它们都可以识别或生成常规语言的字符串,从数学上讲,就没有什么区别了。

当然,由于形式主义的细节,有时一个模型比另一个模型更容易用于特定任务。此外,它们在人脑中的工作方式通常有些不同,有限的自动机“感觉”(如计算机),正则表达式“感觉”(如您要从较小的子字符串构造字符串)和正则语法“感觉”(如较传统的语法)语言中句子的派生或分类(当您查看历史记录时就不足为奇了)。

因此,为了比较两者,让我们定义它们:

常用表达

因此,正则表达式的递归定义如下:

  1. 是一个正则表达式
  2. 是一个正则表达式ε
  3. 是每一个正则表达式一个∈ ΣaaΣ
  4. 如果B是正则表达式,则 AB
    • 是正则表达式(concatentation)AB
    • 是一个正则表达式(替换)AB
    • 是一个正则表达式(克林星)A

连同一些语义(即,我们如何解释运算符以获取字符串),我们获得了一种从常规语言生成字符串的方法。

普通文法

(N,Σ,P,SN)NΣSPΣP

右线性文法

BCaε

  1. Ba
  2. BaC
  3. Bε

左线性文法

BCa

思考的事情

因此,查看这些定义并使用它们,我们可以看到正则表达式看起来像匹配规则,或一次处理字符串的方式。

S

但是,这些工具确实在做相同的基本事情,如何看待它们的功能隐喻完全取决于您。


我将重点放在语法在语言中生成字符串这一事实上,而正则表达式(如您所说)更像是一种匹配模式,可以匹配(或“测试”)语言中的每个字符串。
Ran G.

@RanG。,的确是通常的思考方式,但是您可以同时翻转它们;自下而上的解析会针对语法对字符串进行测试,您可以使用正则表达式作为对语言的紧凑描述(尽管这可能不太常见)。
卢克·马蒂森

NSR

NRRP

@simpleBob,是的,那绝对是错字。谢谢!
路加·马蒂森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.