链接: https://www.tutorialspoint.com/automata_theory/chomsky_normal_form.htm
CFG(Chomsky Normal Form),乔姆斯基规范形式, 具有以下形式:
A -> a
A -> BC
S -> ε
小写字母表示终结符号,大写表示非终结符。
产生式的体要么由单个终结符号或者ε构成,要么由两个非终结符构成。
规范形式变换算法
Step 1 - 如果开始符 S 出现在产生式的右侧 创建一个新符号
S' -> S 。
Step 2 - 去除掉空产生式。
Step 3 - 去除掉单产生式。
Step 4 - 替换每个产生式 A -> B1...Bn 对 n > 2 变换成 A -> B1C C -> B2...Bn 。重复此过程,直到最后。
Step 5 - 产生式右侧的终结符号 A -> aB , 替换为 A -> XB , X -> a , 重复此过程,直到替换掉全部终结符号。
问题
转换以下文法到规范形式:
S → ASA | aB
A → B | S
B → b | ε
解决
(1) 因为 S 出现在右侧 S -> ASA
,所以我们添加 S0 ,S0 -> S。
S0 → S, S→ ASA | aB, A → B | S, B → b | ε
(2) 现在去除空产生式
B → ε , A → ε
去掉 B → ε 后,
S0 → S, S → ASA | aB | a, A → B | S | ε, B → b
去掉 A → ε 后,
S0 →S, S→ ASA | aB | a | AS | SA | S, A → B | S, B → b
(3) 现在我们去除单产生式:
去掉 S → S:
S0 → S
S → ASA | aB | a | AS | SA
A → B | S
B → b
去掉 S0→ S
S0 → ASA | aB | a | AS | SA
S → ASA | aB | a | AS | SA
A → B | S
B → b
去掉 A→ B:
S0 → ASA | aB | a | AS | SA
S → ASA | aB | a | AS | SA
A → S | b
B → b
去掉 A→ S
S0 → ASA | aB | a | AS | SA
S → ASA | aB | a | AS | SA
A → b |ASA | aB | a | AS | SA
B → b
(4) 现在变换多于两个变量的右侧
这里 S0→ ASA, S → ASA, A→ ASA 都是
变换后:
S0 → AX | aB | a | AS | SA
S → AX | aB | a | AS | SA
A → b |AX | aB | a | AS | SA
B → b
X → SA
(5) 我们最后将终结符组合产生式S0→ aB, S→ aB, A→ aB替换:
S0 → AX | YB | a | AS | SA
S → AX | YB | a | AS | SA
A → b A → b |AX | YB | a | AS | SA
B → b
X → SA
Y → a
网友评论