【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )
文章目录
- I . 语法组成
- II . 规则
- III . 语法
- IV . 语法示例
- V . 语法简写形式
- VI . 语法分析树
- VII . 代数表达式 语法
I . 语法组成
上下文无关语法 组成 : 由 {V,Σ,R,S}\{ \quad V , \Sigma , R , S \quad \}{V,Σ,R,S} 四部分组成 ;
变量集 VVV : 有限的变量集合 ;
终端字符集 Σ\SigmaΣ : 有限的终端字符组成的集合 ; 相当于常量的含义 , 与变量相对 ;
规则集 RRR : 有限的规则组成的集合 , 规则规定如何进行代换操作 , 规定 变量 , 终端字符 , 字符串变量 等 ;
开始变量 SSS : 该变量作为开始变量 ;
II . 规则
规则 简介 :
① 已知条件 : 假设 u,v,wu, v , wu,v,w 是 变量 ( 变元 ) 或 终端字符集 ( 常量 / 常元 ) ;
② 规则描述 : 规则是一个箭头 , A→wA \to wA→w , AAA 是变元 , www 是 变元 和 常元 组成的终端字符 ;
③ 规则用法 : 在字符串中 , 根据 A→wA \to wA→w 规则进行替换 , 只需要将 AAA 变元替换成 www 字符串即可 ;
④ 规则示例 : uAvuAvuAv 中使用上述规则进行替换 , 将 AAA 替换成 www , 替换结果是得到新字符串 uwvuwvuwv ;
uAv⇒uwvuAv \Rightarrow uwvuAv⇒uwv
III . 语法
1 . 有限次规则替换 : u⇒∗vu \Rightarrow *vu⇒∗v 表示有限多次替换后 , 每一步替换的临时结果序列组成集合 {u1,u2,⋯,uk}\{u_1 , u_2 , \cdots , u_k\}{u1,u2,⋯,uk} , 最终结果是 终端字符 ;
2 . 有限次规则替换 步骤 :
- uuu 根据某规则进行替换得到 u1u_1u1 ;
- u1u_1u1 根据某规则进行替换得到 u2u_2u2 ;
- ⋮\vdots⋮
- uku_kuk 根据某规则进行替换得到 vvv ;
3 . 最终规则替换结果要求 : vvv 中不包含变元 , 全部由 终端字符 ( 常元 ) 组成的 字符串 ;
vvv 是由 uuu 生成的 ;
4 . 语法定义 : 从开始变元 , 使用规则逐步替换 , 替换到最后 , 将所有 终端字符组成字符串 放在一个集合中 , 称为语法生成的语言 ;
L(G)={w∈Σ∗:S⇒∗w}L(G) = \{ w \in \Sigma^* : S \Rightarrow *w \}L(G)={w∈Σ∗:S⇒∗w}
IV . 语法示例
1 . 语法组成部分 : G3=({S},{a,b},R,S)G3 =( \; \{ S \}, \{ a, b \}, R , S \; )G3=({S},{a,b},R,S) 其组成如下 :
变量集 {S}\{ S \}{S} ;
终端字符集 {a,b}\{ a, b \}{a,b} ;
规则 RRR ;
开始变量 SSS ;
2 . 规则 RRR 描述 :
S→aSb∣SS∣εS \to aSb \; | \; SS \; | \; \varepsilonS→aSb∣SS∣ε
- SSS 变量 可以使用 aSbaSbaSb 字符串替换 ;
- SSS 变量 可以使用 SSSSSS 字符串替换 ;
- SSS 变量 可以使用 ε\varepsilonε 字符串替换 ;
3 . 规则替换过程 :
① SSS 是开始变量 , 可以使用 aSbaSbaSb 替换 :
S⇒aSbS \Rightarrow aSbS⇒aSb
② 使用 aSbaSbaSb 替换 SSS :
S⇒aSb⇒aaSbbS \Rightarrow aSb \Rightarrow aaSbbS⇒aSb⇒aaSbb
③ 使用 SSSSSS 替换 SSS :
S⇒aSb⇒aaSbb⇒aaSSbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbbS⇒aSb⇒aaSbb⇒aaSSbb
④ 使用 aSbaSbaSb 替换第一个 SSS :
S⇒aSb⇒aaSbb⇒aaSSbb⇒aaaSbSbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbbS⇒aSb⇒aaSbb⇒aaSSbb⇒aaaSbSbb
⑤ 使用 ε\varepsilonε 替换第一个 SSS :
S⇒aSb⇒aaSbb⇒aaSSbb⇒aaaSbSbb⇒aaabSbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbbS⇒aSb⇒aaSbb⇒aaSSbb⇒aaaSbSbb⇒aaabSbb
⑥ 使用 aSbaSbaSb 替换 SSS :
S⇒aSb⇒aaSbb⇒aaSSbb⇒aaaSbSbb⇒aaabSbb⇒aaabaSbbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbb \Rightarrow aaabaSbbbS⇒aSb⇒aaSbb⇒aaSSbb⇒aaaSbSbb⇒aaabSbb⇒aaabaSbbb
⑦ 使用 ε\varepsilonε 替换 SSS :
S⇒aSb⇒aaSbb⇒aaSSbb⇒aaaSbSbb⇒aaabSbb⇒aaabaSbbb⇒aaababbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbb \Rightarrow aaabaSbbb \Rightarrow aaababbbS⇒aSb⇒aaSbb⇒aaSSbb⇒aaaSbSbb⇒aaabSbb⇒aaabaSbbb⇒aaababbb
最终得到 aaababbbaaababbbaaababbb 字符串 , 该字符串全部由终端字符构成 , 是从 SSS 开始状态出发 , 按照 RRR 规则替换得来的 ;
称该字符串由 语法 G3G3G3 生成的 ;
V . 语法简写形式
语法可以使用下面的形式简单表示 , 没有必要使用繁琐的形式 , 可以使用约定的简写形式 ;
约定写法 :
- A→0A1A \to 0A1A→0A1
- A→BA \to BA→B
- B→lB \to lB→l
开始状态约定 : 左上方的变元 AAA 约定是 开始变元 ;
变元约定 : 大写字母 A,BA,BA,B 约定为 变元 ;
终端字符约定 : 小写字母 约定为 终端字符 ;
VI . 语法分析树
语法分析树 : 字符串生成的过程 , 可以写成语法分析树 ;
将上述 简写的 约定语法描述 , 生成 终端字符构成的字符串 ;
1 . 开始状态 : AAA , 使用 0A10A10A1 替换 AAA ;
A⇒0A1A \Rightarrow 0A1A⇒0A1
当前语法分析树 :
2 . 使用 0A10A10A1 替换 AAA ;
A⇒0A1⇒00A11A \Rightarrow 0A1 \Rightarrow 00A11A⇒0A1⇒00A11
当前语法分析树 :
3 . 使用 0A10A10A1 替换 AAA ;
A⇒0A1⇒00A11⇒000A111A \Rightarrow 0A1 \Rightarrow 00A11 \Rightarrow 000A111A⇒0A1⇒00A11⇒000A111
当前语法分析树 :
4 . 使用 BBB 替换 AAA ;
A⇒0A1⇒00A11⇒000A111⇒000B111A \Rightarrow 0A1 \Rightarrow 00A11 \Rightarrow 000A111 \Rightarrow 000B111A⇒0A1⇒00A11⇒000A111⇒000B111
当前语法分析树 :
5 . 使用 lll 替换 BBB ;
A⇒0A1⇒00A11⇒000A111⇒000B111⇒000l111A \Rightarrow 0A1 \Rightarrow 00A11 \Rightarrow 000A111 \Rightarrow 000B111 \Rightarrow 000l111A⇒0A1⇒00A11⇒000A111⇒000B111⇒000l111
当前语法分析树 :
6 . 最终得到的字符串为 000l111000l111000l111 ;
VII . 代数表达式 语法
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 | TermExpression→Expression+Term∣Term
ExpressionExpressionExpression ( 表达式 ) 可以通过 Expression+Term∣TermExpression + Term | TermExpression+Term∣Term 代替 ;
3 . TermTermTerm 项 规则 :
Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor
TermTermTerm 项 可以通过 Term×Factor∣FactorTerm \times Factor | FactorTerm×Factor∣Factor 代替 ;
4 . FactorFactorFactor 因子 规则 :
Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a
FactorFactorFactor 因子 可以通过 Expression∣aExpression | aExpression∣a 代替 ;
【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )相关推荐
- 【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★
文章目录 一.下推自动机计算过程 二.上下文无关文法 CFG 转为下推自动机 PDA 流程 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 ...
- 【计算理论】自动机设计 ( 设计自动机 | 确定性自动机设计示例 | 确定性与非确定性 | 自动机中的不确定性 )
文章目录 一. 设计自动机 ( 语言要求 ) 二. 设计自动机 ( 1 ) 开始状态 三. 设计自动机 ( 2 ) 状态 SSS 状态类型确定 四. 设计自动机 ( 3 ) 状态 SSS 输入输出分析 ...
- 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 2 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...
- 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 1 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...
- 【计算理论】计算复杂性 ( 阶段总结 | 计算理论内容概览 | 计算问题的有效性 | 语言与算法模型 | 可计算性与可判定性 | 可判定性与有效性 | 语言分类 ) ★
文章目录 一.计算理论内容概览 二.计算问题的 有效性 三.语言 与 算法模型 四.可计算性 与 可判定性 五.可判定性 与 有效性 六.语言分类 一.计算理论内容概览 计算理论分为 形式语言与自动机 ...
- 【计算理论】可判定性 ( 通用图灵机和停机问题 | 可判定性 与 可计算性 | 语言 与 算法模型 )
文章目录 一.通用图灵机和停机问题 二.可判定性 与 可计算性 三.语言 与 算法模型 一.通用图灵机和停机问题 利用 图灵 的结论 , 证明 有哪些 计算问题 是找不到 算法 进行判定的 ; 如 停 ...
- 《编译原理》-3.上下文无关文法及分析
上下文无关文法及分析 3.1 分析过程 3.2 上下文无关文法 3.2.1 与正则表达式的比较 3.2.2 上下文无关文法规则的说明 3.2.3 推导及由文法定义的语言 3.3 分析树与抽象语法树 3 ...
- 上下文无关问法cfg
上下文无关文法(context free grammar,简称为CFG)是形式问法的一种,和其对应的语言是上下文无关语言.所谓上下文无关,如果用我们的语言举例,就是一个文法符号,不论在 ...
- lr 1 语法分析器c语言,LR语法分析器
1 LR语法分析器 本节介绍一个有效的自底向上的分析技术,可以用于一大类上下文无关文法的语法分析.这种技术叫做LR(k)分析法,其中L表示从左到右扫描输入串,R表示构造一个最右推导的逆过程,k指的是在 ...
最新文章
- R绘制QQ图并解读QQ图
- 七十四、滑动窗口最值问题
- 知识图谱有哪些方向是可以深入研究的?
- SAP UI5应用的一个调试参数 - sap-ds-debug=true
- VCSA 6.5 HA配置 之四 开启vCenter HA
- 整理搜集iOS不同版本间的介绍
- 【学习】03 淘宝爬虫-使用selenium采集关键词为电动车的数据
- map和foreach的区别和应用场景_面试官:说说UDP和TCP的区别及应用场景
- 手机哪个软件可以远程控制服务器,手机远程有什么功能?手机远程协助软件哪个好?...
- 安卓编程入门 06 开始接触后台代码
- w10系统asp服务器搭建,在windows10系统下搭建asp环境的方法
- c语言实验报告评语大全,实验报告总结
- python的csv安装_Python csv模块:处理csv文件
- 基于MATLAB的烟雾火灾检测识别系统
- android 拍照,图库,相册,上传
- spark task 任务状态管理
- Windows DNS服务器策略
- 红外热释电处理芯片 BISS0001
- 2021年必会的3个Kubernetes工具
- 使用Element UI 开发页面遇到的问题之下拉菜单支持拼音缩写查询