《编译原理》学习笔记 ·003【第二章:文法和语言(形式语言理论)-2】

注:前言、目录见 https://blog.csdn.net/qq_44220418/article/details/108428971

三、文法和语言的分类

1、Chomsky语言分类法

(1).0型文法

对文法 G \text{G} G,若 P \text{P} P 中规则都具有下列形式: α → β α→β αβ
其 中 , { α ∈ V ∗ , 且 至 少 含 有 一 个 非 终 结 符 ( 强 调 α 不 能 为 空 串 ) β ∈ V ∗ 其中,\begin{cases} α ∈ \text{V}^*,且至少含有一个非终结符\pmb{\color{AA66FF}(强调α不能为空串)} \\ β ∈ \text{V}^* \end{cases} {αVα(强调α不能为空串)αβV
则称该文法 G \text{G} G ( C h o m s k y )    0 \pmb{(Chomsky) \; 0} (Chomsky)0(Chomsky)0(Chomsky)0型文法短语结构文法,缩写为 PSG \pmb{\text{PSG}} PSGPSGPSG

0 \pmb{0} 000型文法相应的语言称为 0 \pmb{0} 000型语言短语结构语言,又称 递归可枚举集

(2).1型文法

对文法 G \text{G} G,若 P \text{P} P 中规则都具有下列形式: x U y → x u y x\text{U}y → xuy xUyxuy
其 中 , { U ∈ V N x , y ∈ V ∗ u ∈ V + 其中,\begin{cases} \text{U} ∈ \text{V}_\text{N} \\ x, y ∈ \text{V}^* \\ u ∈ \text{V}^+ \end{cases} UVNx,yVuV+
则称该文法 G \text{G} G ( C h o m s k y )    1 \pmb{(Chomsky) \; 1} (Chomsky)1(Chomsky)1(Chomsky)1型文法上下文有关文法(上下文敏感文法),缩写为 CSG \pmb{\text{CSG}} CSGCSGCSG
其中的 x \pmb{x} xxx 即为上文 y \pmb{y} yyy 即为下文

1 \pmb{1} 111型文法相应的语言称为 1 \pmb{1} 111型语言上下文有关语言

(3).2型文法

对文法 G \text{G} G,若 P \text{P} P 中规则都具有下列形式: α → β α→β αβ
其 中 , { α ∈ V N β ∈ V ∗ 其中,\begin{cases} α ∈ \text{V}_\text{N} \\ β ∈ \text{V}^* \\ \end{cases} {αVNβV
则称该文法 G \text{G} G ( C h o m s k y )    2 \pmb{(Chomsky) \; 2} (Chomsky)2(Chomsky)2(Chomsky)2型文法上下文无关文法,缩写为 CFG \pmb{\text{CFG}} CFGCFGCFG

2 \pmb{2} 222型文法相应的语言称为 2 \pmb{2} 222型语言上下文无关语言

大多数程序设计语言的文法是上下文无关的

(4).3型文法

对文法 G \text{G} G,若 P \text{P} P 中规则都具有下列形式: A → a    或    A → B a ‾ ( 左 线 性 ) 或 A → a    或    A → a B ‾ ( 右 线 性 ) \begin{aligned} \text{A}→ a \; 或 \; & \underline{\text{A} → \text{B}a} \\ & (\pmb{左线性}) \end{aligned} \quad \pmb{或} \quad \begin{aligned} \text{A}→ a \; 或 \; & \underline{\text{A} → a\text{B}} \\ & (\pmb{右线性}) \end{aligned} AaABa(线左线性线)AaAaB(线右线性线)
其 中 , { a ∈ V T A , B ∈ V N 其中,\begin{cases} a ∈ \text{V}_\text{T} \\ \text{A}, \text{B} ∈ \text{V}_\text{N} \\ \end{cases} {aVTA,BVN
则称该文法 G \text{G} G ( C h o m s k y )    3 \pmb{(Chomsky) \; 3} (Chomsky)3(Chomsky)3(Chomsky)3型文法正则文法(正规文法),又称有穷状态文法,缩写为 RG \pmb{\text{RG}} RGRGRG
正则文法按其定义的两种情况可分为左线性文法、右线性文法

3 \pmb{3} 333型文法相应的语言称为 3 \pmb{3} 333型语言正则语言(正规语言)

Tips:正则文法是我们此后要学习的【词法分析】的基础,本笔记在以后的题目中将统一使用左线性文法(左线性与右线性的形状不一样,有些算法也完全不一样)

(5).举例

示 例 1 \pmb{示例1} 1示例11
文 法 G 1    :    = ( { S , A , B } , { a , b , c } , P 1 , S ) \quad \quad 文法\text{G}_1 \; : \; = ( \{ \text{S}, \text{A}, \text{B} \}, \{ a, b, c \}, \text{P}_1, \text{S}) G1:=({S,A,B},{a,b,c},P1,S)
其 中 P 1    :    { S → B c    ∣    S c B → A b    ∣    B b A → A a    ∣    a \quad \quad 其中\text{P}_1 \; : \;\begin{cases} \text{S} → \text{B}c \; | \; \text{S}c \\ \text{B} → \text{A}b \; | \; \text{B}b \\ \text{A} → \text{A}a \; | \; a \\ \end{cases} P1:SBcScBAbBbAAaa

显 然 , 可 以 看 出 所 有 的 规 则 都 满 足 3 型 文 法 中 左 线 性 文 法 的 定 义 “ A → a    或    A → B a ” \quad \quad 显然,可以看出所有的规则都满足\pmb{3型文法}中\pmb{左线性文法}的定义“\text{A}→ a \; 或 \; \text{A} → \text{B}a” 33型文法3线左线性文法线AaABa
所 以 文 法 G 1 是 一 个 3 型 文 法 \quad \quad 所以文法\text{G}_1是一个\pmb{3型文法} G133型文法3

另 外 , 我 们 还 可 以 推 导 、 归 纳 出 文 法 G 1 对 应 的 语 言 为 L 1 = { a i b j c k    ∣    i , j , k ≥ 1 } \quad \quad 另外,我们还可以推导、归纳出文法\text{G}_1对应的语言为\text{L}_1 = \{ a^i b^j c^k \; | \; i, j, k \ge 1 \} G1L1={aibjcki,j,k1}


示 例 2 \pmb{示例2} 2示例22
文 法 G 2    :    = ( { S , A } , { a , b , c } , P 2 , S ) \quad \quad 文法\text{G}_2 \; : \; = ( \{ \text{S}, \text{A} \}, \{ a, b, c \}, \text{P}_2, \text{S}) G2:=({S,A},{a,b,c},P2,S)
其 中 P 2    :    { S → A c    ∣    S c A → a b    ∣    a A b \quad \quad 其中\text{P}_2 \; : \;\begin{cases} \text{S} → \text{A}c \; | \; \text{S}c \\ \text{A} → ab \; | \; a\text{A}b \\ \end{cases} P2:{SAcScAabaAb

P 2 中 规 则 “ A → a A b ” 不 满 足 3 型 文 法 的 定 义 “ A → a    或    A → B a ” 或 “ A → a    或    A → a B ” \quad \quad \text{P}_2中规则“\text{A} → a\text{A}b”不满足\pmb{3型文法}的定义“\text{A}→ a \; 或 \; \text{A} → \text{B}a”或“\text{A}→ a \; 或 \; \text{A} → a\text{B}” P2AaAb33型文法3AaABaAaAaB
( 右 部 a A b 不 符 合 定 义 中 的 三 种 格 式 之 一 : { a , B a , a B } ) \quad \quad (右部a\text{A}b不符合定义中的三种格式之一:\{ a, \text{B}a, a\text{B} \}) (aAb{a,Ba,aB})
所 以 文 法 G 2 不 是 一 个 3 型 文 法 \quad \quad 所以文法\text{G}_2不是一个\pmb{3型文法} G233型文法3

可 以 看 出 所 有 的 规 则 都 满 足 2 型 文 法 的 定 义 “ α → β    ( { α ∈ V N β ∈ V ∗ ) ” \quad \quad 可以看出所有的规则都满足\pmb{2型文法}的定义“α→β \; \left( \begin{cases} α ∈ \text{V}_\text{N} \\ β ∈ \text{V}^* \\ \end{cases} \right)” 22型文法2αβ({αVNβV)
所 以 文 法 G 2 是 一 个 2 型 文 法 \quad \quad 所以文法\text{G}_2是一个\pmb{2型文法} G222型文法2

另 外 , 我 们 还 可 以 推 导 、 归 纳 出 文 法 G 2 对 应 的 语 言 为 L 2 = { a i b i c k    ∣    i , k ≥ 1 } \quad \quad 另外,我们还可以推导、归纳出文法\text{G}_2对应的语言为\text{L}_2 = \{ a^i b^i c^k \; | \; i, k \ge 1 \} G2L2={aibicki,k1}


示 例 3 \pmb{示例3} 3示例33
文 法 G 3    :    = ( { S , B , C , D } , { a , b , c } , P 3 , S ) \quad \quad 文法\text{G}_3 \; : \; = ( \{ \text{S}, \text{B}, \text{C}, \text{D} \}, \{ \text{a}, \text{b}, \text{c} \}, \text{P}_3, \text{S}) G3:=({S,B,C,D},{a,b,c},P3,S)
其 中 P 3    :    { S → aSBC    ∣    abc CB → CD CD → BD BD → BC bB → bb bC → bc cC → cc \quad \quad 其中\text{P}_3 \; : \;\begin{cases} \text{S} → \text{aSBC} \; | \; \text{abc} \\ \text{CB} → \text{CD} \\ \text{CD} → \text{BD} \\ \text{BD} → \text{BC} \\ \text{bB} → \text{bb} \\ \text{bC} → \text{bc} \\ \text{cC} → \text{cc} \\ \end{cases} P3:SaSBCabcCBCDCDBDBDBCbBbbbCbccCcc

P 3 中 规 则 “ CB → CD ” 不 满 足 3 型 文 法 的 定 义 “ A → a    或    A → B a ” 或 “ A → a    或    A → a B ” \quad \quad \text{P}_3中规则“\text{CB} → \text{CD}”不满足\pmb{3型文法}的定义“\text{A}→ a \; 或 \; \text{A} → \text{B}a”或“\text{A}→ a \; 或 \; \text{A} → a\text{B}” P3CBCD33型文法3AaABaAaAaB
( 3 型 文 法 的 定 义 要 求 规 则 的 右 部 必 须 包 含 终 结 符 ) \quad \quad (\pmb{3型文法}的定义要求规则的右部必须包含终结符) (33型文法3)
所 以 文 法 G 3 不 是 一 个 3 型 文 法 \quad \quad 所以文法\text{G}_3不是一个\pmb{3型文法} G333型文法3

P 3 中 规 则 “ CB → CD ” 不 满 足 2 型 文 法 的 定 义 “ α → β    ( { α ∈ V N β ∈ V ∗ ) ” \quad \quad \text{P}_3中规则“\text{CB} → \text{CD}”不满足\pmb{2型文法}的定义“α→β \; \left( \begin{cases} α ∈ \text{V}_\text{N} \\ β ∈ \text{V}^* \\ \end{cases} \right)” P3CBCD22型文法2αβ({αVNβV)

( 2 型 文 法 的 定 义 只 允 许 规 则 的 左 部 为 单 个 非 终 结 符 ) \quad \quad (\pmb{2型文法}的定义只允许规则的左部为单个非终结符) (22型文法2)
所 以 文 法 G 3 不 是 一 个 2 型 文 法 \quad \quad 所以文法\text{G}_3不是一个\pmb{2型文法} G322型文法2

可 以 看 出 所 有 的 规 则 都 满 足 1 型 文 法 的 定 义 “ x U y → x u y    ( { U ∈ V N x , y ∈ V ∗ u ∈ V + ) ” \quad \quad 可以看出所有的规则都满足\pmb{1型文法}的定义“x\text{U}y → xuy \; \left( \begin{cases} \text{U} ∈ \text{V}_\text{N} \\ x, y ∈ \text{V}^* \\ u ∈ \text{V}^+ \end{cases} \right)” 11型文法1xUyxuyUVNx,yVuV+
( 规 则 P 3    :    { S → aSBC x = ε , y = ε , U = S , u = aSBC S → abc x = ε , y = ε , U = S , u = abc CB → CD x = C , y = ε , U = B , u = D CD → BD x = ε , y = D , U = C , u = B BD → BC x = ε , y = ε , U = D , u = C bB → bb x = b , y = ε , U = B , u = b bC → bc x = b , y = ε , U = C , u = c cC → cc x = c , y = ε , U = C , u = c ) \quad \quad (规则\text{P}_3 \; : \;\begin{cases} \text{S} → \text{aSBC} & x = \text{ε}, y=\text{ε}, \text{U} = \text{S}, u = \text{aSBC} \\ \text{S} → \text{abc} & x = \text{ε}, y=\text{ε}, \text{U} = \text{S}, u = \text{abc} \\ \text{CB} → \text{CD} & x = \text{C}, y=\text{ε}, \text{U} = \text{B}, u = \text{D} \\ \text{CD} → \text{BD} & x = \text{ε}, y=\text{D}, \text{U} = \text{C}, u = \text{B} \\ \text{BD} → \text{BC} & x = \text{ε}, y=\text{ε}, \text{U} = \text{D}, u = \text{C} \\ \text{bB} → \text{bb} & x = \text{b}, y=\text{ε}, \text{U} = \text{B}, u = \text{b} \\ \text{bC} → \text{bc} & x = \text{b}, y=\text{ε}, \text{U} = \text{C}, u = \text{c} \\ \text{cC} → \text{cc} & x = \text{c}, y=\text{ε}, \text{U} = \text{C}, u = \text{c} \\ \end{cases}) (P3:SaSBCSabcCBCDCDBDBDBCbBbbbCbccCccx=ε,y=ε,U=S,u=aSBCx=ε,y=ε,U=S,u=abcx=C,y=ε,U=B,u=Dx=ε,y=D,U=C,u=Bx=ε,y=ε,U=D,u=Cx=b,y=ε,U=B,u=bx=b,y=ε,U=C,u=cx=c,y=ε,U=C,u=c)
所 以 文 法 G 3 是 一 个 1 型 文 法 \quad \quad 所以文法\text{G}_3是一个\pmb{1型文法} G311型文法1

另 外 , 我 们 还 可 以 推 导 、 归 纳 出 文 法 G 3 对 应 的 语 言 为 L 3 = { a i b i c i    ∣    i ≥ 1 } \quad \quad 另外,我们还可以推导、归纳出文法\text{G}_3对应的语言为\text{L}_3 = \{ a^i b^i c^i \; | \; i \ge 1 \} G3L3={aibicii1}


示 例 4 \pmb{示例4} 4示例44
文 法 G 4    :    = ( { S , A , B , C , D , E } , { a } , P 4 , S ) \quad \quad 文法\text{G}_4 \; : \; = ( \{ \text{S}, \text{A}, \text{B}, \text{C}, \text{D}, \text{E} \}, \{ \text{a} \}, \text{P}_4, \text{S}) G4:=({S,A,B,C,D,E},{a},P4,S)
其 中 P 4    :    { S → AcaB Ca → aaC CB → DB    ∣    E aD → Da AD → AC aE → Ea AE → ε \quad \quad 其中\text{P}_4 \; : \;\begin{cases} \text{S} → \text{AcaB} \\ \text{Ca} → \text{aaC} \\ \text{CB} → \text{DB} \; | \; \text{E} \\ \text{aD} → \text{Da} \\ \text{AD} → \text{AC} \\ \text{aE} → \text{Ea} \\ \text{AE} → \text{ε} \\ \end{cases} P4:SAcaBCaaaCCBDBEaDDaADACaEEaAEε

P 4 中 规 则 “ AE → ε ” 不 满 足 3 型 文 法 和 1 型 文 法 的 定 义 \quad \quad \text{P}_4中规则“\text{AE} → \text{ε}”不满足\pmb{3型文法}和\pmb{1型文法}的定义 P4AEε33型文法311型文法1
( 3 型 文 法 和 1 型 文 法 的 定 义 不 允 许 规 则 的 右 部 为 ε ) \quad \quad (\pmb{3型文法}和\pmb{1型文法}的定义不允许规则的右部为\text{ε}) (33型文法311型文法1ε)
所 以 文 法 G 4 不 是 一 个 3 型 文 法 和 1 型 文 法 \quad \quad 所以文法\text{G}_4不是一个\pmb{3型文法}和\pmb{1型文法} G433型文法311型文法1

P 4 中 规 则 “ Ca → aaC ” 不 满 足 2 型 文 法 的 定 义 “ α → β    ( { α ∈ V N β ∈ V ∗ ) ” \quad \quad \text{P}_4中规则“\text{Ca} → \text{aaC}”不满足\pmb{2型文法}的定义“α→β \; \left( \begin{cases} α ∈ \text{V}_\text{N} \\ β ∈ \text{V}^* \\ \end{cases} \right)” P4CaaaC22型文法2αβ({αVNβV)

( 2 型 文 法 的 定 义 只 允 许 规 则 的 左 部 为 单 个 非 终 结 符 ) \quad \quad (\pmb{2型文法}的定义只允许规则的左部为单个非终结符) (22型文法2)
所 以 文 法 G 4 不 是 一 个 2 型 文 法 \quad \quad 所以文法\text{G}_4不是一个\pmb{2型文法} G422型文法2

可 以 看 出 所 有 的 规 则 都 满 足 0 型 文 法 的 定 义 “ α → β    ( { α ∈ V ∗ 且 至 少 包 含 一 个 非 终 结 符 β ∈ V ∗ ) ” \quad \quad 可以看出所有的规则都满足\pmb{0型文法}的定义“α→β \; \left( \begin{cases} α ∈ \text{V}^*且至少包含一个非终结符 \\ β ∈ \text{V}^* \\ \end{cases} \right)” 00型文法0αβ({αVβV)
所 以 文 法 G 4 是 一 个 0 型 文 法 \quad \quad 所以文法\text{G}_4是一个\pmb{0型文法} G400型文法0

另 外 , 我 们 还 可 以 推 导 、 归 纳 出 文 法 G 4 对 应 的 语 言 为 L 4 = { a 2 i    ∣    i ≥ 1 } \quad \quad 另外,我们还可以推导、归纳出文法\text{G}_4对应的语言为\text{L}_4 = \{ a^{2^i} \; | \; i \ge 1 \} G4L4={a2ii1}

四、语法树与句型分析

1、语法树(语法分析树)

(1).语法树

语法树
语法树就是按照某一规则进行推导时所形成的树
其具有如下性质:
  • 根结点是文法的开始符
  • 每个结点都是文法 G \text{G} G的某一终结符或非终结符
  • 若某一结点有至少一个子结点,则该结点一定是非终结符
  • 若某一结点 A \text{A} A n n n个子结点 B 1 , B 2 , … , B n \text{B}_1, \text{B}_2, \dots, \text{B}_n B1,B2,,Bn,则必有规则 A → B 1 B 2 ⋯ B n \text{A} → \text{B}_1 \text{B}_2 \cdots \text{B}_n AB1B2Bn

子树
子树就是某个结点连同它向下射出的部分

简单子树
简单子树就是只含有单层分支的子树

e g : \pmb{eg:} eg:eg:eg:
设 有 文 法 G [ S ]    :    { S → a AB A → B a    ∣    a B → b d 设有文法 \text{G}[\text{S}] \; : \;\begin{cases} \text{S} → a\text{AB} \\ \text{A} → \text{B}a \; | \; a \\ \text{B} → bd \\ \end{cases} G[S]:SaABABaaBbd
根 据 推 导 序 列 S ⇒ a AB ⇒ a B a B ⇒ a b d a B 根据推导序列 \text{S} \Rightarrow a\text{AB} \Rightarrow a\text{B}a\text{B} \Rightarrow abda\text{B} SaABaBaBabdaB,可作出语法树如下:
语法树(S⇒aAB⇒aBaB⇒abdaB)
S
a
A
B
B
a
b
d
该 语 法 树 有 如 下 左 图 的 子 树 , 有 如 下 右 图 的 简 单 子 树 该语法树有如下左图的子树,有如下右图的简单子树
子树(A⇒Ba⇒bda)
简单子树(B⇒bd)
A
B
a
b
d
B
b
d

(2).推导⟷语法树

语法树并非与语法相对应,而是与推导相对应

更为准确地说,一个推导序列 确定 一个语法树,一个语法树 确定 一个广义推导

推导⟶语法树
e g : \pmb{eg:} eg:eg:eg:
设 有 文 法 G [ N ]    :    { N → ND    ∣    D D → 0    ∣    1    ∣    2    ∣ ⋯ ∣    9 设有文法 \text{G}[\text{N}] \; : \;\begin{cases} \text{N} → \text{ND} \; | \; \text{D} \\ \text{D} → 0 \; | \; 1 \; | \; 2 \; | \cdots | \; 9 \\ \end{cases} G[N]:{NNDDD0129
对 于 推 导 序 列 N ⇒ ND ⇒ DD ⇒ 2D ⇒ 28 , 可 构 造 以 下 推 导 树 : 对于推导序列\text{N} ⇒ \text{ND} ⇒ \text{DD} ⇒ \text{2D} ⇒ \text{28},可构造以下推导树: NNDDD2D28
语法树
N
N
D
D
2
8
语法树⟶推导
e g : \pmb{eg:} eg:eg:eg:
设 有 文 法 G [ N ]    :    { N → ND    ∣    D D → 0    ∣    1    ∣    2    ∣ ⋯ ∣    9 设有文法 \text{G}[\text{N}] \; : \;\begin{cases} \text{N} → \text{ND} \; | \; \text{D} \\ \text{D} → 0 \; | \; 1 \; | \; 2 \; | \cdots | \; 9 \\ \end{cases} G[N]:{NNDDD0129
有 以 下 推 导 树 : 有以下推导树:
语法树
N
N
D
D
2
8
则 可 得 到 以 下 归 约 序 列 ( 不 一 定 唯 一 ) : 则可得到以下归约序列(不一定唯一): 28 ⇒ △ D8 ⇒ △ DD ⇒ △ ND ⇒ △ N 28 \xRightarrow[△]{} \text{D8} \xRightarrow[△]{} \text{DD} \xRightarrow[△]{} \text{ND} \xRightarrow[△]{} \text{N} 28 D8 DD ND N
对 应 以 下 推 导 序 列 : 对应以下推导序列: N ⟹ ND ⟹ DD ⟹ D8 ⟹ 28 \text{N} ⟹ \text{ND} ⟹ \text{DD} ⟹ \text{D8} ⟹ 28 NNDDDD828

(3).最左推导/最右推导

最左推导
在一个推导中,如果每步直接推导所被替换的总是最左的非终结符号,则称这种推导为最左推导

最右推导(规范推导)
在一个推导中,如果每步直接推导所被替换的总是最右的非终结符号,则称这种推导为最右推导,又称规范推导
由规范推导所得的句型称为右句型规范句型

e g : eg: eg:
设 有 文 法 G [ N ]    :    { N → ND    ∣    D D → 0    ∣    1    ∣    2    ∣ ⋯ ∣    9 设有文法 \text{G}[\text{N}] \; : \;\begin{cases} \text{N} → \text{ND} \; | \; \text{D} \\ \text{D} → 0 \; | \; 1 \; | \; 2 \; | \cdots | \; 9 \\ \end{cases} G[N]:{NNDDD0129
有 推 导 N ⇒ ∗ 28 有推导\text{N} \xRightarrow[]{*} 28 N 28
 
对 于 最 左 推 导 N ⇒ ND ⇒ DD ⇒ 2D ⇒ 28 对于最左推导\text{N} ⇒ \text{ND} ⇒ \text{DD} ⇒ \text{2D} ⇒ 28 NNDDD2D28
其 语 法 树 如 下 : 其语法树如下:
语法树
N
N
D
D
2
8
对 于 最 右 推 导 N ⇒ ND ⇒ N8 ⇒ D8 ⇒ 28 对于最右推导\text{N} ⇒ \text{ND} ⇒ \text{N8} ⇒ \text{D8} ⇒ 28 NNDN8D828
其 语 法 树 如 下 : 其语法树如下:
语法树
N
N
D
D
2
8
可 以 看 到 , 该 文 法 的 最 左 推 导 和 最 右 推 导 所 对 应 的 语 法 树 是 相 同 的 可以看到,该文法的最左推导和最右推导所对应的语法树是相同的
但 事 实 上 同 一 推 导 的 不 同 推 导 序 列 的 语 法 树 未 必 相 同 但事实上同一推导的不同推导序列的语法树未必相同

(4).二义性

若对某文法的同一句子存在两个不同的语法树,则称该句子是二义性

包含有二义性句子的文法称为二义性文法,否则称为无二义性文法

若关于某语言不存在无二义性文法,则称该语言先天二义性


示 例 5 \pmb{示例5} 5示例55
对 同 一 语 言 L , 有 以 下 两 种 不 同 的 文 法 : \quad \quad对同一语言\text{L},有以下两种不同的文法: L G [ E ]    :    E → E + E    ∣    E ∗ E    ∣    i    ∣    ( E ) G ′ [ E ]    :    { E → E + T    ∣    T T → T ∗ F    ∣    F F → i    ∣    ( E ) \begin{aligned} & \text{G}[\text{E}] \; : \; \text{E} → \text{E} + \text{E} \; | \; \text{E} * \text{E} \; | \; i \; | \; (\text{E}) \\ \\ & \text{G}^{'}[\text{E}] \; : \; \begin{cases} \text{E} → \text{E} + \text{T} \; | \; \text{T} \\ \text{T} → \text{T} * \text{F} \; | \; \text{F} \\ \text{F} → i \; | \; (\text{E}) \\ \end{cases}\\ \end{aligned} G[E]:EE+EEEi(E)G[E]:EE+TTTTFFFi(E)
下 面 我 们 探 讨 一 下 , 这 两 种 文 法 在 推 导 “ E ⇒ ∗ i + i ∗ i ” 时 , 不 同 推 导 序 列 下 的 语 法 树 : \quad \quad下面我们探讨一下,这两种文法在推导“\text{E} \xRightarrow[]{*} i + i * i”时,不同推导序列下的语法树: E i+ii

文 法 G [ E ] \quad \quad \pmb{文法\text{G}[\text{E}]} G[E]文法G[E]G[E]
其最右推导: \quad \quad \quad \quad \textbf{其最右推导:} 其最右推导:
E ⇒ E + E ⇒ E + E ∗ E ⇒ E + E ∗ i ⇒ E + i ∗ i ⇒ i + i ∗ i \quad \quad \quad \quad \quad \quad \text{E} ⇒ \text{E} + \text{E} ⇒ \text{E} + \text{E} * \text{E} ⇒ \text{E} + \text{E} * i ⇒ \text{E} + i * i ⇒ i + i * i EE+EE+EEE+EiE+iii+ii
其 语 法 树 如 下 : \quad \quad \quad \quad 其语法树如下:

语法树(最右推导)
E
E
+
E
i
E
*
E
i
i

其最左推导: \quad \quad \quad \quad \textbf{其最左推导:} 其最左推导:
E ⇒ E + E ⇒ i + E ⇒ i + E ∗ E ⇒ i + i ∗ E ⇒ i + i ∗ i \quad \quad \quad \quad \quad \quad \text{E} ⇒ \text{E} + \text{E} ⇒ i + \text{E} ⇒ i + \text{E} * \text{E} ⇒ i + i * \text{E} ⇒ i + i * i EE+Ei+Ei+EEi+iEi+ii
其 语 法 树 如 下 : \quad \quad \quad \quad 其语法树如下:

语法树(最左推导)
E
E
+
E
i
E
*
E
i
i

其实还有另一种最左推导: \quad \quad \quad \quad \textbf{其实还有另一种最左推导:} 其实还有另一种最左推导:
E ⇒ E ∗ E ⇒ E + E ∗ E ⇒ i + E ∗ E ⇒ i + i ∗ E ⇒ i + i ∗ i \quad \quad \quad \quad \quad \quad \text{E} ⇒ \text{E} * \text{E} ⇒ \text{E} + \text{E} * \text{E} ⇒ i + \text{E} * \text{E} ⇒ i + i * \text{E} ⇒ i + i * i EEEE+EEi+EEi+iEi+ii
其 语 法 树 如 下 : \quad \quad \quad \quad 其语法树如下:

语法树(另一种最左推导)
E
E
*
E
E
+
E
i
i
i

显 然 , 文 法 G [ E ] 的 句 子 “ i + i ∗ i ” 有 两 种 不 同 的 语 法 树 。 \quad \quad \quad \quad 显然,文法\text{G}[\text{E}]的句子“i + i * i”有两种不同的语法树。 G[E]i+ii
所 以 , 文 法 G [ E ] 是 一 种 二 义 性 文 法 。 \quad \quad \quad \quad 所以,文法\text{G}[\text{E}]是一种二义性文法。 G[E]


文 法 G ′ [ E ] \quad \quad \pmb{文法\text{G}^{'}[\text{E}]} G[E]文法G[E]G[E]
其最右推导: \quad \quad \quad \quad \textbf{其最右推导:} 其最右推导:
E ⇒ E + T ⇒ E + T ∗ F ⇒ E + T ∗ i ⇒ E + F ∗ i ⇒ E + i ∗ i ⇒ T + i ∗ i ⇒ F + i ∗ i ⇒ i + i ∗ i \quad \quad \quad \quad \quad \quad \text{E} ⇒ \text{E} + \text{T} ⇒ \text{E} + \text{T} * \text{F} ⇒ \text{E} + \text{T} * i ⇒ \text{E} + \text{F} * i ⇒ \text{E} + i * i ⇒ \text{T} + i * i ⇒ \text{F} + i * i ⇒ i + i * i EE+TE+TFE+TiE+FiE+iiT+iiF+iii+ii
其 语 法 树 如 下 : \quad \quad \quad \quad 其语法树如下:

语法树(最左推导)
E
E
+
T
T
T
*
F
F
F
i
i
i

其最左推导: \quad \quad \quad \quad \textbf{其最左推导:} 其最左推导:
E ⇒ E + T ⇒ T + T ⇒ F + T ⇒ i + T ⇒ i + T ∗ F ⇒ i + F ∗ F ⇒ i + i ∗ F ⇒ i + i ∗ i \quad \quad \quad \quad \quad \quad \text{E} ⇒ \text{E} + \text{T} ⇒ \text{T} + \text{T} ⇒ \text{F} + \text{T} ⇒ i + \text{T} ⇒ i + \text{T} * \text{F} ⇒ i + \text{F} * \text{F} ⇒ i + i * \text{F} ⇒ i + i * i EE+TT+TF+Ti+Ti+TFi+FFi+iFi+ii
其 语 法 树 如 下 : \quad \quad \quad \quad 其语法树如下:

语法树(最左推导)
E
E
+
T
T
T
*
F
F
F
i
i
i

我 们 还 可 以 举 出 很 多 文 法 G ′ [ E ] 的 句 子 “ i + i ∗ i ” 的 很 多 种 语 法 树 , 并 发 现 它 们 都 相 同 。 \quad \quad \quad \quad 我们还可以举出很多文法\text{G}^{'}[\text{E}]的句子“i + i * i”的很多种语法树,并发现它们都相同。 G[E]i+ii
所 以 , 文 法 G ′ [ E ] 是 无 二 义 性 的 。 \quad \quad \quad \quad 所以,文法\text{G}^{'}[\text{E}]是无二义性的。 G[E]

2、句型分析

(1).句型分析

识别一个符号串是否为某文法的句型,即句型分析

当给定某个符号串时,试图按照某文法的规则为该符号串构造推导/归约或语法树,从而识别出它是该文法的一个句型

目的:用某种分析技术,为程序设计语言构造一个识别程序

(2).分析技术

自顶向下分析技术
识 别 符 号 ⟹ ⋯ ⟹ 输 入 字 符 串 识别符号 ⟹ \cdots ⟹ 输入字符串
[ 从识别符号出发,由它推导出与输入符号串相同的终结符号串 ]
自底向上分析技术
输 入 字 符 串 ⇒ △ ⋯ ⇒ △ 识 别 符 号 输入字符串 \xRightarrow[△]{} \cdots \xRightarrow[△]{} 识别符号
[ 从输入符号触发,将其归约为识别符号 ]
Tips:现在主流的编译程序用的都是自底向上的分析
e g : \pmb{eg:} eg:eg:eg:
设 有 文 法 G [ N ]    :    { E → E + T    ∣    T T → T ∗ F    ∣    F F → i    ∣    ( E ) 设有文法 \text{G}[\text{N}] \; : \; \begin{cases} \text{E} → \text{E} + \text{T} \; | \; \text{T} \\ \text{T} → \text{T} * \text{F} \; | \; \text{F} \\ \text{F} → i \; | \; (\text{E}) \\ \end{cases} G[N]:EE+TTTTFFFi(E)
   \;
分 析 句 子 i + i : 分析句子 \quad i + i \quad : i+i:
自 顶 向 下 : E ⟹ E + T ⟹ T + T ⟹ F + T ⟹ i + T ⟹ i + F ⟹ i + i \qquad 自顶向下:\text{E} ⟹ \text{E} + \text{T} ⟹ \text{T} + \text{T} ⟹ \text{F} + \text{T} ⟹ i + \text{T} ⟹ i + \text{F} ⟹ i + i EE+TT+TF+Ti+Ti+Fi+i
自 底 向 上 : i + i ⇒ △ F + i ⇒ △ T + i ⇒ △ E + i ⇒ △ E + F ⇒ △ E + T ⇒ △ E \qquad 自底向上:i + i \xRightarrow[△]{} \text{F} + i \xRightarrow[△]{} \text{T} + i \xRightarrow[△]{} \text{E} + i \xRightarrow[△]{} \text{E} + \text{F} \xRightarrow[△]{} \text{E} + \text{T} \xRightarrow[△]{} \text{E} i+i F+i T+i E+i E+F E+T E

3、句型分析的基本问题

(1).基本问题

句型分析面临以下两个基本问题
\qquad ① 在自顶向下的分析过程中,有规则 U → u 1    ∣    u 2    ∣    ⋯    ∣    u n \text{U} → u_1 \; | \; u_2 \; | \; \cdots \; | \; u_n Uu1u2un,如何确定用哪个 u i u_i ui替代 U    ? \text{U} \; ? U?
\qquad ② 在自底向上的分析过程中,有规则 { A → x B → x \begin{cases} \text{A} → x \\ \text{B} → x \\ \end{cases} {AxBx,应该把 x x x 归约到 A \text{A} A 还是 B    ? \text{B} \; ? B?

(2).句柄

设 有 文 法 G [ Z ] , w = x u y 是 其 一 个 句 型 , Z ⇒ ∗ x U y    且    U ⇒ + u ( { U ∈ V N u ∈ V + x , y ∈ V ∗ ) , 则 称 u    是 句 型    w    相 对 于 U 的 短 语 设有文法\text{G}[\text{Z}],w = xuy是其一个句型,\text{Z} \xRightarrow[]{*} x\text{U}y \;且\; \text{U} \xRightarrow[]{+} u\left(\begin{cases} \text{U} \in \text{V}_\text{N} \\ u \in \text{V}^+\\ x, y \in \text{V}^* \end{cases}\right),则称 \pmb{u \; 是句型 \; w \; 相对于 \text{U} 的短语} G[Z]w=xuyZ xUyU+ uUVNuV+x,yVuwUu是句型w相对于U的短语uwU

当 U ⟹ u 时 , 称 u    是 句 型    w    相 对 于    U    的 直 接 ( 简 单 ) 短 语 当 \text{U} ⟹ u 时,称 \pmb{u \; 是句型 \; w \; 相对于 \; \text{U} \; 的直接(简单)短语} UuuwU()u是句型w相对于U的直接(简单)短语uwU()

句 型 的 最 左 简 单 短 语 称 为 该 句 型 的 句 柄 句型的\pmb{最左简单短语}称为该句型的\pmb{句柄} 最左简单短语句柄

e g : \pmb{eg:} eg:eg:eg:
设 有 文 法 G [ N ]    :    { E → E + T    ∣    T T → T ∗ F    ∣    F F → i    ∣    ( E ) \qquad设有文法 \text{G}[\text{N}] \; : \; \begin{cases} \text{E} → \text{E} + \text{T} \; | \; \text{T} \\ \text{T} → \text{T} * \text{F} \; | \; \text{F} \\ \text{F} → i \; | \; (\text{E}) \\ \end{cases} G[N]:EE+TTTTFFFi(E)

对 句 型    T + i    : \qquad 对句型 \; \text{T} + i \; : T+i:
E ⇒ ∗ E ⇒ + T + i \qquad \qquad \text{E} \xRightarrow[]{*} \text{E} \xRightarrow[]{+} \text{T} + i E E+ T+i
所 以    T + i    是 句 型    T + i    相 对 于    E    的 短 语 \qquad \qquad 所以 \; \text{T} + i \; 是句型 \; \text{T} + i \; 相对于 \; \text{E} \; 的短语 T+iT+iE

E ⇒ ∗ T + T ⇒ + T + i \qquad \qquad \text{E} \xRightarrow[]{*} \text{T} + \text{T} \xRightarrow[]{+} \text{T} + i E T+T+ T+i
所 以    T    是 句 型    T + i    相 对 于    T    的 短 语 \qquad \qquad 所以 \; \text{T} \; 是句型 \; \text{T} + i \; 相对于 \; \text{T} \; 的短语 TT+iT

E ⇒ ∗ T + F ⇒ T + i \qquad \qquad \text{E} \xRightarrow[]{*} \text{T} + \text{F} \xRightarrow[]{} \text{T} + i E T+F T+i
所 以    i    是 句 型    T + i    相 对 于    T    的 短 语 、 简 单 短 语 \qquad \qquad 所以 \; i \; 是句型 \; \text{T} + i \; 相对于 \; \text{T} \; 的短语、简单短语 iT+iT

E ⇒ ∗ E + i ⇒ T + i \qquad \qquad \text{E} \xRightarrow[]{*} \text{E} + i \xRightarrow[]{} \text{T} + i E E+i T+i
所 以    T    是 句 型    T + i    相 对 于    E    的 短 语 、 简 单 短 语 \qquad \qquad 所以 \; \text{T} \; 是句型 \; \text{T} + i \; 相对于 \; \text{E} \; 的短语、简单短语 TT+iE
因 为    T    出 现 在 句 型    T + i    的 最 左 边 , 是 句 型    T + i    的 最 左 简 单 短 语 \qquad \qquad 因为 \; \text{T} \; 出现在句型 \; \text{T} + i \; 的最左边,是句型 \; \text{T} + i \; 的最左简单短语 TT+iT+i
所 以    T    还 是 是 句 型    T + i    相 对 于    E    的 句 柄 \qquad \qquad 所以 \; \text{T} \; 还是是句型 \; \text{T} + i \; 相对于 \; \text{E} \; 的句柄 TT+iE


根据语法分析树,可以比较容易地找出某一句型的短语、简单短语、句柄
\qquad 子树的末端节点组成的符号串是原树对应句型相对于子树根短语
\qquad 简单子树的末端节点组成的符号串是原树对应句型相对于子树根简单短语
\qquad 最左简单子树的末端节点组成的符号串是原树对应句型相对于子树根句柄

e g : \pmb{eg:} eg:eg:eg:
设 有 文 法 G [ N ]    :    { E → E + T    ∣    T T → T ∗ F    ∣    F F → i    ∣    ( E ) \qquad设有文法 \text{G}[\text{N}] \; : \; \begin{cases} \text{E} → \text{E} + \text{T} \; | \; \text{T} \\ \text{T} → \text{T} * \text{F} \; | \; \text{F} \\ \text{F} → i \; | \; (\text{E}) \\ \end{cases} G[N]:EE+TTTTFFFi(E)

对 句 型    T + i    , 绘 制 出 了 如 下 图 所 示 的 语 法 树 : \qquad 对句型 \; \text{T} + i \; ,绘制出了如下图所示的语法树: T+i:

(T + i) 的语法树
    最左简单子树
   子树
   简单子树
E
+
T
F
i
E
T

从 图 中 【 语 法 树 】 中 , 可 以 分 析 出 , T + i    是 句 型    T + i    相 对 于    E    的 短 语 \qquad 从图中【语法树】中,可以分析出,\text{T} + i \; 是句型 \; \text{T} + i \; 相对于 \; \text{E} \; 的短语 T+iT+iE
从 图 中 【 最 左 简 单 子 树 】 中 , 可 以 分 析 出 , T    是 句 型    T + i    相 对 于    E    的 短 语 、 简 单 短 语 、 句 柄 \qquad 从图中【最左简单子树】中,可以分析出,\text{T} \; 是句型 \; \text{T} + i \; 相对于 \; \text{E} \; 的短语、简单短语、句柄 TT+iE
从 图 中 【 子 树 】 中 , 可 以 分 析 出 , i    是 句 型    T + i    相 对 于    T    的 短 语 \qquad 从图中【子树】中,可以分析出,i \; 是句型 \; \text{T} + i \; 相对于 \; \text{T} \; 的短语 iT+iT
从 图 中 【 简 单 子 树 】 中 , 可 以 分 析 出 , i    是 句 型    T + i    相 对 于    F    的 短 语 、 简 单 短 语 \qquad 从图中【简单子树】中,可以分析出,i \; 是句型 \; \text{T} + i \; 相对于 \; \text{F} \; 的短语、简单短语 iT+iF


其 实 , 有 了 语 法 分 析 树 以 后 , 对 句 型 分 析 来 说 , 就 不 用 去 找 句 柄 什 么 的 了 其实,有了语法分析树以后,对句型分析来说,就不用去找句柄什么的了

第 五 章 会 有 另 外 的 、 更 巧 妙 、 更 实 用 的 方 法 去 找 句 柄 第五章会有另外的、更巧妙、更实用的方法去找句柄

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

God-Excious

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值