注:前言、目录见 https://blog.csdn.net/qq_44220418/article/details/108428971
文章目录
零、引言
在文法和语言这一章节,我们所研究的是 { 单词 如 何 构 成 表达式、各种语句、函数 如 何 书 写 语法规则 词法规则 \begin{cases} \textbf{单词}\;如何构成 \\ \textbf{表达式、各种语句、函数}\;如何书写 \\ \textbf{语法规则} \\ \textbf{词法规则} \\ \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧单词如何构成表达式、各种语句、函数如何书写语法规则词法规则
在《编译原理》中,我们对源代码的关注点并不像在学习编程基础那样,把关注点放在代码实现了什么逻辑功能上,而是需要把关注点放在源程序的 语法、语义是否正确 上
文法,简单来说,就是 用数学的方法 来定义 语言
一、符号串与符号串集合
1、字母表
字母表 是一个 非空有穷集合,习惯上用 大写字母 或 Σ \pmb{\Sigma} ΣΣΣ 表示。
字母表中至少包含一个元素。
e
g
:
eg:
eg:
Σ
=
{
a
,
b
,
c
}
\quad \quad \Sigma = \{a, b, c\}
Σ={a,b,c}
V
=
{
0
,
1
}
\quad \quad \text{V} = \{0, 1\}
V={0,1}
2、符号串
(1).概念
-
符号串
- 符号串 是由字母表中的符号所组成的有穷序列,习惯上用小写字母表示。
- 特别地,空串 表示不包含任何符号的符号串,用 ε \pmb{\text{ε}} εεε 表示。
-
e
g
:
eg:
eg:
对 于 字 母 表 Σ = { a , b , c } , a 、 a a 、 a b c 都 是 Σ 上 的 符 号 串 \quad \quad 对于字母表 \Sigma=\{a,b,c\}, a、aa、abc都是\Sigma上的符号串 对于字母表Σ={a,b,c},a、aa、abc都是Σ上的符号串
符号串长度
- 符号串的长度 表示符号串中包含符号的个数,用 |x| \textbf{|x|} |x| 表示。:
-
e
g
:
eg:
eg:
∣ a b c ∣ = 3 , ∣ ε ∣ = 0 \quad \quad |abc| = 3, \; | \text{ε} | = 0 ∣abc∣=3,∣ε∣=0
子符号串
- 设有非空符号串 u = xvy \text{u} = \text{xvy} u=xvy,其中符号串 v ≠ ε \text{v} ≠ \text{ε} v=ε,则称 v \text{v} v 为符号串 u \text{u} u 的子符号串。
-
e
g
:
eg:
eg:
对 于 x = a b c { a 、 a b 、 a b c 都 是 其 子 串 ε 、 a c 并 不 是 其 子 串 \quad \quad 对于x=abc\begin{cases} a、ab、abc & 都是其子串\\ \text{ε}、ac & 并不是其子串 \end{cases} 对于x=abc{a、ab、abcε、ac都是其子串并不是其子串
符号串的头与尾
- 若 z = x y z = xy z=xy 是一个符号串,则 { x 是 z 的 头 y 是 z 的 尾 \begin{cases} \boldsymbol{x} 是 \boldsymbol{z}的\textbf{头} \\ \boldsymbol{y} 是 \boldsymbol{z}的\textbf{尾} \end{cases} {x是z的头y是z的尾,且 { x 是 z 的 固有头 y ≠ ε y 是 z 的 固有尾 x ≠ ε \begin{cases} \boldsymbol{x} 是 \boldsymbol{z}的\textbf{固有头} & \boldsymbol{y} \not= \textbf{ε} \\ \boldsymbol{y} 是 \boldsymbol{z}的\textbf{固有尾} & \boldsymbol{x} \not= \textbf{ε} \end{cases} {x是z的固有头y是z的固有尾y=εx=ε
- 另外,可用省略形式表示符号串,形如 { z = x … z = … y z = … x … \begin{cases} z = x \dots \\ z = \dots y \\ z = \dots x \dots \end{cases} ⎩⎪⎨⎪⎧z=x…z=…yz=…x…
-
e
g
:
eg:
eg:
对 于 x = 56789 , { ε 、 5 、 56 、 567 、 5678 、 56789 都 是 x 的 头 ε 、 5 、 56 、 567 、 5678 都 是 x 的 固 有 头 \quad \quad 对于x=56789,\begin{cases} \text{ε}、5、56、567、5678、56789 & 都是x的头\\ \text{ε}、5、56、567、5678 & 都是x的固有头 \end{cases} 对于x=56789,{ε、5、56、567、5678、56789ε、5、56、567、5678都是x的头都是x的固有头
(2).运算
-
联结(并置)
- 设 x x x 与 y y y 是同一字母表上的两个符号串,把 y y y 的各个符号相继写在 x x x 的符号后所得到的符号串称为 x x x 与 y y y 的联结(或并置),记为 x y \boldsymbol{xy} xy
-
- 显然, ∣ x y ∣ = ∣ x ∣ + ∣ y ∣ \pmb{|xy| = |x| + |y|} ∣xy∣=∣x∣+∣y∣∣xy∣=∣x∣+∣y∣∣xy∣=∣x∣+∣y∣
- 特别地, ε x = x ε = x \pmb{\text{ε}x = x\text{ε} = x} εx=xε=xεx=xε=xεx=xε=x
-
-
e
g
:
eg:
eg:
x = a b , y = a b c , 则 x y = a b a b c \quad \quad x = ab,y = abc,则xy = ababc x=ab,y=abc,则xy=ababc
幂
- 设 x x x 是某字母表上的符号串,把 x x x 自身联结 n n n 次,即 z = x x … x ( n 个 x ) z = xx…x(n个x) z=xx…x(n个x),称为符号串 x \boldsymbol{x} x 的 n \boldsymbol{n} n 次方幂,记为 z = x n \pmb{z = x^n} z=xnz=xnz=xn
- 特别地,当 n = 0 n = 0 n=0 时, x 0 = ε x^0 = \text{ε} x0=ε
-
- 显然, ∣ x n ∣ = n ⋅ ∣ x ∣ \pmb{| x^n | = n\cdot|x|} ∣xn∣=n⋅∣x∣∣xn∣=n⋅∣x∣∣xn∣=n⋅∣x∣
-
-
e
g
:
eg:
eg:
x = 0 , y = a , 则 { x 5 = 00000 ( x y ) 5 = 0 a 0 a 0 a 0 a 0 a x y 5 = 0 a a a a a \quad \quad x = 0,y = a,则\begin{cases} x^5 = 00000 \\ (xy)^5 = 0a0a0a0a0a \\ xy^5 = 0aaaaa \end{cases} x=0,y=a,则⎩⎪⎨⎪⎧x5=00000(xy)5=0a0a0a0a0axy5=0aaaaa
3、符号串集合
(1).概念-1
-
符号串集合
- 若 集合 A \text{A} A 中的一切元素都是某字母表 Σ Σ Σ 上的符号串,则称 A \text{A} A 为该字母表 Σ Σ Σ 上的符号串集合,常用大写字母 A、B、C、 … \text{A、B、C、}\dots A、B、C、…表示。
- 特别地,空集 表示不包含任何元素的集合,用 ∅ \pmb{\varnothing} ∅∅∅ 表示。
- 符号串集合的表示方法 { 枚 举 表 示 法 { 1 , 11 , 111 } 省 略 表 示 法 { 1 , 11 , 111 , … } 描 述 表 示 法 { x ∣ x 满 足 条 件 C } \begin{cases} 枚举表示法 & \{ 1, 11, 111 \} \\ 省略表示法 & \{ 1, 11, 111, \dots \} \\ 描述表示法 & \{ x \; | \; x满足条件\text{C} \} \\ \end{cases} ⎩⎪⎨⎪⎧枚举表示法省略表示法描述表示法{1,11,111}{1,11,111,…}{x∣x满足条件C}
-
e
g
:
eg:
eg:
字 母 表 = { x ∣ x 是 该 字 母 表 上 的 符 号 串 , 且 ∣ x ∣ = 1 } \quad \quad 字母表 = \{ x \; | \; x是该字母表上的符号串,且|x| = 1 \} 字母表={x∣x是该字母表上的符号串,且∣x∣=1}
(2).运算
-
乘积
- 两个符号串集合 A \text{A} A 与 B \text{B} B 的 乘积 定义为 AB = { x y ∣ x ∈ A 且 y ∈ B } \text{AB} = \{ xy \; | \; x \in \text{A} \; 且 \; y \in \text{B} \} AB={xy∣x∈A且y∈B}
-
e
g
:
eg:
eg:
A = { 2 , 3 } , B = { 7 , 8 , 9 } , 则 AB = { 27 , 28 , 29 , 37 , 38 , 39 } \quad \quad \text{A} = \{ 2, 3 \}, \text{B} = \{ 7, 8, 9 \},则\text{AB} = \{ 27, 28, 29, 37, 38, 39 \} A={2,3},B={7,8,9},则AB={27,28,29,37,38,39}
-
幂
- 一个符号串集合的 n \boldsymbol{n} n 次幂 即 n \boldsymbol{n} n个该集合的乘积,如 { A 0 = { ε } A 1 = A A 2 = AA ⋯ ⋯ A n = A n − 1 A ( n > 0 ) \begin{cases} \pmb{\text{A}^0 = \{ \text{ε} \}} \\ \text{A}^1 = \text{A} \\ \text{A}^2 = \text{AA} \\ \cdots\cdots \\ \text{A}^n = \text{A}^{n-1}\text{A} \; (n > 0) \\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧A0={ε}A0={ε}A0={ε}A1=AA2=AA⋯⋯An=An−1A(n>0)
-
e
g
:
eg:
eg:
A = { 0 , 1 } , 则 A 3 = { 000 , 001 , 010 , 011 , 100 , 101 , 110 , 111 } \quad \quad \text{A} = \{ 0, 1 \},则\text{A}^3 = \{ 000, 001, 010, 011, 100, 101, 110, 111 \} A={0,1},则A3={000,001,010,011,100,101,110,111}
(3).概念-2
-
闭包、正闭包
- 符号串集合 A \text{A} A的闭包表示 A \text{A} A上一切长度为 n ( n ≥ 0 ) n(n \ge 0) n(n≥0)的符号串构成的集合,记为 A ∗ \text{A}^{*} A∗: A ∗ = A 0 ∪ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∪ ⋯ \text{A}^{*} = \text{A}^0 \cup \text{A}^1 \cup \text{A}^2 \cup \cdots \cup \text{A}^n \cup \cdots A∗=A0∪A1∪A2∪⋯∪An∪⋯
- 符号串集合 A \text{A} A的闭包表示 A \text{A} A上一切长度为 n ( n > 0 ) n(n \gt 0) n(n>0)的符号串构成的集合,记为 A + \text{A}^{+} A+: A + = A 1 ∪ A 2 ∪ ⋯ ∪ A n ∪ ⋯ \text{A}^{+} = \text{A}^1 \cup \text{A}^2 \cup \cdots \cup \text{A}^n \cup \cdots A+=A1∪A2∪⋯∪An∪⋯
-
- 显然, { A ∗ = A 0 ∪ A + A + = AA ∗ = A ∗ A \begin{cases} \pmb{\text{A}^* = \text{A}^0 \cup \text{A}^+} \\ \pmb{\text{A}^+ = \text{AA}^* = \text{A}^*\text{A}} \\ \end{cases} {A∗=A0∪A+A∗=A0∪A+A∗=A0∪A+A+=AA∗=A∗AA+=AA∗=A∗AA+=AA∗=A∗A
-
- A + \text{A}^+ A+ 表示 A \text{A} A 中的符号所能组成的一切符号串,故某字母表上的语言是该字母表正闭包的真子集
-
-
e
g
:
eg:
eg:
字 母 表 V = { 0 , 1 } \quad \quad 字母表\text{V} = \{ 0, 1 \} 字母表V={0,1},
则 { V ∗ = { ε , 0 , 1 , 00 , 01 , 10 , 11 , 000 , … … } V + = { 0 , 1 , 00 , 01 , 10 , 11 , 000 , … … } \quad \quad 则\begin{cases} \text{V}^* = \{ \text{ε}, 0, 1, 00, 01, 10, 11, 000, \dots\dots \} \\ \text{V}^+ = \{ 0, 1, 00, 01, 10, 11, 000, \dots\dots \} \\ \end{cases} 则{V∗={ε,0,1,00,01,10,11,000,……}V+={0,1,00,01,10,11,000,……}
C 语 言 的 字 符 集 U = { a \quad \quad \text{C}语言的字符集\text{U} = \{ a C语言的字符集U={a , b b b , ⋯ ⋯ \cdots\cdots ⋯⋯ , z z z , 0 0 0 , ⋯ ⋯ \cdots\cdots ⋯⋯ , 9 9 9 , + + + , − - − , ∗ * ∗ , / / / , : : : , ′ ' ′ , ( ( ( , ) ) ) , " " " , ⋯ ⋯ \cdots\cdots ⋯⋯ } \} }
则 { U + 表 示 由 U 上 的 字 符 构 成 的 任 意 长 度 的 符 号 串 的 集 合 任 何 一 个 正 确 的 C 语 言 源 程 序 是 U + 上 的 一 个 元 素 所 有 正 确 的 C 语 言 源 程 序 构 成 的 符 号 串 集 合 是 U + 上 的 真 子 集 \quad \quad 则\begin{cases} \text{U}^+ 表示 由 \text{U}上的字符构成的任意长度的符号串的集合 \\ \pmb{任何一个正确的\text{C}语言源程序是\text{U}^+上的一个元素} \\ \pmb{所有正确的\text{C}语言源程序构成的符号串集合是\text{U}^+上的真子集} \\ \end{cases} 则⎩⎪⎨⎪⎧U+表示由U上的字符构成的任意长度的符号串的集合任何一个正确的C语言源程序是U+上的一个元素任何一个正确的C语言源程序是U+上的一个元素任何一个正确的C语言源程序是U+上的一个元素所有正确的C语言源程序构成的符号串集合是U+上的真子集所有正确的C语言源程序构成的符号串集合是U+上的真子集所有正确的C语言源程序构成的符号串集合是U+上的真子集
二、文法与语言的形式定义
1、文法的形式定义
(1).重写规则
-
重写规则
- 一个重写规则(简称“规则”)是一个有序对 ( α , β ) (α,β) (α,β),通常写作 α : : = β 或 α → β \alpha ::= \beta \quad 或 \quad \alpha \rightarrow \beta α::=β或α→β
- 其中, { α 称 为 重 写 规 则 的 左 部 β 称 为 重 写 规 则 的 右 部 这 里 的 : : = 或 → 读 作 “ 定 义 为 ” \begin{cases} \alpha称为重写规则的\pmb{左部} \\ \beta称为重写规则的\pmb{右部} \\ 这里的 \quad ::= \quad 或 \quad \rightarrow \quad 读作“定义为” \end{cases} ⎩⎪⎨⎪⎧α称为重写规则的左部左部左部β称为重写规则的右部右部右部这里的::=或→读作“定义为”
-
e
g
:
eg:
eg:
\quad \quad 有一组规则 { < 标 识 符 > → < 字 母 > { < 字 母 > ∣ < 数 字 > } < 字 母 > → a ∣ b ∣ c ∣ … ∣ z < 数 字 > → 0 ∣ 1 ∣ 2 ∣ … ∣ 9 \begin{cases} \pmb{<标识符>} \ \rightarrow \ \pmb{<字母>\{ <字母> | <数字> \}} \\ \pmb{<字母>} \ \rightarrow \ \pmb{a | b | c | \dots | z} \\ \pmb{<数字>} \ \rightarrow \ \pmb{0 | 1 | 2 | \dots | 9} \\ \end{cases}\quad ⎩⎪⎨⎪⎧<标识符><标识符><标识符> → <字母>{<字母>∣<数字>}<字母>{<字母>∣<数字>}<字母>{<字母>∣<数字>}<字母><字母><字母> → a∣b∣c∣…∣za∣b∣c∣…∣za∣b∣c∣…∣z<数字><数字><数字> → 0∣1∣2∣…∣90∣1∣2∣…∣90∣1∣2∣…∣9或者 { < 标 识 符 > → < 字 母 > < 标 识 符 > → < 标 识 符 > < 数 字 > < 标 识 符 > → < 标 识 符 > < 字 母 > < 字 母 > → a ∣ b ∣ c ∣ … ∣ z < 数 字 > → 0 ∣ 1 ∣ 2 ∣ … ∣ 9 \quad\begin{cases} \pmb{<标识符>} \ \rightarrow \ \pmb{<字母>} \\ \pmb{<标识符>} \ \rightarrow \ \pmb{<标识符><数字>} \\ \pmb{<标识符>} \ \rightarrow \ \pmb{<标识符><字母>} \\ \pmb{<字母>} \ \rightarrow \ \pmb{a | b | c | \dots | z} \\ \pmb{<数字>} \ \rightarrow \ \pmb{0 | 1 | 2 | \dots | 9} \\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧<标识符><标识符><标识符> → <字母><字母><字母><标识符><标识符><标识符> → <标识符><数字><标识符><数字><标识符><数字><标识符><标识符><标识符> → <标识符><字母><标识符><字母><标识符><字母><字母><字母><字母> → a∣b∣c∣…∣za∣b∣c∣…∣za∣b∣c∣…∣z<数字><数字><数字> → 0∣1∣2∣…∣90∣1∣2∣…∣90∣1∣2∣…∣9
\quad \quad 也可以写成如下形式 { B → A { A ∣ D } A → a ∣ b ∣ c ∣ … ∣ z D → 0 ∣ 1 ∣ 2 ∣ … ∣ 9 \begin{cases} \pmb{\text{B}} \ \rightarrow \ \pmb{\text{A}\{ \text{A} | \text{D} \}} \\ \pmb{\text{A}} \ \rightarrow \ \pmb{a | b | c | \dots | z} \\ \pmb{\text{D}} \ \rightarrow \ \pmb{0 | 1 | 2 | \dots | 9} \\ \end{cases}\quad ⎩⎪⎨⎪⎧BBB → A{A∣D}A{A∣D}A{A∣D}AAA → a∣b∣c∣…∣za∣b∣c∣…∣za∣b∣c∣…∣zDDD → 0∣1∣2∣…∣90∣1∣2∣…∣90∣1∣2∣…∣9或者 { B → A B → BD B → BA A → a ∣ b ∣ c ∣ … ∣ z D → 0 ∣ 1 ∣ 2 ∣ … ∣ 9 \quad\begin{cases} \pmb{\text{B}} \ \rightarrow \ \pmb{\text{A}} \\ \pmb{\text{B}} \ \rightarrow \ \pmb{\text{B}\text{D}} \\ \pmb{\text{B}} \ \rightarrow \ \pmb{\text{B}\text{A}} \\ \pmb{\text{A}} \ \rightarrow \ \pmb{a | b | c | \dots | z} \\ \pmb{\text{D}} \ \rightarrow \ \pmb{0 | 1 | 2 | \dots | 9} \\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧BBB → AAABBB → BDBDBDBBB → BABABAAAA → a∣b∣c∣…∣za∣b∣c∣…∣za∣b∣c∣…∣zDDD → 0∣1∣2∣…∣90∣1∣2∣…∣90∣1∣2∣…∣9
元语言符号
- : : = 和 → ::= \ 和 \ \rightarrow ::= 和 → 表示 定义为
- ∣ \ | \; ∣ 表示 或者
- { } min max \{ \ \}^{\max}_{\min} { }minmax 表示 括号中的内容至少出现 min \pmb{\min} minminmin次、至多出现 max \pmb{\max} maxmaxmax次
- [ ] [ \ ] [ ] 表示 括号内的内容可有可无
- ( ) ( \ ) ( ) 表示 提出因子, e g : E → E + T ∣ E − T eg: \text{E} → \text{E} + \text{T} \ | \ \text{E} - \text{T} eg:E→E+T ∣ E−T 可写为 E → E ( + ∣ − ) T \text{E} → \text{E}(+|-)\text{T} E→E(+∣−)T
(2).文法
-
文法
- 文法 G \text{G} G是一个四元组 ( V N , V T , P , S ) (\text{V}_\text{N}, \text{V}_\text{T}, \text{P}, \text{S}) (VN,VT,P,S)
- 其中, { V N 非 终 结 符 号 集 合 V T 由 终 结 符 号 组 成 的 字 母 表 P 有 穷 非 空 的 重 写 规 则 集 合 S 识 别 符 号 ( S ∈ V N ) \begin{cases} \text{V}_\text{N} & 非终结符号集合 \\ \text{V}_\text{T} & 由终结符号组成的字母表 \\ \text{P} & 有穷非空的重写规则集合 \\ \text{S} & 识别符号{\color{#AA66FF}(\text{S} \in \text{V}_\text{N})} \\ \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧VNVTPS非终结符号集合由终结符号组成的字母表有穷非空的重写规则集合识别符号(S∈VN)
-
- 显然, V N ∩ V T = ∅ \text{V}_\text{N} \cap \text{V}_\text{T} = \varnothing VN∩VT=∅
-
-
e
g
:
eg:
eg:
文 法 G E : { 非 终 结 符 号 集 合 V N = { E , T , F } 终 结 符 号 字 母 表 V T = { + , ∗ , i , ( , ) } 识 别 符 S = E 重 写 规 则 集 合 P : { E → E + T E → T T → T ∗ F T → F F → i F → ( E ) \quad \quad 文法\text{G}_\text{E} : \begin{cases} 非终结符号集合 & \text{V}_\text{N} = \{ \text{E}, \text{T}, \text{F} \} \\ \\ 终结符号字母表 & \text{V}_\text{T} = \{ +, *, i, (, ) \} \\ \\ 识别符 & \text{S} = \text{E} \\ \\ 重写规则集合 & \text{P} : \begin{cases} \pmb{\text{E}} → \pmb{\text{E} + \text{T}} \\ \pmb{\text{E}} → \pmb{\text{T}} \\ \pmb{\text{T}} → \pmb{\text{T} * \text{F}} \\ \pmb{\text{T}} → \pmb{\text{F}} \\ \pmb{\text{F}} → \pmb{\text{i}} \\ \pmb{\text{F}} → \pmb{(\text{E})} \\ \end{cases} \\ \end{cases} 文法GE:⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧非终结符号集合终结符号字母表识别符重写规则集合VN={E,T,F}VT={+,∗,i,(,)}S=EP:⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧EEE→E+TE+TE+TEEE→TTTTTT→T∗FT∗FT∗FTTT→FFFFFF→iiiFFF→(E)(E)(E)
简 单 分 析 , 这 是 一 个 表 达 式 的 文 法 , 是 一 个 简 单 的 有 加 法 、 乘 法 、 小 括 号 的 表 达 式 文 法 。 \quad \quad 简单分析,这是一个表达式的文法,是一个简单的有加法、乘法、小括号的表达式文法。 简单分析,这是一个表达式的文法,是一个简单的有加法、乘法、小括号的表达式文法。 -
-
判断非终结符与终结符的方法
\quad \quad 一般来说,重写规则的左部都是非终结符,只在重写规则右部出现的都是终结符
-
字汇表
- 文法 G \text{G} G的字汇表 V = V N ∪ V T \text{V} = \text{V}_\text{N} \cup \text{V}_\text{T} V=VN∪VT,即字汇表是出现于文法规则中一切符号所组成的集合。
-
e
g
:
eg:
eg:
有 文 法 G [ < 无 符 号 整 数 > ] , 其 有 如 下 重 写 规 则 : \quad \quad 有文法\text{G}[<无符号整数>],其有如下重写规则: 有文法G[<无符号整数>],其有如下重写规则: { < 无 符 号 整 数 > → < 数 字 串 > < 数 字 串 > → < 数 字 串 > < 数 字 > < 数 字 串 > → < 数 字 > < 数 字 > → 0 ∣ 1 ∣ 2 ∣ ⋯ ∣ 9 \begin{cases} \pmb{<无符号整数>} \quad → \quad \pmb{<数字串>} \\ \pmb{<数字串>} \quad → \quad \pmb{<数字串><数字>} \\ \pmb{<数字串>} \quad → \quad \pmb{<数字>} \\ \pmb{<数字>} \quad → \quad \pmb{ 0 | 1 | 2 | \cdots | 9 } \\ \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧<无符号整数><无符号整数><无符号整数>→<数字串><数字串><数字串><数字串><数字串><数字串>→<数字串><数字><数字串><数字><数字串><数字><数字串><数字串><数字串>→<数字><数字><数字><数字><数字><数字>→0∣1∣2∣⋯∣90∣1∣2∣⋯∣90∣1∣2∣⋯∣9
则 { V N = { < 数 字 > , < 数 字 串 > , < 无 符 号 整 数 > } V T = { 0 , 1 , 2 , ⋯ , 9 } V = { 0 , 1 , 2 , ⋯ , 9 , < 数 字 > , < 数 字 串 > , < 无 符 号 整 数 > } \quad \quad 则\begin{cases} \text{V}_\text{N} = \{ <数字>, <数字串>, <无符号整数> \} \\ \text{V}_\text{T} = \{ 0, 1, 2, \cdots, 9 \} \\ \text{V} = \{ 0, 1, 2, \cdots, 9, <数字>, <数字串>, <无符号整数> \} \\ \end{cases} 则⎩⎪⎨⎪⎧VN={<数字>,<数字串>,<无符号整数>}VT={0,1,2,⋯,9}V={0,1,2,⋯,9,<数字>,<数字串>,<无符号整数>}
(3).句子
-
直接推导(一步推导)
- 对于文法 G \text{G} G,有规则 α → β \alpha → \beta α→β, x x x 和 y y y 是 字汇表 V \text{V} V 上的符号串(可以为空串 ε \text{ε} ε),若 V \text{V} V 上有另外两个符号串 v v v 和 w w w ,使 v = x α y v = x \alpha y v=xαy 且 w = x β y w = x \beta y w=xβy,则称 v v v 直接推导 或 直接产生出 w w w,或称 w w w 直接归约到 v v v,分别记为 v ⟹ w \pmb{v \Longrightarrow w} v⟹wv⟹wv⟹w, w ⇒ △ v \pmb{w \xRightarrow[\triangle]{} v} w△vw△vw△v
- 可以用产生式的右部替换产生式的左部
-
e
g
:
eg:
eg:
设 有 文 法 G [ E ] : { E → E + T ∣ T T → T ∗ F ∣ F F → ( E ) ∣ i \quad \quad 设有文法\text{G}[\text{E}] : \begin{cases} \pmb{\text{E}} → \pmb{\text{E} + \text{T} \; | \; \text{T}} \\ \pmb{\text{T}} → \pmb{\text{T} * \text{F} \; | \; \text{F}} \\ \pmb{\text{F}} → \pmb{(\text{E}) \; | \; \text{i}} \\ \end{cases} 设有文法G[E]:⎩⎪⎨⎪⎧EEE→E+T∣TE+T∣TE+T∣TTTT→T∗F∣FT∗F∣FT∗F∣FFFF→(E)∣i(E)∣i(E)∣i
做 出 如 下 一 系 列 直 接 推 导 : \quad \quad 做出如下一系列直接推导: 做出如下一系列直接推导:
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 \quad \quad \begin{aligned} \text{E} & \Rightarrow \text{E} + \text{T} \\ & \Rightarrow \text{T} + \text{T} \\ & \Rightarrow \text{F} + \text{T} \\ & \Rightarrow \text{i} + \text{T} \\ & \Rightarrow \text{i} + \text{T} * \text{F} \\ & \Rightarrow \text{i} + \text{F} * \text{F} \\ & \Rightarrow \text{i} + \text{i} * \text{F} \\ & \Rightarrow \text{i} + \text{i} * \text{i} \\ \end{aligned} E⇒E+T⇒T+T⇒F+T⇒i+T⇒i+T∗F⇒i+F∗F⇒i+i∗F⇒i+i∗i
做 出 如 下 一 系 列 直 接 归 约 : \quad \quad 做出如下一系列直接归约: 做出如下一系列直接归约:
i + i ∗ i ⇒ △ i + i ∗ F ⇒ △ i + F ∗ F ⇒ △ i + T ∗ F ⇒ △ i + T ⇒ △ F + T ⇒ △ T + T ⇒ △ E + T ⇒ △ E \quad \quad \quad \quad \quad \; \; \begin{aligned} \text{i} + \text{i} * \text{i} & \xRightarrow[\triangle]{} \text{i} + \text{i} * \text{F} \\ & \xRightarrow[\triangle]{} \text{i} + \text{F} * \text{F} \\ & \xRightarrow[\triangle]{} \text{i} + \text{T} * \text{F} \\ & \xRightarrow[\triangle]{} \text{i} + \text{T} \\ & \xRightarrow[\triangle]{} \text{F} + \text{T} \\ & \xRightarrow[\triangle]{} \text{T} + \text{T} \\ & \xRightarrow[\triangle]{} \text{E} + \text{T} \\ & \xRightarrow[\triangle]{} \text{E} \\ \end{aligned} i+i∗i△i+i∗F△i+F∗F△i+T∗F△i+T△F+T△T+T△E+T△E
-
推导(一步或多步推导)
- 对于文法 G \text{G} G,若存在一直接推导序列 v = u 0 ⇒ u 1 ⇒ u 2 ⇒ ⋯ ⇒ u n = w v = u_0 \Rightarrow u_1 \Rightarrow u_2 \Rightarrow \cdots \Rightarrow u_n = w v=u0⇒u1⇒u2⇒⋯⇒un=w ( n > 0 ) (n > 0) (n>0),则称 v v v 推导出 w w w ,或称 w w w 归约到 v v v,分别记为 v ⇒ + w \pmb{v \xRightarrow[]{+} w} v+wv+wv+w, w ⇒ △ + v \pmb{w \xRightarrow[\triangle]{+} v} w+△vw+△vw+△v,并称 n n n 为 推导长度。
-
e
g
:
eg:
eg:
设 有 文 法 G [ E ] : { E → E + T ∣ T T → T ∗ F ∣ F F → ( E ) ∣ i \quad \quad 设有文法\text{G}[\text{E}] : \begin{cases} \pmb{\text{E}} → \pmb{\text{E} + \text{T} \; | \; \text{T}} \\ \pmb{\text{T}} → \pmb{\text{T} * \text{F} \; | \; \text{F}} \\ \pmb{\text{F}} → \pmb{(\text{E}) \; | \; \text{i}} \\ \end{cases} 设有文法G[E]:⎩⎪⎨⎪⎧EEE→E+T∣TE+T∣TE+T∣TTTT→T∗F∣FT∗F∣FT∗F∣FFFF→(E)∣i(E)∣i(E)∣i
做 出 如 下 直 接 推 导 : \quad \quad 做出如下直接推导: 做出如下直接推导:
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 \begin{aligned} \text{E} & \Rightarrow \text{E} + \text{T} \\ & \Rightarrow \text{T} + \text{T} \\ & \Rightarrow \text{F} + \text{T} \\ & \Rightarrow \text{i} + \text{T} \\ & \Rightarrow \text{i} + \text{T} * \text{F} \\ & \Rightarrow \text{i} + \text{F} * \text{F} \\ & \Rightarrow \text{i} + \text{i} * \text{F} \\ & \Rightarrow \text{i} + \text{i} * \text{i} \\ \end{aligned} E⇒E+T⇒T+T⇒F+T⇒i+T⇒i+T∗F⇒i+F∗F⇒i+i∗F⇒i+i∗i
可 以 写 成 E ⇒ + i + i ∗ i , 推 导 长 度 为 8 \quad \quad 可以写成 \quad \text{E} \xRightarrow[]{+} \text{i} + \text{i} * \text{i},推导长度为\; 8 可以写成E+i+i∗i,推导长度为8
-
广义推导(零步或多步推导)
- 对于符号串 v v v 和 w w w,若 v ⇒ + w v \xRightarrow[]{+} w v+w 或 v = w v = w v=w,则称符号串 v v v 广义推导到 符号串 w w w,或称符号串 w w w 广义归约到 v v v,分别记为 v ⇒ ∗ w \pmb{ v \xRightarrow[]{*} w} v∗wv∗wv∗w , w ⇒ △ ∗ v \pmb{w \xRightarrow[\triangle]{*} v} w∗△vw∗△vw∗△v
-
e
g
:
eg:
eg:
E ⇒ ∗ E \quad \quad \text{E} \xRightarrow[]{*} \text{E} E∗E
-
句型、句子
- 设 G [ Z ] \text{G}[\text{Z}] G[Z] 是字汇表 V \text{V} V 上的一个文法 { 若 Z ⇒ ∗ x , x ∈ V ∗ 则 称 x 是 文 法 G 的 一 个 句 型 若 Z ⇒ ∗ x , x ∈ V T ∗ 则 称 x 是 文 法 G 的 一 个 句 子 \begin{cases} 若 \; \text{Z} \xRightarrow[]{*} x, \; x \in \text{V}^* & 则称 \; x \; 是文法\text{G}的一个\pmb{句型} \\ 若 \; \text{Z} \xRightarrow[]{*} x, \; x \in {\text{V}_\text{T}}^* & 则称 \; x \; 是文法\text{G}的一个\pmb{句子} \\ \end{cases} {若Z∗x,x∈V∗若Z∗x,x∈VT∗则称x是文法G的一个句型句型句型则称x是文法G的一个句子句子句子
- Tips: V ∗ 是 指 V 的 闭 包 \text{V}^*是指\text{V}的闭包 V∗是指V的闭包
-
e
g
:
eg:
eg:
设 有 文 法 G [ E ] : { E → E + T ∣ T T → T ∗ F ∣ F F → ( E ) ∣ i \quad \quad 设有文法\text{G}[\text{E}] : \begin{cases} \pmb{\text{E}} → \pmb{\text{E} + \text{T} \; | \; \text{T}} \\ \pmb{\text{T}} → \pmb{\text{T} * \text{F} \; | \; \text{F}} \\ \pmb{\text{F}} → \pmb{(\text{E}) \; | \; \text{i}} \\ \end{cases} 设有文法G[E]:⎩⎪⎨⎪⎧EEE→E+T∣TE+T∣TE+T∣TTTT→T∗F∣FT∗F∣FT∗F∣FFFF→(E)∣i(E)∣i(E)∣i
做 出 如 下 一 系 列 直 接 推 导 : \quad \quad 做出如下一系列直接推导: 做出如下一系列直接推导:
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 \begin{aligned} \text{E} & \Rightarrow \text{E} + \text{T} \\ & \Rightarrow \text{T} + \text{T} \\ & \Rightarrow \text{F} + \text{T} \\ & \Rightarrow \text{i} + \text{T} \\ & \Rightarrow \text{i} + \text{T} * \text{F} \\ & \Rightarrow \text{i} + \text{F} * \text{F} \\ & \Rightarrow \text{i} + \text{i} * \text{F} \\ & \Rightarrow \text{i} + \text{i} * \text{i} \\ \end{aligned} E⇒E+T⇒T+T⇒F+T⇒i+T⇒i+T∗F⇒i+F∗F⇒i+i∗F⇒i+i∗i
因 此 , { E + T T + T F + T i + T i + T ∗ F i + i ∗ i 都 是 文 法 G [ E ] 的 句 型 \quad \quad 因此,\begin{cases} \text{E} + \text{T} \\ \text{T} + \text{T} \\ \text{F} + \text{T} \\ \text{i} + \text{T} \\ \text{i} + \text{T} * \text{F} \\ \text{i} + \text{i} * \text{i} \\ \end{cases}都是文法\text{G}[\text{E}]的句型 因此,⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧E+TT+TF+Ti+Ti+T∗Fi+i∗i都是文法G[E]的句型
而 i + i ∗ i , 既 是 文 法 G [ E ] 的 一 个 句 型 , 又 是 文 法 G [ E ] 的 一 个 句 子 \quad \quad 而\text{i} + \text{i} * \text{i},既是文法\text{G}[\text{E}]的一个句型,又是文法\text{G}[\text{E}]的一个句子 而i+i∗i,既是文法G[E]的一个句型,又是文法G[E]的一个句子
2、语言的形式定义
(1).语言
假定 G [ S ] \text{G}[\text{S}] G[S] 是一个文法, S \text{S} S 是文法的识别符号。由该文法描述的语言用 L ( G [ S ] ) \pmb{\text{L}(\text{G}[\text{S}])} L(G[S])L(G[S])L(G[S]) 表示,则 L ( G [ S ] ) = { x ∣ S ⇒ ∗ x 且 x ∈ V T ∗ } \text{L}(\text{G}[\text{S}]) = \{ x \; | \; \text{S} \xRightarrow[]{*} x \; 且 \; x \in {\text{V}_\text{T}}^* \} L(G[S])={x∣S∗x且x∈VT∗}
文法描述的语言是该文法一切句子的集合。
文法描述的语言是该文法的终结符集合的闭包(
V
T
∗
\pmb{{\text{V}_\text{T}}^*}
VT∗VT∗VT∗)的真子集。
e
g
:
eg:
eg:
设
有
文
法
G
[
E
]
:
{
E
→
E
+
T
∣
T
T
→
T
∗
F
∣
F
F
→
(
E
)
∣
i
\quad \quad 设有文法\text{G}[\text{E}] : \begin{cases} \pmb{\text{E}} → \pmb{\text{E} + \text{T} \; | \; \text{T}} \\ \pmb{\text{T}} → \pmb{\text{T} * \text{F} \; | \; \text{F}} \\ \pmb{\text{F}} → \pmb{(\text{E}) \; | \; \text{i}} \\ \end{cases}
设有文法G[E]:⎩⎪⎨⎪⎧EEE→E+T∣TE+T∣TE+T∣TTTT→T∗F∣FT∗F∣FT∗F∣FFFF→(E)∣i(E)∣i(E)∣i
则
文
法
G
[
E
]
描
述
的
语
言
是
由
i
,
+
,
∗
,
(
,
)
组
成
的
所
有
表
达
式
\quad \quad 则文法\text{G}[\text{E}]描述的语言是由 \; \text{i} \; , \; + \; , \; * \; , \; ( \; , \; ) \; 组成的所有表达式
则文法G[E]描述的语言是由i,+,∗,(,)组成的所有表达式
像
{
(
i
+
)
ii
i
)
这
些
符
号
串
都
不
是
文
法
G
[
E
]
的
句
子
,
所
以
他
们
都
不
属
于
集
合
L
(
G
[
E
]
)
\quad \quad 像\begin{cases} (\text{i}+) \\ \text{ii} \\ \text{i}) \\ \end{cases}这些符号串都不是文法\text{G}[\text{E}]的句子,所以他们都不属于集合\text{L}(\text{G}[\text{E}])
像⎩⎪⎨⎪⎧(i+)iii)这些符号串都不是文法G[E]的句子,所以他们都不属于集合L(G[E])
L
(
G
[
E
]
)
是
V
T
∗
的
真
子
集
\quad \quad \text{L}(\text{G}[\text{E}])是{\text{V}_\text{T}}^*的真子集
L(G[E])是VT∗的真子集
\quad \quad
一个正确的源程序应该是能够从该语言的文法识别符号开始推导出来的一个符号串,换句话说,如果一个源程序不能从该语言的文法识别符号推导出来,那么这必然是一个错误的源程序
文法和语言的关系
- 给定一个文法,就能从结构上唯一地确定其语言
- 给定一个语言,能确定其文法,但这种文法不是唯一的
题
例
1
\pmb{题例1}
题例1题例1题例1
设
有
文
法
G
[
A
]
:
A
→
b
A
∣
a
\quad \quad 设有文法 \text{G}[\text{A}] \; : \; \text{A} → b\text{A} \; | \; a
设有文法G[A]:A→bA∣a
求
证
:
该
文
法
G
[
A
]
所
确
定
的
语
言
是
L
(
G
[
A
]
)
=
{
b
i
a
∣
i
≥
0
}
\quad \quad 求证:该文法 \text{G}[\text{A}] 所确定的语言是 \text{L}(\text{G}[\text{A}]) = \{ b^ia \; | \; i \ge 0 \}
求证:该文法G[A]所确定的语言是L(G[A])={bia∣i≥0}
数
学
归
纳
法
\quad \quad \pmb{数学归纳法}
数学归纳法数学归纳法数学归纳法
证
明
:
\quad \quad \pmb{证明:}
证明:证明:证明:
要
证
明
“
文
法
G
[
A
]
所
确
定
的
语
言
是
L
(
G
[
A
]
)
=
{
b
i
a
∣
i
≥
0
}
”
\quad \quad \quad \quad 要证明 “文法 \text{G}[\text{A}] 所确定的语言是 \text{L}(\text{G}[\text{A}]) = \{ b^ia \; | \; i \ge 0 \}”
要证明“文法G[A]所确定的语言是L(G[A])={bia∣i≥0}”
即
证
明
“
A
通
过
文
法
G
[
A
]
的
规
则
广
义
推
导
出
的
句
子
都
是
是
形
如
b
i
a
的
终
结
符
号
串
”
\quad \quad \quad \quad 即证明 “\text{A}通过文法 \text{G}[\text{A}] 的规则广义推导出的句子都是是形如 \; b^i a \; 的终结符号串”
即证明“A通过文法G[A]的规则广义推导出的句子都是是形如bia的终结符号串”
即
证
明
“
使
用
规
则
A
→
b
A
∣
a
可
以
得
到
A
⇒
∗
b
i
a
(
i
≥
0
)
”
\quad \quad \quad \quad 即证明 “使用规则\text{A} → b\text{A} \; | \; a \; 可以得到 \; \text{A} \xRightarrow[]{*} b^ia ( i \ge 0) \;”
即证明“使用规则A→bA∣a可以得到A∗bia(i≥0)”
现
用
数
学
归
纳
法
证
明
如
下
:
\quad \quad \quad \quad 现用数学归纳法证明如下:
现用数学归纳法证明如下:
①
当
i
=
0
时
,
显
然
A
⇒
∗
a
,
命
题
成
立
\quad \quad \quad \quad \quad \quad ① \; 当 \; i = 0 \; 时,显然 \; \text{A} \xRightarrow[]{*} a \; ,命题成立
①当i=0时,显然A∗a,命题成立
②
假
设
i
=
k
(
k
≥
0
)
时
,
命
题
成
立
,
有
A
⇒
∗
b
k
a
\quad \quad \quad \quad \quad \quad ② \; 假设 \; i = k( k \ge 0) \; 时,命题成立,有 \; \text{A} \xRightarrow[]{*} b^k a \;
②假设i=k(k≥0)时,命题成立,有A∗bka
当
i
=
k
+
1
时
,
A
⟹
b
A
⇒
∗
b
⋅
b
k
a
(
A
⇒
∗
b
k
a
)
=
b
k
+
1
a
\quad \quad \quad \quad \quad \quad \quad \quad \begin{aligned} 当 \; i = k + 1 \; 时, \text{A} & \Longrightarrow b\text{A} \\ & \xRightarrow[]{*} b \cdot b^k a & (\text{A} \xRightarrow[]{*} b^k a) \\ & \xlongequal[]{\;\;\;\;} b^{k+1} a \end{aligned}
当i=k+1时,A⟹bA∗b⋅bkabk+1a(A∗bka)
即
A
⇒
∗
b
k
+
1
a
\quad \quad \quad \quad \quad \quad \quad \quad 即 \; \text{A} \xRightarrow[]{*} b^{k+1} a \;
即A∗bk+1a
即
当
i
=
k
+
1
时
,
命
题
也
成
立
\quad \quad \quad \quad \quad \quad \quad \quad 即当 \; i = k+1 \; 时,命题也成立
即当i=k+1时,命题也成立
综
①
②
,
使
用
规
则
A
→
b
A
∣
a
可
以
得
到
A
⇒
∗
b
i
a
(
i
≥
0
)
\quad \quad \quad \quad 综 \; ① \; ② \;,使用规则\text{A} → b\text{A} \; | \; a \; 可以得到 \; \text{A} \xRightarrow[]{*} b^ia ( i \ge 0) \;
综①②,使用规则A→bA∣a可以得到A∗bia(i≥0)
从
而
原
命
题
得
证
\quad \quad \quad \quad 从而原命题得证
从而原命题得证
题
例
2
\pmb{题例2}
题例2题例2题例2
设
L
=
{
a
2
n
b
∣
n
≥
1
}
,
这
里
V
T
=
{
a
,
b
}
.
\quad \quad 设\text{L} = \{ a^{2n} b \; | \; n \ge 1 \},这里\text{V}_\text{T} = \{ a, b \}.
设L={a2nb∣n≥1},这里VT={a,b}.
试
为
其
构
造
相
应
的
文
法
。
\quad \quad 试为其构造相应的文法。
试为其构造相应的文法。
解
:
\quad \quad \pmb{解:}
解:解:解:
先
考
虑
n
=
1
、
2
、
3
的
特
殊
情
况
{
n
=
1
a
a
b
n
=
2
a
a
a
a
b
n
=
3
a
a
a
a
a
a
b
\quad \quad \quad \quad 先考虑 \; n = 1、2、3 \; 的特殊情况\begin{cases} n = 1 & aab \\ n = 2 & aaaab \\ n = 3 & aaaaaab \\ \end{cases}
先考虑n=1、2、3的特殊情况⎩⎪⎨⎪⎧n=1n=2n=3aabaaaabaaaaaab
显
然
,
规
律
是
偶
数
个
a
后
跟
一
个
b
,
且
可
能
有
无
穷
多
个
a
\quad \quad \quad \quad 显然,规律是偶数个 \; a \; 后跟一个 \; b \;,且可能有无穷多个 \; a \;
显然,规律是偶数个a后跟一个b,且可能有无穷多个a
因
此
规
则
中
一
定
有
递
归
\quad \quad \quad \quad 因此规则中一定有递归
因此规则中一定有递归
可
设
计
规
则
G
[
Z
]
:
{
Z
→
A
b
A
→
a
A
a
∣
a
a
或
G
[
Z
]
:
{
Z
→
A
b
A
→
A
a
a
∣
a
a
等
。
\quad \quad \quad \quad 可设计规则 \; \text{G}[\text{Z}] \; : \; \begin{cases} \text{Z} → \text{A}b \\ \text{A} → a\text{A}a \; | \; aa \\ \end{cases} \; 或 \; \text{G}[\text{Z}] \; : \; \begin{cases} \text{Z} → \text{A}b \\ \text{A} → \text{A}aa \; | \; aa \\ \end{cases} \; 等。
可设计规则G[Z]:{Z→AbA→aAa∣aa或G[Z]:{Z→AbA→Aaa∣aa等。
小结:其实从 题 例 1 ‾ \underline{\pmb{题例1}} 题例1题例1题例1 和 题 例 2 ‾ \underline{\pmb{题例2}} 题例2题例2题例2 中看出 文法和语言的关系
(2).递归规则
{ 如 果 一 个 规 则 形 如 U → … U … 则 称 该 规 则 是 递 归 的 如 果 一 个 规 则 形 如 U → U … 则 称 该 规 则 是 左 递 归 的 如 果 一 个 规 则 形 如 U → … U 则 称 该 规 则 是 右 递 归 的 \begin{cases} 如果一个规则形如 \; \text{U} → \dots \text{U} \dots & 则称该规则是\pmb{递归}的 \\ 如果一个规则形如 \; \text{U} → \text{U} \dots & 则称该规则是\pmb{左递归}的 \\ 如果一个规则形如 \; \text{U} → \dots \text{U} & 则称该规则是\pmb{右递归}的 \\ \end{cases} ⎩⎪⎨⎪⎧如果一个规则形如U→…U…如果一个规则形如U→U…如果一个规则形如U→…U则称该规则是递归递归递归的则称该规则是左递归左递归左递归的则称该规则是右递归右递归右递归的
(3).等价
若 L ( G 1 ) = L ( G 2 ) \text{L}(\text{G}_1) = \text{L}(\text{G}_2) L(G1)=L(G2),则称文法 G 1 \text{G}_1 G1 和 G 2 \text{G}_2 G2 是等价的。
e
g
:
eg:
eg:
这
三
种
文
法
就
是
等
价
的
{
G
1
[
Z
]
:
{
Z
→
A
b
A
→
a
A
a
∣
a
a
G
2
[
Z
]
:
{
Z
→
A
b
A
→
a
a
A
∣
a
a
G
3
[
Z
]
:
{
Z
→
A
b
A
→
A
a
a
∣
a
a
\quad \quad 这三种文法就是等价的\begin{cases} \text{G}_1[\text{Z}] \; : \; \begin{cases} \text{Z} → \text{A}b \\ \text{A} → a\text{A}a \; | \; aa \\ \end{cases} \\ \\ \text{G}_2[\text{Z}] \; : \; \begin{cases} \text{Z} → \text{A}b \\ \text{A} → aa\text{A} \; | \; aa \\ \end{cases} \\ \\ \text{G}_3[\text{Z}] \; : \; \begin{cases} \text{Z} → \text{A}b \\ \text{A} → \text{A}aa \; | \; aa \\ \end{cases} \\ \end{cases}
这三种文法就是等价的⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧G1[Z]:{Z→AbA→aAa∣aaG2[Z]:{Z→AbA→aaA∣aaG3[Z]:{Z→AbA→Aaa∣aa
它
们
都
确
定
了
语
言
L
=
{
a
2
n
b
∣
n
≥
1
}
\quad \quad 它们都确定了语言\text{L} = \{ a^{2n} b \; | \; n \ge 1 \}
它们都确定了语言L={a2nb∣n≥1}