【编译技术】第二章-文法和语言的概念和表示(1)

这一部分主要是为后面几章做理论准备。

形式语言基础

这一部分在离散数学中有涉及,作为编译课程的先修知识。

字母表、符号、符号串

  • 字母表是非空有穷元素集合。
  • 字母表中的元素称为符号
  • 字母表 Σ \Sigma Σ上的符号串递归定义如下:
    • ϵ \epsilon ϵ Σ \Sigma Σ上的符号串;
    • ② 若 x x x Σ \Sigma Σ上的符号串,且 a ∈ Σ a\in\Sigma aΣ,则 a x ax ax x a xa xa Σ \Sigma Σ上的符号串;
    • y y y Σ \Sigma Σ上的符号串,当且仅当 y y y能由①②两条规则推出。

符号串的运算

  • 符号串相等:当且仅当组成两个符号串的字符依次相等。
  • 求符号串 x x x长度: ∣ x ∣ |x| x
  • 符号串连接: x x x y y y连接为 x y xy xy。特别地, ϵ x = x ϵ = x \epsilon x=x\epsilon=x ϵx=xϵ=x
  • 符号串的幂运算: x n x^n xn即为将符号串 x x x与自己连接 n − 1 n-1 n1次。特别地, x 0 = ϵ x^0=\epsilon x0=ϵ

符号串集合的运算

  • 符号串集合 A A A B B B的乘积运算:即 A A A B B B的笛卡尔积, A B = { x y ∣ x ∈ A , y ∈ B } AB=\{xy|x\in A, y\in B\} AB={xyxA,yB}。特别地,如果有 A A A B B B ∅ \emptyset ,则 A B AB AB也为 ∅ \emptyset
  • 符号串集合 A A A的幂运算: A n = A A . . . A A^n=AA...A An=AA...A。特别地, A 0 = { ϵ } A^0=\{\epsilon\} A0={ϵ},而不是 ∅ \emptyset
  • 符号串集合的闭包和正闭包:
    • 闭包: A ∗ = A 1 ∪ A 2 . . . ∪ A ∞ = { ϵ } ∪ A + A^*=A^1\cup A^2... \cup A^\infty=\{\epsilon\}\cup A^+ A=A1A2...A={ϵ}A+
    • 正闭包: A + = A 0 ∪ A 2 . . . ∪ A ∞ A^+=A^0\cup A^2... \cup A^\infty A+=A0A2...A

文法和语言的形式化定义

文法的形式化定义

文法 G G G可以被定义为一个四元组 G [ Z ] = < V n , V t , P , Z > G[Z]=<V_n,V_t,P,Z> G[Z]=<Vn,Vt,P,Z> V n V_n Vn为非终结符号集, V t V_t Vt为终结符号集, P P P为规则或称产生式, Z Z Z为识别符号, Z ∈ V n Z\in V_n ZVn。下面分别阐释各部分。

产生式和(重写)规则( P P P)

产生式,又称重写规则或规则,是有序对 ( U , x ) (U,x) (U,x)写作如下形式:
U : : = x U::= x U::=x

U → x U\rightarrow x Ux

字汇表( V V V)

文法 G [ Z ] G[Z] G[Z]中所有出现在规则左部和右部的符号的集合,称为字汇表 V V V

终结符集合( V t V_t Vt)和非终结符集合( V n V_n Vn)

仅考虑BNF文法(二型及以上文法),文法 G [ Z ] G[Z] G[Z]的所有出现在规则左部的符号为非终结符,其集合记为 V n V_n Vn;除了非终结符以外的符号为终结符,其集合记为 V t V_t Vt

  • 显然,字汇表 V = V n ∪ V t V=V_n\cup V_t V=VnVt
  • 不能说所有出现在规则右部的符号为终结符,因为出现在一条规则左部的符号也有可能出现在规则右部。
文法的BNF表示法(Backus范式)
  • 具有相同左部的规则,可以用"|"号将它们的右部连接起来,从而用一条规则表示
  • “::=”, “|”, “<”, ">"四个符号称为元符号,元符号构成的语言称为元语言

推导的形式化定义

直接推导

v = x U y v=xUy v=xUy w = x u y w=xuy w=xuy,若有规则 U : : = u U::=u U::=u,说 v v v(直接)推导出 w w w,记为 v ⇒ w v\Rightarrow w vw。其中 x , y ∈ V ∗ x,y\in V^* x,yV U ∈ V n U\in V_n UVn u ∈ V ∗ u\in V^* uV
特别地,令 x , y = ϵ x,y=\epsilon x,y=ϵ,可见 U ⇒ v U\Rightarrow v Uv显然是成立的。

间接推导

