词法分析(二):词法规则的形式化——正规式与正规集
语法描述的基本概念
复习一下语法描述的基本概念:
字母表:一个有穷字符集,记为Σ
字母表中的每个元素称为字符
Σ上的字(字符串):由Σ中的字符构成的一个有穷序列
不包含任何字符的序列称为空字,记为ε
Σ*表示Σ上所有字的全体(Σ上所有字符所能产生的字),包含空字ε
例:设Σ={ a,b },则
Σ* = { ε,a,b,aa,ab,bb,ba,aaa,…}
若U、V为Σ*的两个子集,则U和V的连接(积)定义为
UV = { αβ | α∈U & β∈V },顺序不可颠倒
例:设U = { a,aa }、V = { b,bb }
则UV = { ab,abb,aab,aabb }
V自身的n次积记为Vn
V0 = { ε }
V*是V的闭包:V*=V0∪V1∪V2∪V3∪…
V+是V的正规闭包:V+ = VV*
例:设U={ a,aa }
U* = { ε,a,aa,aaa,……}
U+ = { a,aa,aaa,aaaa,……}
可以看出正规闭包是不包含 ε 的闭包
正规式与正规集
程序语言都有一定的词法规则,按照这些词法规则产生的单词符号都是一些特殊的字符串,
因此,可以形式化地描述词法规则,即描述了词法规则对应的单词集合
正规式即是词法规则一种形式化描述,对应的单词集合称为正规集
(正规式其实就是正则表达式 )
一个字的集合是正规集当且仅当它能用正规式表示
正规式⇔正规集
上面这张图就描述了右边单词表定义的语言的所有的字
因为正规式可以识别语言的所有字,所以可以用正规式进行词法分析
正规式与正规集的递归定义
对于给定的字母表Σ
- ε和Φ都是Σ上的正规式,它们所表示的正规集是{ε}和Φ
- 任何a∈Σ,a是Σ上的正规式,它所表示的正规集是{a}
- 若U和V都是Σ上的正规式,它们所表示的正规集为L(U)、L(V),则有
- (U|V)为正规式,表示的正规集为L(U)∪L(V)
- (U·V)为正规式,表示的正规集为L(U)L(V)
- (U)* 为正规式,表示的正规集为(L(U))*
仅由有限次使用上述三个步骤定义的表达式才是Σ上的正规式
仅由这些正规式表示的字集才是正规集
根据定义
ε是Σ上的一个字,且是正规集{ ε }的正规式,可识别字ε
Φ是一个集合,也是正规式,表示的正规集是Φ
任何a∈Σ,a既是Σ中的字符,又是Σ上的字,还是Σ上的正规式,表示的正规集是{a}
正规式的等价
若两个正规式表示的正规集相同,则称这两个正规式等价
以上证明表示正规式b(ab)*与(ba)*b等价
正规式的性质
交换律:e1|e2 = e2|e1
结合律:e1|(e2|e3) = (e1|e2)|e3 e1(e2e3) = (e1e2)e3 | 及 · 运算均满足结合律
分配律:e1(e2|e3) = e1e2|e1e3 (e2|e3)e1 = e2e1|e3e1 | 对 · 及 · 对 | 的运算均满足分配律
eε = εe = e
e1e2<>e2e1
原文转载自:https://www.cnblogs.com/kafm/p/12721805.html
2022-03-08
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?