题目
给出下述文法所对应的正规式:S0A|1BA1S|1B0S|0
给出下述文法所对应的正规式:S0A|1BA1S|1B0S|0
题目解答
答案
解:把后两个产生式代入第一个产生式有:
S=01|01S
S=10|10S
有:S=01S|10S|01|10=(01|10)S|(01|10)=(01|10)*(01|10)
即:(01|10)*(01|10)为所求的正规式。
解析
考查要点:本题主要考查将上下文无关文法(CFG)转换为正规式的能力,核心在于消除非终结符并合并产生式,最终通过代数运算推导出正规式。
解题思路:
- 识别关键产生式:题目中给出的产生式包含多个分支,需通过代入或合并的方式,将非终结符的影响逐步消除。
- 合并等价分支:通过观察不同分支的结构,发现其共同规律(如以
01或10开头),将相似的分支合并为更简洁的形式。 - 应用闭包运算:利用正规式的闭包性质(如
*运算),将重复结构转化为简洁的表达式。
破题关键:
- 发现
01和10的对称性,将不同分支统一为(01|10)的模式。 - 识别重复结构,通过闭包运算将无限重复的可能包含在内。
步骤1:分析原始产生式
原文法为:
S → 0A | 1B A1S | 1B0S | 0
假设非终结符A和B的定义允许进一步简化(例如A和B可直接推导为终止符),则可将产生式简化为:
S → 0A:生成以0开头的字符串,后续由A决定。S → 1B A1S:生成以1B开头,后续包含A1S的结构。S → 1B0S:生成以1B0开头,后续接S的结构。S → 0:直接生成0。
步骤2:消除非终结符A和B
假设A和B的定义允许直接推导为终止符(例如A → ε,B → ε),则简化后:
S → 0:直接生成0。S → 01S(由S → 0A和A → ε推导)。S → 10S(由S → 1B0S和B → ε推导)。S → 10(由S → 1B0S中S终止于0的情况)。
步骤3:合并等价分支
将上述简化后的产生式合并:
S = 01S | 10S | 01 | 10- 提取公共因子
(01|10),得:
S = (01|10)S | (01|10)
步骤4:应用闭包运算
根据正规式规则,X = XY | X等价于X = X*Y,因此:
- *`S = (01|10)(01|10)`**