我是自动机的新手,仅在昨天才对正则表达式进行了简要介绍。我已经阅读了定义正则表达式的各种规则。但是我无法区分正则表达式和某种语言的语法(没有教我正则表达式的语法)。
我知道语法可以帮助我们生成一种语言中的有效字符串,但这就是定义正则表达式状态的规则。那么区别在哪里呢?我问我的教授,他说正则表达式是一种语言中最基本的字符串,语法是任何一种语言的规则集,其顺序比正则表达式高。有人可以提供一些更深入的信息吗?
我是自动机的新手,仅在昨天才对正则表达式进行了简要介绍。我已经阅读了定义正则表达式的各种规则。但是我无法区分正则表达式和某种语言的语法(没有教我正则表达式的语法)。
我知道语法可以帮助我们生成一种语言中的有效字符串,但这就是定义正则表达式状态的规则。那么区别在哪里呢?我问我的教授,他说正则表达式是一种语言中最基本的字符串,语法是任何一种语言的规则集,其顺序比正则表达式高。有人可以提供一些更深入的信息吗?
Answers:
正则表达式,正则语法和有限自动机只是同一事物的三种不同形式主义。有算法可以将它们中的任何一种转换为其他任何一种。
我们拥有这三个的基本原因是它们是独立创建的,并且具有由Kleene证明的第一对等价集(也存在其他几种形式主义)(此结果或其一部分称为Kleene定理)。
因此,在这种情况下,取决于您要运行模型的方式,它们都可以识别或生成常规语言的字符串,从数学上讲,就没有什么区别了。
当然,由于形式主义的细节,有时一个模型比另一个模型更容易用于特定任务。此外,它们在人脑中的工作方式通常有些不同,有限的自动机“感觉”(如计算机),正则表达式“感觉”(如您要从较小的子字符串构造字符串)和正则语法“感觉”(如较传统的语法)语言中句子的派生或分类(当您查看历史记录时就不足为奇了)。
因此,为了比较两者,让我们定义它们:
常用表达
因此,正则表达式的递归定义如下:
连同一些语义(即,我们如何解释运算符以获取字符串),我们获得了一种从常规语言生成字符串的方法。
普通文法
右线性文法
左线性文法
思考的事情
因此,查看这些定义并使用它们,我们可以看到正则表达式看起来像匹配规则,或一次处理字符串的方式。
但是,这些工具确实在做相同的基本事情,如何看待它们的功能隐喻完全取决于您。