词法分析(二):词法规则的形式化——正规式与正规集

词法分析概述


语法描述的基本概念

复习一下语法描述的基本概念:

字母表:一个有穷字符集,记为Σ
字母表中的每个元素称为字符
Σ上的字符串):由Σ中的字符构成的一个有穷序列
不包含任何字符的序列称为空字,记为ε
Σ*表示Σ上所有字的全体(Σ上所有字符所能产生的字),包含空字ε

例:设Σ={ 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 }
  • 若e1和e2都是Σ上的正规式,它们所表示的正规集为L(e1)、L(e2),则有
    • (e1|e2)为正规式,表示的正规集为L(e1)∪L(e2)
    • (e1·e2)为正规式,表示的正规集为L(e1)L(e2)
    • (e1)* 为正规式,表示的正规集为(L(e1))*
      仅由有限次使用上述三个步骤定义的表达式才是Σ上的正规式
      仅由这些正规式表示的字集才是正规集

根据定义
ε是Σ上的一个字,且是正规集{ ε }的正规式,可识别字ε
∅是一个集合,也是正规式,表示是的正规集是{ ∅ }
任何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


2019/7/20

posted @ 2019-07-20 20:50  kafm  阅读(975)  评论(0编辑  收藏  举报