【学习笔记】编译原理 第二章 文法和语言

以下为参考课件与《编译技术》(张莉等著)的个人整理,若有错误欢迎指出

第二章 文法和语言

预备知识:

字母表与符号串(离散数学)

设A为字符串集合,如果A是符号表,其闭包 A ∗ = ∪ ∞ i = 0 A i A^*=\underset{i=0}{\overset{\infty}{\cup}}A^i A=i=0Ai其实就是符号表生成的所有符号串的集合( A i A^i Ai就是长度为 i i i的字符串)

约定:

下文出现的a、b……U、V、W、Z表示符号或者符号集

x、y、t、z……表示符号串

A、B……表示符号串集合

一、文法的非形式讨论

  • 文法(语法)是对语言结构的定义与描述。
  • 语法规则: 通过建立一组规则, 来描述句子的语法结构。规定用“ ::=”表示“ 由…组成” ( 或“ 定义为…” ),如 <句子>::=<主语><谓语
  • 合法的句子(由规则推导):将所有带<>的(非终结符)根据规则替代,最后全变成终结符号【从左到右推即可,也可用语法树】

语法结构正确但不保证语义

二、文法的形式定义

1、文法的形式定义

文 法 G = ( V n , V t , P , Z ) , 其 中 : V n : 非 终 结 符 号 集 V t : 终 结 符 号 集 ( 句 子 ∈ V t ∗ ) P : 产 生 式 或 规 则 的 集 合 Z : 开 始 符 号 ( 识 别 符 号 ) Z ∈ V n \begin{aligned} &文法G=( V_n, V_t, P, Z),其中:\\ &V_n: 非终结符号集 \\ &V_t: 终结符号集(句子\in V_t^{*})\\ &P: 产生式或规则的集合\\ &Z: 开始符号( 识别符号) Z \in V_n \\ \end{aligned} G=VnVtPZ:VnVtVtPZZVn

规则的形式定义
规 则 是 一 个 有 序 对 ( U , x ) , U ∈ V n , x ∈ V ∗ , 通 常 写 为 : U : : = x 或 U ⟶ x , , ∣ U ∣ = 1 , ∣ x ∣ ≥ 0 \begin{aligned} &规则是一个有序对(U, x),U \in V_n,x \in V^*, 通常写为:\\ &U ::= x 或U \longrightarrow x ,,| U| = 1,|x| \ge 0 \\ \end{aligned} (U,x),UVn,xV,:U::=xUx,U=1,x0
说明:有些规则含有相同左部,可以用|连接在一起

2、推导的形式定义

文 法 G : v = x U y , w = x u y , 其 中 x 、 y 、 u ∈ V ∗ , U ∈ V n 。 若 U : : = u ∈ P , 则 v ⟶ w 。 特 别 地 , 若 x = y = ε , 有 U : : = u , 则 U − > u \begin{aligned} &文法G: v= xUy, w= xuy,\quad其中x、 y 、u\in V^* , U\in V_n 。\\ &若U ::= u \in P, 则v \longrightarrow w。\\ &特别地,若x= y= \varepsilon, 有U ::= u, 则U -> u \end{aligned} GvxUywxuy,xyuVUVnU::=uPvwxyεU::=uU>u

对于多步推导,可以缩写为 ⟹ + \overset{+}{\Longrightarrow} +,其形式定义如下:
文 法 G , u 0 , u 1 , u 2 , … … , u n ∈ V + 若 v = u 0 ⟹ u 1 ⟹ u 2 … … ⟹ u n = w , 则 v ⟹ + G w \begin{aligned} &文法G, u_0, u_1, u_2, ……, u_n ∈ V^+\\ &若 v= u_0 \Longrightarrow u_1\Longrightarrow u_2 …… \Longrightarrow u_n= w,则 v \underset{G}{\overset{+}{\Longrightarrow}} w \end{aligned} Gu0,u1,u2,unV+v=u0u1u2unw,vG+w
进一步有 ⟹ ∗ \overset{*}{\Longrightarrow} ,个人理解为推导所得+自身,形式定义如下:
文 法 G , v , w ∈ V + 若 v ⟹ + G w 或 v = w , 则 v ⟹ ∗ G w \begin{aligned} &文法G,v,w ∈ V^+\\ &若 v \underset{G}{\overset{+}{\Longrightarrow}} w 或v=w, 则v \underset{G}{\overset{*}{\Longrightarrow}} w \end{aligned} Gv,wV+vG+wv=wvGw

