这里 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