在上下文无关文法(CFG)中,可能出现所有符号都不需要进行推导的情况。另外,文法中可能含有空产生式(null production)和单产生式(unit production)。消除这些产生式和符号,就叫 CFG化简 。化简本质上包含以下步骤:CFG规约
去除单产生式
去除空产生式
规约文法
文法用两个周期来规约
Phase 1 - 从文法 G 推导等价文法 G' , 每个变量导出一些终结符号。(从开始符号开始推导)推导过程
Step 1 - 包含所有符号 W1,并初始化 i=1 。
Step 2 - 包含可以导出 Wi 的所有符号 Wi+1 。
Step 3 - 重复 Step 2,直到 Wi+1 = Wi 。
Step 4 - 包含所有的含有 Wi 的产生式规则。
Phase 2 - 从文法 G' 推导等价文法 G'',对于每个出现在句法形式的符号。推导过程
Step 1 - 包含所有符号 Y1,并初始化 i=1 。
Step 2 - 包含可以从 Yi 导出的所有符号 Yi+1 ,并包含应用的所有产生式。
Step 3 - 增加 i , 重复 Step 2 ,直到 **Yi+1 = Yi 。
问题
找到一个规约后的等价文法G,包含以下产生式: P: 小写是终结符号。
S -> AC | B
A -> a
C -> c | BC
E -> aA | e
解决
Phase 1T = { a, c, e}