规范推导(最右推导,即先推右边的非终结符)定义:
有 x U y ⟹ x u y , 若 y ∈ V t ∗ , 则 此 推 导 为 规 范 的 , 记 为 x U y = ∣ = > x u y \begin{aligned} &有xUy \Longrightarrow xuy, 若 y\in V_t^*,则此推导为规范的, 记为 xUy =|=> xuy \end{aligned} xUyxuy,yVt,xUy==>xuy
同理规范推导也有缩写:
若 有 v = u 0 = ∣ = > u 1 = ∣ = > … … = ∣ = > u n = w , 则 v = ∣ = > + w \begin{aligned} &若有v = u_0 =|=> u_1=|=> ……=|=> u_n= w,则 v \stackrel+{=|=>} w \end{aligned} v=u0==>u1==>==>un=w,v==>+w

3、语言的形式定义

给 定 文 法 G [ Z ] ( 1 ) 句 型 : x 是 句 型 ⇔ Z ⟹ ∗ x , 且 x ∈ V ∗ ; ( 2 ) 句 子 : x 是 句 子 ⇔ Z ⟹ + x , 且 x ∈ V t ∗ ; ( 3 ) 语 言 : L ( G [ Z ] ) = { x ∣ x ∈ V t ∗ , Z ⟹ + x } , 即 句 子 的 集 合 ; \begin{aligned} &给定文法G[Z]\\ &(1)句型: x是句型 \Leftrightarrow Z \overset{*}{\Longrightarrow} x , 且 x\in V^* ;\\ &(2)句子: x是句子 \Leftrightarrow Z \overset{+}{\Longrightarrow} x , 且 x∈ V_t^* ;\\ &(3)语言: L(G[Z])=\{x | x\in V_t^*, Z \overset{+}{\Longrightarrow} x \} ,即句子的集合;\\ \end{aligned} G[Z](1)xZx,xV(2)xZ+x,xVt(3)L(G[Z])={xxVt,Z+x},

Z是识别符号,强调要从Z开始推

可以用形式语言的理论证明:

已知文法,通过推导可以求语言

已知语言,可以构造多种文法

等价文法的定义:

G 和 G ’ 是 两 个 不 同 的 文 法 , 若 L ( G ) = L ( G ’ ) , 则 G 和 G ’ 为 等 价 文 法 。 G和G’是两个不同的文法, 若 L(G) = L(G’) ,则G和G’为等价文法。 GGL(G)=L(G),GG

编译感兴趣的是给定句子 x x x和文法 G G G,求 x ∈ L ( G ) x\in L(G) xL(G)

4、递归文法

(1)递归规则: 规则右部有与左部相同的符号( 非终结符)

(2)分类:
对 于 U : : = x U y 若 x = ε , 即 U : : = U y , 左 递 归 若 y = ε , 即 U : : = x U , 右 递 归 若 x , y ≠ ε , 即 U : : = x U y , 自 嵌 入 递 归 \begin{aligned} &对于 U::= xUy\\ &\qquad若x=\varepsilon, 即U::= Uy, 左递归\\ &\qquad若y=\varepsilon , 即U::= xU, 右递归\\ &\qquad若x, y\neq\varepsilon, 即U::= xUy, 自嵌入递归\\ \end{aligned} U::=xUyx=ε,U::=Uyy=ε,U::=xUx,y=εU::=xUy
(3)对应的递归文法分类:
文 法 G , 存 在 U ∈ V n 若 U ⟹ + … U … , 则 G 为 递 归 文 法 若 U ⟹ + U … , 则 G 为 左 递 归 文 法 若 U ⟹ + … U , 则 G 为 右 递 归 文 法 \begin{aligned} &文法G, 存在U \in V_n\\ &\qquad若U \stackrel+\Longrightarrow …U…, 则G为递归文法\\ &\qquad若U \stackrel+\Longrightarrow U…, 则G为左递归文法\\ &\qquad若U \stackrel+\Longrightarrow …U, 则G为右递归文法\\ \end{aligned} GUVnU+U,GU+U,GU+U,G

注: U U U不一定是识别符号,所以箭头后方不能说是句型

(4)递归文法优点:可用有穷条规则 定义无穷语言

左递归文法缺点:不能自顶向下语法分析(死循环)

5、句型的短语

