解释连接下的上下文无关语言闭包?

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