解释上下文无关语言在连接运算下的封闭性?
这里 CFL 指的是上下文无关语言。现在,让我们了解一下在连接运算下的封闭性。
连接运算下的封闭性
如果 L1 和 L2 是 CFL,则 L1L2 是 CFL。
按照以下步骤操作:
L1 CFL 意味着 L1 有一个 CFG1 生成它。
假设 CFG1 中的非终结符是 S、A、B、C……
将 CFG1 中的非终结符更改为 S1、A1、B1、C1……
不要更改 CFG1 中的终结符。
L2 CFL 意味着 L2 有一个 CFG2 生成它。
假设 CFG2 中的非终结符是 S、A、B、C……
将 CFG2 中的非终结符更改为 S2、A2、B2、C2……
不要更改 CFG2 中的终结符。
现在 CFG1 和 CFG2 具有不相交的非终结符集合。
然后我们为 L1L2 创建 CFG,如下所示:
包含所有非终结符 S1、A1、B1、C1……和 S2、A2、B2、C2……
包含 CFG1 和 CFG2 的所有产生式。
创建一个新的非终结符 S 和一个产生式
S → S1S2
示例
CFG1 for L1 S → SS | TaTb |FFF | ∧ T → SaS | bFb | abba F → SSS | baab CFG2 for L2 S → aS | aTba | FbF | ∧ T → aSa | abab F → FabaF | bb
要为 L1L2 构造 CFG,请按照以下步骤操作:
转换 CFG1
S1 → S1S1 | T1aT1b | F1F1F1 | ∧ T1 → S1aS1 | bF1b | abba F1 → S1S1S1 | baab
转换 CFG2
S2 → aS2 | aT2ba | F2bF2 | ∧ T2 → aS2a | abab F2 → F2abaF2 | bb
为 L1L2 构造 CFG:
S → S1S2 S1 → S1S1 | T1aT1b | F1F1F1 | ∧ T1 → S1aS1 | bF1b | abba F1 → S1S1S1 | baab S2 → aS2 | aT2ba | F2bF2 | ∧ T2 → aS2a | abab F2 → F2abaF2 | bb
广告