【编译原理】正则语言和表达式

文章讨论了正则语言和正则表达式的概念,指出DFSM和NFSM是等效的,都能识别正则语言。正则表达式可以通过并集、连接和重复等操作来构建,并且每个正则表达式都可以对应一个FSM,反之亦然。此外,文章还提到了证明语言正则性和非正则性的方法,如泵引理的应用。
摘要由CSDN通过智能技术生成

正则语言

DFSM和NFSM是等效的,我们将在方便的地方使用“FSM"。

FSM可以识别正则语言。

能用正则语言表述 《=》 对应的有限状态机

在这里插入图片描述

正则表达式:定义正则语言

每个正则表达式都等效于FSM:

  1. 对于任何正则表达式,都存在一个识别正则表达式定义的语言的FSM。
  2. 反之亦然:对于任何FSM,都存在定义FSM所识别语言的正则表达式。

由于FSM所识别的语言是正则的,因此,如果某个正则表达式对其进行了描述,那么语言就是正则的。

能够被FSM识别的语言一定是正则的。

语言是正则的《=》能用正则表达式描述它

一些相关的基本概念

正则表达式:表示字符串的模式

正则表达式r完全由它匹配的字符串集定义

集合称为r的语言,写为L(r)

集合元素称为符号

这组法律符号称为字母表,并写成希腊符号∑

基本概念和术语

字母表:一组非空有限元(符号)(例如{a, b, c, +, .})

字符串:任何有限的符号序列 (集合中的symbols)
在这里插入图片描述

正则操作

Union(并集):备选方案的选择,由元字符“|”或“∪”表示。
在这里插入图片描述
Concatenation(连接):由并列表示“○”
在这里插入图片描述
Repetition(重复)或 “closure”(结束),由元字符“*”表示
在这里插入图片描述

正则表达式:语法

语法:合法表达式
设∑为字母表。表达式R是正则的,如果R是以下表达式之一:

  1. 对于∑中的某个a
  2. 元字符ε(空字符串)
  3. Φ(空语言)
  4. R1 ∪ R2 其中R1和R2都是正则表达式
  5. R1 ○ R2 其中R1和R2都是正则表达式
  6. R*,其中A是正则表达式

其他一些正则表达式

R+表示R中具有非零长度的所有字符串的集合
R+ ∪ ε = R

正则表达式的限制

每一种有限语言都是正则的。

只有无限语言可以是非正则的,但并非所有无限语言都是非正则语言。

语言和正则表达式的关系

不是所有的语言可以用正则表达式表达出来。

不是所有的语言可以写成正则语言。

DFSM, NFSM, 正则语言, 正则表达式

DFSM和NFSM等效

  1. 每个DFSM都是NFSM
  2. 每个NFSM都可以转换为DFSM

FSM识别的语言(无论是确定性的还是非确定性的,因为它们是等价的)是正则的

正则表达式可用于定义语言

正则表达式等效于FSM

  1. 对于每个正则表达式,都有一个等效的FSM。
  2. 对于每个FSM,都有一个等价的正则表达式。
  3. 这意味着由正则表达式定义的语言是正则的,并且每个正则语言都有一个正则表达式。

证明语言的非正则

Interesting languages are nonregular (其中一些属于上下文无关语言类)

我们研究、证明并应用抽运引理作为证明语言非正则性的一种方法 (规则背后的直觉:无限语言有一些重复的结构)

证明语言的正则的方法

  1. 每个有限语言都是正则的
  2. 给出正则表达式
  3. 提供FSM
  4. 使用闭包性质

Thanks to Dr. John: Some contents are from their slides.

编译原理中的正则表达式转换为NFA(非确定有限状态自动机)是一个重要的步骤。在这个过程中,首先我们需要理解正则表达式的语法规则和语义含义。 正则表达式是一种用于描述字符序列的模式的表示方法。它由一系列字符和操作符构成,这些操作符可以表示字符的集合、重复等。例如,字符"a"表示一个字符"a",字符集[a-z]表示从"a"到"z"的任意字符。 转换正则表达式为NFA的方法是通过递归的方式对正则表达式进行解析和转换。具体步骤如下: 1. 将正则表达式的字符和操作符进行分组。 2. 对分组后的字符和操作符进行处理,生成对应的NFA片段。 3. 根据操作符的优先级,将NFA片段进行合并和连接。 4. 最后得到一个完整的NFA。 在处理正则表达式的过程中,需要考虑到操作符的优先级,例如,使用括号来指定操作符的优先级。同时,还需考虑到正则表达式中可能存在的特殊字符,比如*、+和|等。 通过正则表达式转换为NFA,可以实现对字符串的匹配和识别。NFA可以支持更加复杂的模式匹配需求,并且具有较高的灵活性和效率。 总的来说,将正则表达式转换为NFA是编译原理中的一个重要步骤。它需要理解正则表达式的语法和语义,并通过递归和合并方式生成对应的NFA片段。通过这一过程,可以实现对字符串的高效匹配和识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值