v = u 0 ⇒ u 1 ⇒ u 2 ⇒ . . . ⇒ u n = w v=u_0\Rightarrow u_1\Rightarrow u_2\Rightarrow...\Rightarrow u_n=w v=u0u1u2...un=w,则说 v v v间接推导出 w w w,记为 v ⇒ + w v\stackrel{+}{\Rightarrow} w v+w

直接或间接推导

如果不区分直接或间接推导,则可统一记为 v ⇒ ∗ w v\stackrel{*}{\Rightarrow} w vw

规范推导

若直接推导 x U y ⇒ x u y xUy\Rightarrow xuy xUyxuy中, y y y为终结符或为 ϵ \epsilon ϵ,则这个直接推导称为规范推导(后面也称为最右推导),记为 x U y = ∣ = > x u y xUy =|=> xuy xUy==>xuy

  • 规范推导直观理解:选择字符串最右端的非终结符进行推导。
  • 每个句子都有规范推导,但不是每个句型都有规范推导

语言的形式化定义

句型

Z ⇒ ∗ x Z\stackrel{*}{\Rightarrow} x Zx,则称 x x x是文法 G G G的一个句型

句子

Z ⇒ + x Z\stackrel{+}{\Rightarrow} x Z+x,且 x ∈ V n ∗ x\in V_n^* xVn,则称 x x x是文法 G G G的一个句子

语言

文法 G [ Z ] G[Z] G[Z]的所有句子的集合就是 G [ Z ] G[Z] G[Z]定义的语言,记为 L ( G [ Z ] ) L(G[Z]) L(G[Z])。形式化定义为 L ( G [ Z ] ) = { x ∣ Z ⇒ + x , x ∈ V n ∗ } L(G[Z])=\{x|Z\stackrel{+}{\Rightarrow}x, x\in V_n^*\} L(G[Z])={xZ+x,xVn}

语言和文法的对应关系

形式语言理论证明:

  • 给定一个文法,能够唯一确定一个语言,即: G → L G\rightarrow L GL
  • 给定一个语言,不能唯一确定一个文法,即: L → G 1 L\rightarrow G_1 LG1 G 2 G_2 G2 . . . ... ...
等价文法

有了语言的概念,可以定义等价文法。文法 G G G G ′ G' G是等价的,当且仅当 L ( G ) = L ( G ′ ) L(G)=L(G') L(G)=L(G)。这是以后对文法进行等价改写的基础。

递归规则与递归文法

递归规则

形如 U : : = x U y U::=xUy U::=xUy的规则称为递归规则。

  • x = ϵ x=\epsilon x=ϵ,即 U : : = U y U::=Uy U::=Uy,称为左递归规则
  • y = ϵ y=\epsilon y=ϵ,即 U : : = x U U::=xU U::=xU,称为右递归规则
  • x , y ≠ ϵ x,y\ne\epsilon x,y=ϵ,即 U : : = x U y U::=xUy U::=xUy,称为自嵌入递归规则
递归文法
  • 文法中含有(左/右/自嵌入)递归规则,则称文法是直接(左/右/自嵌入)递归的;
  • 若文法有 U ⇒ + U . . . U\stackrel{+}{\Rightarrow}U... U+U... . . . U ...U ...U . . . U . . . ...U... ...U...,则称文法是间接(左/右/自嵌入)递归的。
递归的作用
  • 优点:递归使得我们可以以有穷的规则来刻画无穷的语言;
  • 缺点:递归可能对语法分析不利,如左递归对后续的自顶向下分析不利,需要进行改写。

短语、简单短语、句柄

短语

Z ⇒ ∗ x U y Z\stackrel{*}{\Rightarrow}xUy ZxUy,而 U ⇒ + u U\stackrel{+}{\Rightarrow} u U+u,则称 u u u是相对于非终结符 U U U的句型 x u y xuy xuy的短语。

  • 直观理解:短语是语法树上某棵子树的所有叶子节点连接成的符号串。
  • 注意,说短语(包括下面的简单短语),都要指明是相对于哪个非终结符的哪个句型的短语。
简单短语

Z ⇒ ∗ x U y Z\stackrel{*}{\Rightarrow}xUy ZxUy,而 U ⇒ u U\Rightarrow u Uu,则称 u u u是相对于非终结符 U U U的句型 x u y xuy xuy的简单短语。

  • 直观理解:短语是语法树上某棵深度为2的子树的所有叶子节点连接成的符号串。
句柄

某句型的最左简单短语称为该句型的句柄。

  • 在自底向上分析的过程中,句柄的识别很重要。

参考书籍:张莉、史晓华、杨海燕、金茂忠《编译技术》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值