(1)短语和简单短语
给 定 文 法 G [ Z ] , w = x u y ∈ V + ( 说 明 w 是 非 空 串 ) , 为 该 文 法 的 句 型 ; 若 Z ⟹ ∗ x U y , 且 U ⟹ + u , 则 u 是 句 型 w 相 对 于 U 的 短 语 ; 若 Z ⟹ ∗ x U y , 且 U ⟹ u , 则 u 是 句 型 w 相 对 于 U 的 简 单 短 语 。 其 中 U ∈ V n , u ∈ V + , x , y ∈ V ∗ \begin{aligned} &给定文法G[Z], w = xuy\in V^+(说明w是非空串), 为该文法的句型;\\ &若 Z \stackrel*\Longrightarrow xUy, 且U \stackrel+\Longrightarrow u, 则u是句型w相对于U的短语;\\ &若 Z \stackrel*\Longrightarrow xUy, 且U \Longrightarrow u, 则u是句型w相对于U的简单短语。\\ &其中U \in V_n, u ∈ V^+, x , y \in V^* \end{aligned} G[Z],w=xuyV+(w);ZxUy,U+u,uwUZxUy,Uu,uwUUVnuV+x,yV
直观理解: 短语是前面句型中的某个非终结符所能推出的符号串。简单短语就是某个非终结符能一步推出的。

  • 任何句型本身一定是相对于识别符号Z的短语( x , y = ε x,y=\varepsilon x,y=ε)。

(2)句柄

定义:任一句型的最左简单短语称为该句型的句柄

短语、简单短语、句柄可结合语法树来理解(详见下文)

三、语法树

1、语法树定义

句子( 句型) 结构的图示表示法,它是有向图,由结点(终结符或非终结符)和有向边组成。

自顶向下生成即可,推导序列不唯一;

有的文法可能会形状不唯一

2、子树

定理(找短语的方法)

某子树的末端结点按自左向右顺序为句型中的符号串, 则该符号串为该句型的相对于该子树根的短语 。

why:

子树跟作为U,子树末端构成u,必然有 U ⟹ + u U\stackrel+\Longrightarrow u U+u。然后再把子树根左边末端节点当 x x x,右边当 y y y,句型是 x u y xuy xuy,且有 Z ⟹ ∗ x U y Z\stackrel*\Longrightarrow xUy ZxUy

请添加图片描述

方法总结

(1)生成语法树

逐步推导即可,所有末端从左到右就是句型

(2)找短语

找出所有子树,末端即为相对于该子树跟的短语

(3)再判断简单短语

能一步推出的,即末端就是子树跟的直接孩子

(4)找句柄

最左边(无视层数,就找最左)的简单短语

3、树与推导

自上而下生成树 ⇔ \Leftrightarrow 自左向右的推导

自下而上修剪末端节点 ⇔ \Leftrightarrow 自右向左的规约

  • 规范规约就是每次剪掉句柄(最左简单短语),是规范推导的逆过程,所得的句型称为规范句型。
4、文法的二义性

三个等价定义:

  • 若对于一个文法的某一句子( 或句型)存在两棵不同的语法树, 则该文法是二义性文法,否则是无二义性文法。
  • 若一个文法的某句子存在两个不同的规范推导, 则该文法是二义性的, 否则是无二义性的。
  • 若一个文法的某规范句型的句柄不唯一(即不同的规范规约), 则该文法是二义性的, 否则是无二义性的。

因此要无二义性,需要增加文法限制条件或者在编译中增加规则

四、其他

1、句子分析

给定 G [ Z ] : S ∈ V t ∗ G[Z]: S \in V_t^* G[Z]:SVt,判定是否有 $S\in L (G[Z] ) ? $——词法和语法分析

2、有关文法的实用限制
  • 有害规则:如 U : : = U U::=U U::=U引起二义性的
  • 多余规则:
    • 不可达符号,即该规则的左部非终结符不出现在任何句型中
    • 不活动符号,即使用后推不出任何终结符号串

若无有害或多余规则,则文法是压缩过的

3、文法的其他表示方法

(1)BNF: < > : : = ∣ <>\quad::=\quad| <>::=

扩充的BNF:有 < > : : = ∣ { } [ ] ( ) <>\quad::= \quad|\quad\{\}\quad[]\quad() <>::={}[]()。其中 { } n m \{\}_n^m {}nm表示 n − m ( n ≥ 0 ) n-m(n\ge0) nm(n0)个, [ ] [] []表示可选项。

(2)语法图

请添加图片描述

4、形式语言
  • 0型文法(短语结构文法):规则左右都可以是字符串, u : : = v 其 中 u ∈ V + , v ∈ V ∗ u ::= v 其中 u\in V^+, v\in V^* u::=vuVvV

  • 1型文法(上下文敏感):$xUy ::= xuy,其中 U\in V_n,
    x、 y、 u\in V^* $

  • 2型文法(上下文无关): U : : = u U::=u U::=u,即上述讨论的文法

  • 3型文法(正则文法):一个非终结符号推出终结符 或 终结符+一个非终结符

产生的语言是越来越小的,即 L 0 ⊃ L 1 ⊃ L 2 ⊃ L 3 L_0 \supset L_1 \supset L_2 \supset L_3 L0L1L2L3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值