编译原理学习笔记:词法分析

一、正则表达式:

前提知识:3型文法(Type-3 Grammar):
α → β \alpha\to\beta αβ

  • 该文法又被称为正规文法正则文法 (Regular Grammar,RG ):

    • 右线性(Right Linear)文法: A → ω B A\to\omega{B} AωB A → ω A\to\omega Aω;其中 A A A B B B都是非终结符, α ∈ V T ∗ \alpha\in{V_T}^* αVT
    • 左线性(Left Linear) 文法: A → B ω A\to{B}\omega ABω A → ω A\to\omega Aω;其中 A A A B B B都是非终结符, α ∈ V T ∗ \alpha\in{V_T}^* αVT
    • 左线性文法和右线性文法都称为正则文法。
  • 实际举例:

    • image-20210519211232921
  • 3型语言(正则语言):

    • 由正则文法(3型文法) G G G生成的语言 L ( G ) L(G) L(G)

正则表达式又称为正规式!所以下文中提到的正则和正规是一回事!

①正则表达式:
  • 正则表达式(Regular Expression,RE )是一种用来描述正则语言更紧凑的表示方法
    • 例如: r = a ( a ∣ b ) ∗ ( ε ∣ ( . ∣ _ ) ( a ∣ b ) ( a ∣ b ) ∗ ) r=a(a|b)^*(\varepsilon|(.|\_)(a|b)(a|b)^*) r=a(ab)(ε(._)(ab)(ab))
  • 正则表达式可以由较小的正则表达式按照特定规则递归构建。每一个正则表达式 r r r定义(表示)一个语言,记为 L ( r ) L(r) L(r)。这个语言也是根据 r r r的子表达式所表示的语言递归定义的。
②正则表达式的定义:
  • ε \varepsilon ε是一个 R E RE RE L ( ε ) = { ε } L(\varepsilon)={\varepsilon} L(ε)=ε.
  • 如果 a ∈ Σ a\in\Sigma aΣ,则 a a a是一个 R E RE RE L ( a ) = { a } L(a)={a} L(a)=a.
  • 假设 r r r s s s都是 R E RE RE,表示的语言分别是 L ( r ) L(r) L(r) L ( s ) L(s) L(s),则:
    • r ∣ s r|s rs是一个 R E RE RE L ( r ∣ s ) = L ( r ) ∪ L ( s ) L(r|s)=L(r)\cup{L(s)} L(rs)=L(r)L(s).
    • r s rs rs是一个 R E RE RE L ( r s ) = L ( r ) L ( s ) L(rs)=L(r)L(s) L(rs)=L(r)L(s).
    • r ∗ r^* r是一个 R E RE RE L ( r ∗ ) = ( L ( r ) ∗ ) L(r^*)=(L(r)^{*}) L(r)=(L(r)).
    • ( r ) (r) (r)是一个 R E RE RE L ( ( r ) ) = L ( r ) L((r))=L(r) L((r))=L(r).

运算的优先级:* > 连接 > | 。

  • 实际举例:
    • image-20210519224016096
    • image-20210526155352524
③RE(正则表达式)的代数定律:

image-20210519224633353

④正则文法与正则表达式等价:

前提介绍:一个正则语言可以由于正则文法定义,也可以由正则表达式定义;对任何正则文法 G G G,存在定义同一语言的正则表达式 r r r,对任何正则表达式 r r r,存在生成同一语言的正则文法 G G G;有一些正则语言更容易使用正则表达式定义,有一些正则语言更容易使用正则文法定义。

正则表达式又称为正规式!所以下文中提到的正则和正规是一回事!

  • 正则表达式转换为正则文法:
  • Σ \Sigma Σ上面的一个正则式 r r r转换为文法 G = ( V N , V T , S , P ) G=(V_N,V_T,S,P) G=(VN,VT,S,P)。令 V T = Σ V_T=\Sigma VT=Σ,确定产生式和 V N V_N VN的元素采用如下的办法:
    • 选择一个非终结符 S S S生成类似于产生式的形式: S → r S\to{r} Sr,并且将 S S S定为 G G G的识别符号。为了表述方便,将 S → r S\to{r} Sr称为正规式产生式,因为在 → \to 的右部中含有== . 、 ∗ ∣ .、*| .==等正规式符号,不是V中的符号。
    • x x x y y y都是正规式(正则表达式):
      • 对于形如 A → x y A\to{xy} Axy的正规式产生式,重写为 A → x B 、 B → y A\to{xB}、B\to{y} AxBBy两个产生式,其中 B B B是新选择的非终结符,即 B ∈ V N B\in{V_N} BVN
      • 对于形如 A → x ∗ y A\to{x^*y} Axy的正规式产生式,重写为 A → x B 、 A → y 、 B → x B 、 B → y A\to{xB}、A\to{y}、B\to{xB}、B\to{y} AxBAyBxBBy,其中 B B B为一个新的非终结符。
      • 对于形如 A → x ∣ y A\to{x\vert{y}} Axy的正规式产生式,重写为 A → x 、 A → y A\to{x}、A\to{y} AxAy
    • 不断利用上述规则做变换,直到每个产生式都符合正规文法的形式

补充说明:左线性文法和右线性文法都称为正则文法。

  • 右线性(Right Linear)文法: A → ω B A\to\omega{B} AωB A → ω A\to\omega Aω;其中 A A A B B B都是非终结符, α ∈ V T ∗ \alpha\in{V_T}^* αVT

  • 左线性(Left Linear) 文法: A → B ω A\to{B}\omega ABω A → ω A\to\omega Aω;其中 A A A B B B都是非终结符, α ∈ V T ∗ \alpha\in{V_T}^* αVT

  • 实际举例:

    • image-20210521153824546
  • 正则文法转换为正则表达式:

  • 这一转换过程基本上是上面的逆过程,最后只剩下一个开始符号定义的正规式。

文法产生式 正规式(正则表达式)
规则一 A → x B A\to{xB} AxB B → y B\to{y} By A = x y A=xy A=xy
规则二 A → x A ∣ y A\to{xA\vert{y}} AxAy A = x ∗ y A=x^*y A=xy
规则三 A → x A\to{x} Ax A → y A\to{y} Ay A = x ∣ y A=x\vert{y} A=xy
  • 实际举例:
    • image-20210526152816591
⑤正则定义:
  • 正则定义式具有如下形式的定义序列:

d 1 → r 1 d_1\to{r_1} d1r1

d 2 → r 2 d_2\to{r_2} d2r2

. . . ... ...

d n → r n d_n\to{r_n} dnrn

  • 其中:
    • 每一个 d i d_i di都是一个新符号,它们都不在字母表 Σ \Sigma Σ,而且各不相同
    • 每个 r i r_i ri是字母表 Σ ⋃ { d 1 , d 2 , . . . , d i − 1 } \Sigma\bigcup\{d_1,d_2,...,di-1\} Σ{ d1,d2
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值