【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )
文章目录
- I . 代数表达式 语法
- II . 代数表达式 语法 示例
- III . 设计 上下文无关语法
- IV . 确定性有限自动机 DFA 转为 上下文无关语法
I . 代数表达式 语法
1 . 代数表达式 语法 : G4=(V,A,R,Expression)G4 = ( V , A , R , Expression )G4=(V,A,R,Expression) 是代数表达式语法 ;
① 终端字符集 : A={a,+,×,()}A = \{ a , + , \times , () \}A={a,+,×,()} ;
② 变量集 : V={Expression,Term,Factor}V = \{ Expression , Term , Factor \}V={Expression,Term,Factor} ;
- ExpressionExpressionExpression 是表达式 ;
- TermTermTerm 是项 ;
- FactorFactorFactor 是因子 ;
2 . ExpressionExpressionExpression 表达式 规则 :
Expression→Expression+Term∣TermExpression \to Expression + Term \quad | \quad TermExpression→Expression+Term∣Term
ExpressionExpressionExpression ( 表达式 ) 可以通过 Expression+Term∣TermExpression + Term \quad | \quad TermExpression+Term∣Term 代替 ;
3 . TermTermTerm 项 规则 :
Term→Term×Factor∣FactorTerm \to Term \times Factor \quad | \quad FactorTerm→Term×Factor∣Factor
TermTermTerm 项 可以通过 Term×Factor∣FactorTerm \times Factor \quad | \quad FactorTerm×Factor∣Factor 代替 ;
4 . FactorFactorFactor 因子 规则 :
Factor→Expression∣aFactor \to Expression \quad | \quad aFactor→Expression∣a
FactorFactorFactor 因子 可以通过 Expression∣aExpression \quad | \quad aExpression∣a 代替 ;
II . 代数表达式 语法 示例
为字符串 (a+a)×a(a + a) \times a(a+a)×a 构建 语法分析树 ;
1 . 起始状态 : 语法的起始状态是 ExpressionExpressionExpression , 根据 Expression→Expression+Term∣TermExpression \to Expression + Term \quad | \quad TermExpression→Expression+Term∣Term 规则 , ExpressionExpressionExpression 可以使用 TermTermTerm 替换 , 直接从起始状态 , 使用 TermTermTerm 替换 ExpressionExpressionExpression ;
2 . (a+a)×a(a + a) \times a(a+a)×a 字符串的语法分析树 :
符号 : 其中有 ×\times× 乘号 ;
语法分析树 : (a+a)×a(a + a) \times a(a+a)×a 中间有 ×\times× , 带有 ×\times× 乘号的替换规则为 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor , 显然该项很显然是一个 TermTermTerm 项 ;
3 . 根据上述 Term→Term×FactorTerm \to Term \times FactorTerm→Term×Factor 可知 , TermTermTerm 是由 Term×FactorTerm \times FactorTerm×Factor 进行替换的 , 左侧的 (a+a)(a + a)(a+a) 是一个 TermTermTerm , 右侧的 aaa 是一个 FactorFactorFactor ;
4 . 根据 Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a 规则 , 右侧的 FactorFactorFactor 直接使用 aaa 进行替代 , 可得如下语法分析树 :
5 . 想办法将左侧的 TermTermTerm 替换成 (a+a)(a + a)(a+a) :
加法只能是 ExpressionExpressionExpression , 先替换成 ExpressionExpressionExpression ;
6 . 这里先使用 FactorFactorFactor 替换 TermTermTerm : 使用规则 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor ;
7 . 在使用 ExpressionExpressionExpression 替换 FactorFactorFactor : 使用规则 Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a ;
8 . 使用 Expression+TermExpression + TermExpression+Term 替换 ExpressionExpressionExpression : 使用规则 Expression→Expression+Term∣TermExpression \to Expression + Term | TermExpression→Expression+Term∣Term ;
9 . 使用 TermTermTerm 替换 左侧的 ExpressionExpressionExpression : 使用规则 Expression→Expression+Term∣TermExpression \to Expression + Term | TermExpression→Expression+Term∣Term ;
10 . 使用 FactorFactorFactor 替换左侧的 TermTermTerm : 使用规则 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor ;
11 . 使用 aaa 替换左侧的 FactorFactorFactor : 使用规则 Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a ;
12 . 使用 FactorFactorFactor 替换右侧的 TermTermTerm : 使用规则 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor ;
13 . 使用 aaa 替换右侧的 FactorFactorFactor : 使用规则 Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a ;
最终的 语法分析树为 :
此时可以得到语法分析树 ; 该语法分析树是一个代数表达式 ; 将该语法分析树写出 , 即可理解 上下文无关 语法 ;
代数表达式就是上下文无关的语法 ;
III . 设计 上下文无关语法
给定语言 , 设计上下文无关语法 , 使用该语法可以生成该语言 ;
上下文无关语法 设计技巧 : 将复杂的语言分解 , 化整为零 , 针对每个部分设计上下文无关的语法 , 最终将这些语法合并在一起 ;
上下文无关语法 与 自动机 : 如果给定的语言是正则语言 , 是由正则表达式表达的 , 能够找到一个自动机可以识别该语言 , 首先将语言转换成自动机 , 将自动机转化为上下文无关的语法 ;
IV . 确定性有限自动机 DFA 转为 上下文无关语法
1 . 确定性有限自动机 ( DFA ) 转为 上下文无关语法 ( CFG ) : 将 确定性有限自动机 ( DFA ) 的指令 , 转为 对应的 上下文无关语法 ( CFG ) 规则 :
δ(qi,a)=qj⇒Ri→aRj\delta ( q_i, a ) = q_j \Rightarrow R_i \to aR_jδ(qi,a)=qj⇒Ri→aRj
δ(qi,a)=qj\delta ( q_i, a ) = q_jδ(qi,a)=qj 表示 qiq_iqi 状态下 , 读取字符 aaa , 跳转到 qjq_jqj 状态 ;
2 . 自动机的 状态跳转 转换成 规则 示例 : 上图中的 确定性有限自动机 , 开始状态 AAA 读取 111 字符 转化成 BBB 状态 , 表示成规则就是
RA→1RBR_A \to 1R_BRA→1RB
3 . 自动机的状态 AAA 读取 字符 aaa 转换成另一个状态 BBB , 都可以转换成对应的规则 RA→aRBR_A \to aR_BRA→aRB ;
4 . 计算能力对比 : 上下文无关语法 的计算能力 要大于等于 自动机的计算能力 ;
【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )相关推荐
- 【计算理论】正则语言 ( 推广型的非确定性有限自动机 GNFA | 删除状态 | 确定性有限自动机 转为 正则表达式 )
文章目录 一.推广型的非确定性有限自动机 ( GNFA ) 引入 二.推广型的非确定性有限自动机 ( GNFA ) 删除状态 三.确定性有限自动机 ( DFA ) 转为 正则表达式 四.确定性有限自动 ...
- 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA | 示例 ) ★★
文章目录 一.NFA 转 DFA 示例 1 二.NFA 转 DFA 示例 2 三.NFA 转 DFA 示例 3 一.NFA 转 DFA 示例 1 将下图的 非确定性有限自动机 NFA 转为确定性有限自 ...
- 【计算理论】计算复杂性 ( 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 )
文章目录 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 在上一篇博客 [计算理论]计算复杂性 ( 非确定性 ...
- 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )
文章目录 一.非确定性自动机 计算过程 ( 计算树 ) 二.判定 非确定性自动机 接受的字符串 三.自动机 设计要求 四.非确定性有限自动机设计 五.非确定性有限自动机 与 确定性 有限自动机 比较 ...
- 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 2 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...
- 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 1 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...
- 【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★
文章目录 一.下推自动机计算过程 二.上下文无关文法 CFG 转为下推自动机 PDA 流程 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 ...
- 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA ) ★★
文章目录 一.正则表达式 二.正则语言运算示例 ★ 三.根据正则表达式构造自动机 一.正则表达式 1 . 正则表达式原子定义 : 如果 RRR 是 字符集 Σ\SigmaΣ 中的 111 个字符 , ...
- 【计算理论】上下文无关语法 CFG ( CFG 设计示例 | CFG 歧义性 | Chomsky 范式 | 上下文无关语法 转为 Chomsky 范式 )
文章目录 一.上下文无关语法 设计 示例 二.上下文无关语法 的歧义性 三.Chomsky 范式 四.上下文无关语法 转为 Chomsky 范式 五.上下文无关语法 转为 Chomsky 范式 示例 ...
最新文章
- MATLAB 2018a软件安装教程
- 【Linux网络编程】原始套接字实例:MAC 头部报文分析
- iostat -x命令诊断
- JavaScript 常用工具函数
- http://ftp.gnu.org/gnu/ http://ftp.gnu.org/gnu/libc/
- [wordpress]更新插件时,免去FTP操作
- 优秀的程序员是如何处理技术 Bug 的?
- Python编程中报过的错
- 厉害,96秒100亿,阿里双十一到底做了什么杠过亿级流量??
- 南阳理工ACM111
- 计算机视觉教程1-3:图解透视几何原理(灭点、灭线)
- Android 11 usb调试默认打开
- 关于上海四金计算和工资对照表(转载)
- 由光声前向模型求取光声信号
- 英语四六级听力真题模拟题
- 快应用如何接入微信支付
- 生活随记 - 惋惜卡哇伊
- Serdes系列总结——Xilinx serdes IP使用(二)——10G serdes
- 学前端到底哪个培训机构好?
- python网络图片下载---跟我一起爬王者农药皮肤吧