解释上下文无关语言在并集运算下的闭包?
如果 L1 和 L2 是 CFL,那么它们的并集 L1 + L2 是一个 CFL。这里 CFL 指的是上下文无关语言。
L1 CFL 意味着 L1 有一个 CFG,设其为 CFG1,它生成它。
假设 CFG1 中的非终结符是 S、A、B、C、…
将 CFG1 中的非终结符更改为 S1、A1、B1、C1、…
不要更改 CFG1 中的终结符。
L2 CFL 意味着 L2 有一个 CFG,设其为 CFG2,它生成它。
假设 CFG2 中的非终结符是 S、A、B、C、…
将 CFG2 中的非终结符更改为 S2、A2、B2、C2、…
不要更改 CFG2 中的终结符。
现在 CFG1 和 CFG2 具有不相交的非终结符集。
我们为 L1 + L2 创建一个 CFG,如下所示 -
包含所有非终结符 S1、A1、B1、C1、… 和 S2、A2、B2、C2、…
包含 CFG1 和 CFG2 的所有产生式。
创建一个新的非终结符 S 和一个产生式。
S → S1 | S2
示例
CFG1 for L1 S → S | Aa | Bb | ∧ A → Sa | bB | ab B → S | a CFG2 for L2 S → aS | aA | Bb | ∧ A → aS |bB| ab B → Ba | b
要为 L1 + L2 构造 CFG,请按照以下步骤操作 -
如下转换 CFG1 -
S1 → S1| A1a | B1b | ∧ A1 → S1a | bB1 | ab B1 → S1 | a
如下转换 CFG2
S2 → aS2 | aA2 | B2b | ∧ A2 → aS2 |bB2| ab B2 → B2a | b
如下为 L1 + L2 构造 CFG -
S → S1 | S2 S1 → S1| A1a | B1b | ∧ A1 → S1a | bB1 | ab B1 → S1 | a S2 → aS2 | aA2 | B2b | ∧ A2 → aS2 |bB2| ab B2 → B2a | b
广告