【计算理论】计算理论总结 ( 上下文无关文法 ) ★★
参考博客 :
- 【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )
- 【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )
- 【计算理论】上下文无关语法 CFG ( CFG 设计示例 | CFG 歧义性 | Chomsky 范式 | 上下文无关语法 转为 Chomsky 范式 )
一、上下文无关文法 ( CFG )
上下文无关语法 组成 : 由 { V , Σ , R , S } \{ \quad V , \Sigma , R , S \quad \} {V,Σ,R,S} 四部分组成 ;
变量集 V V V : 有限的变量集合 ;
终端字符集 Σ \Sigma Σ : 有限的终端字符组成的集合 ; 相当于常量的含义 , 与变量相对 ;
规则集 R R R : 有限的规则组成的集合 , 规则规定如何进行代换操作 , 规定 变量 , 终端字符 , 字符串变量 等 ;
开始变量 S S S : 该变量作为开始变量 ;
规则 :
① 已知条件 : 假设 u , v , w u, v , w u,v,w 是 变量 ( 变元 ) 或 终端字符集 ( 常量 / 常元 ) ;
② 规则描述 : 规则是一个箭头 , A → w A \to w A→w , A A A 是变元 , w w w 是 变元 和 常元 组成的终端字符 ;
③ 规则用法 : 在字符串中 , 根据 A → w A \to w A→w 规则进行替换 , 只需要将 A A A 变元替换成 w w w 字符串即可 ;
④ 规则示例 : u A v uAv uAv 中使用上述规则进行替换 , 将 A A A 替换成 w w w , 替换结果是得到新字符串 u w v uwv uwv ;
u A v ⇒ u w v uAv \Rightarrow uwv uAv⇒uwv
二、上下文无关文法 ( CFG ) 示例
上下文无关文法 ( CFG ) : G 3 = ( { S } , { a , b } , R , S ) \rm G3 =( \; \{ S \}, \{ a, b \}, R , S \; ) G3=({S},{a,b},R,S) 其组成如下 :
-
变量集 { S } \rm \{ S \} {S} ;
-
终端字符集 { a , b } \rm \{ a, b \} {a,b} ;
-
规则 R \rm R R ;
-
开始变量 S \rm S S ;
规则 R \rm R R 描述 : S → a S b ∣ S S ∣ ε \rm S \to aSb \; | \; SS \; | \; \varepsilon S→aSb∣SS∣ε
- S \rm S S 变量 可以使用 a S b \rm aSb aSb 字符串替换 ;
- S \rm S S 变量 可以使用 S S \rm SS SS 字符串替换 ;
- S \rm S S 变量 可以使用 ε \rm \varepsilon ε 字符串替换 ;
规则替换过程 : 下面的 ① ~ ⑦ 分别对应七次规则替换 ;
S ⇒ a S b ⇒ a a S b b ⇒ a a S S b b ⇒ a a a S b S b b ⇒ a a a b S b b ⇒ a a a b a S b b b ⇒ a a a b a b b b \rm S \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbb \Rightarrow aaabaSbbb \Rightarrow aaababbb S⇒aSb⇒aaSbb⇒aaSSbb⇒aaaSbSbb⇒aaabSbb⇒aaabaSbbb⇒aaababbb
- ① S S \rm S S SS 是开始变量 , 可以使用 a S b \rm aSb aSb 替换 S \rm S S ; S ⇒ a S b \rm S \Rightarrow aSb S⇒aSb
- ② 使用 a S b \rm aSb aSb 替换 S \rm S S ; a S b ⇒ a a S b b \rm aSb \Rightarrow aaSbb aSb⇒aaSbb
- ③ 使用 S S \rm SS SS 替换 S \rm S S ; a a S b b ⇒ a a S S b b \rm aaSbb \Rightarrow aaSSbb aaSbb⇒aaSSbb
- ④ 使用 a S b \rm aSb aSb 替换第一个 S \rm S S ; a a S S b b ⇒ a a a S b S b b \rm aaSSbb \Rightarrow aaaSbSbb aaSSbb⇒aaaSbSbb
- ⑤ 使用 ε \rm \varepsilon ε 替换第一个 S \rm S S ; a a a S b S b b ⇒ a a a b S b b \rm aaaSbSbb \Rightarrow aaabSbb aaaSbSbb⇒aaabSbb
- ⑥ 使用 a S b \rm aSb aSb 替换 S \rm S S ; a a a b S b b ⇒ a a a b a S b b b \rm aaabSbb \Rightarrow aaabaSbbb aaabSbb⇒aaabaSbbb
- ⑦ 使用 ε \rm \varepsilon ε 替换 S \rm S S ; a a a b a S b b b ⇒ a a a b a b b b \rm aaabaSbbb \Rightarrow aaababbb aaabaSbbb⇒aaababbb
三、确定性有限自动机 DFA 转为 上下文无关语法 CFG
1 . 确定性有限自动机 ( DFA ) 转为 上下文无关语法 ( CFG ) : 将
确定性有限自动机 ( DFA ) 的指令 , 转为 对应的
上下文无关语法 ( CFG ) 规则 : δ ( q i , a ) = q j ⇒ R i → a R j \rm \delta ( q_i, a ) = q_j \Rightarrow R_i \to aR_j δ(qi,a)=qj⇒Ri→aRj
δ ( q i , a ) = q j \delta ( q_i, a ) = q_j δ(qi,a)=qj 表示 q i q_i qi 状态下 , 读取字符 a a a , 跳转到 q j q_j qj 状态 ;
2 . 自动机的 状态跳转 转换成 规则 示例 : 下图中的 确定性有限自动机 , 开始状态 A A A 读取 1 1 1 字符 转化成 B B B 状态 , 表示成规则就是 R A → 1 R B R_A \to 1R_B RA→1RB
3 . 自动机的状态 A A A 读取 字符 a a a 转换成另一个状态 B B B , 都可以转换成对应的规则 R A → a R B R_A \to aR_B RA→aRB ;
4 . 计算能力对比 : 上下文无关语法 的计算能力 要大于等于 自动机的计算能力 ;
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/111402658
- 点赞
- 收藏
- 关注作者
评论(0)