文章目录
参考博客 :
一、乔姆斯基范式
1 . Chomsky 范式 : 上下文无关语法中的任何规则都是如下 格式 ;
① 单个变元到
个变元
:
是 变元 ,
也是变元 ;
② 单个变元到常元
:
是 变元 ,
是常元 ,
可以被终端字符替换 ;
③
变元要求 :
变元一定不能是开始变元 ;
④
:
开始变元可以为空 ;
⑤ 不能出现
单个变元 到 单个变元不允许出现 ;
2 .
规则 说明 :
① 语言包含空字符串 : 如果上下文无关语法包含空字符串时 , 一定 需要
规则 ;
② 语言不包含空字符串 : 如果上下文无关语法不包含空字符串时 , 一定 不需要
规则 ;
③ 规则总结 : 该规则决定 上下文无关语法 所生成的语言 是否包含 空字符串 ; 如果包含 , 必须要这个规则 ; 如果不包含 , 空字符串一定不要这个规则 ;
二、上下文无关语法转为乔姆斯基范式步骤
上下文无关语法转为乔姆斯基范式步骤 :
1 . 添加开始变元及规则 : 添加一个新的 开始变元
, 以及配套的规则
,
是旧的开始变元 ;
① 目的 : 添加开始变元的目的是 开始变元 永远出现在左边 ;
② Chomsky 范式 中 , 开始变元始终在规则的左边 , 不允许开始变元在规则的右侧 ;
③ 对应 Chomsky 范式 规则 :
规则 ,
是 变元 ,
也是变元 , 并且
不允许是开始变元 ;
2 . 消除所有的
规则 : 消除所有 从 变元 到 空字符 的规则 ;
3 . 消除所有的
规则 : 消除所有 从 单个变元 到 单个变元的 单条规则 , 允许从 单个变元 到 多个变元或常元 ; 如 :
是需要删除的 ,
可以保留 ;
4 . 添加变元 : 将
规则 , 转为
规则 , 添加变元
;
三、上下文无关语法转为乔姆斯基范式示例1
将 上下文无关语法 转为 Chomsky 范式 :
1 . 添加新的开始变元 :
;
2 . 消除
规则 : 根据消除前后等价原则 , 重新构造含有
的规则 ; 消除
, 即在对应的含有
的规则中添加
为空的情况 ,
如果
为空就是
,
如果
为空就是
;
3 . 消除
规则 : 根据消除前后等价原则 , 重新构造含有
的规则 ; 消除
, 即在对应的含有
的规则中添加
为空的情况 ,
如果
为空就产生
三种 ( 考虑不同
为空的情况 ) ;
4 . 消除
规则 : 找
出现在左边的情况 , 发现有
规则 , 直接使用
替换
规则 ; ( 注意 :
规则 不变 )
5 . 消除
规则 : 找
出现在左边的情况 , 发现有
, 使用
, 替换
; ( 注意 :
规则不变 )
6 . 添加变元 : 添加新规则
;
四、上下文无关语法转为乔姆斯基范式示例 2
将 上下文无关语法转为 Chomsky 范式 :
1 . 添加新的开始变元 :
;
2 . 消除
规则 : 根据消除前后等价原则 , 重新构造含有
的规则 , 即添加使用
替换
的各种情况 , 如 :
, 替换
个
两种情况 , 替换
个
一种情况 ;
3 . 消除
规则 : 根据消除前后等价原则 , 重新构造含有
的规则 , 如 :
如果
为空 就是
,
如果
为空 , 多出一个
;
4 . 消除
规则 : 找
出现在左边的情况 , 发现有
规则 , 直接使用
规则 替换
规则 ; ( 注意 :
规则 不变 )
5 . 消除
规则 : 找
出现在左边的情况 , 发现有
规则 , 直接使用
规则 替换
规则 ; ( 注意
规则 规则不变 )
6 . 添加变元 : 添加新规则
; 目的是使用
个变元的规则替换
个变元的规则 ;
7 . 添加变元 : 添加新规则
; 目的是将
中的
个终端字符转为两个变元 ;