Answers:
确实,有一个简单的技巧可以让您在某个位置添加额外的信息:只需替换该位置旁边的字母,并用信息和原始字母标记即可。
在您的示例中,中间有一个非终结符,但由于不能删除,因此也算作普通字母。因此,我们有两个副本M a和M b表示被替换的字母。在推导的最后,标记应替换为字母内容,并使用简单的生成方式(如M a → a)替换。
在大多数情况下,需要在推导过程结束时执行的应用。在某些构造中,这不需要“计时”:当M消失太早时,推导找不到合适的位置,并且该过程也不会成功停止。在其他情况下,确实需要一种控制。有时可以通过引入非终结符作为沿字母移动的信号来完成此操作。同样,此信号还应带有一个端子,否则您将遇到相同的问题。
围绕移动信息容易在所谓的单调文法(与| α | ≤ β |使用如规则)X 甲→ 甲X,这可以看作是X的跳跃过甲。对于适当的上下文相关语法,需要将其分为三个步骤:X A → X A X,X A X → A A X,A A X → A X。在每个作品中,在适当的上下文中更改一个字母。看到这个过程与推导的其他部分不相互作用,需要花费大量的想象力。例如,当最后一步中的首先涉及另一个推导步骤时,会发生什么?
当信息多于可用职位时,这可能不适用于简短的单词。最简单的解决方案是忽略构造中的短字符串,并分别生成它们。
简短的默认答案:提供一个接受该语言的LBA,并使用模拟来证明上下文相关语法和LBA定义了相同的语言集。但这当然不是你所追求的。
在这种特定情况下,尝试考虑对使用一次右线性语法,一次对左,另一半对右。您所要做的就是确保两个语法都“同步”派生。
这可以通过在控制令牌周围交换来完成。也就是说,左语法选择一个规则,生成拟合控制令牌并将其传递给右语法。正确的语法查看控制标记并执行拟合规则。请注意,您也可以通过这种方式实现双向通信,但是这里没有必要。
上下文相关的语法有一个问题:它们永远不能删除非终结符(如果语言中有空单词,则除外)。因此,我们只需要创建所需数量的非终端即可;没有一个可以是多余的。
实现这一目标的方法之一是使用相同的伎俩约LBA某些证明:产生你将需要所有非终端的第一,即准备“磁带”。稍后,在该磁带上“四处移动”。仅在“末尾”,将所有非端子替换为端子。
因此,让其中Σ = { a ,b }(结构很容易扩展到更大的字母),而N,δ由以下规则给出。
是用于产生“带”的规则。注意,帽子表示“头部位置”,而索引l,r表示非终结符属于单词的哪一半。因此,为了保护下面的某些规则,会生成简短的单词。现在我们需要规则以在左侧导出一个符号:
对于所有(α,γ)∈Σ
。注意我们如何使用较高的索引将生成的符号带到右侧。X a和 X b是“最终的”非终端,将仅用于在周围移动控制令牌并稍后派生终端。此外请注意,第二个规则(仅)用于右半部分的最后一个符号。 对于随身携带移动到右前卫,我们要搬过去两个剩余 X 升和已经产生的 X α:
对于所有(α,β,γ)∈Σ3。现在,一旦进位到达右侧控制令牌,我们就必须模仿左侧使用的规则:
为所有(α,γ)∈Σ2。请注意,第一个规则用于右半部分的第一个符号,而最后一个规则只能用于最后一个符号,否则推导永远不会终止。现在我们只需要终止规则
所有 α ∈ Σ而我们正在这样做。这些规则也只能在完成所有操作后(左侧)才能应用,否则派生将不会终止。 请注意,这种语法是模棱两可的。不仅可以能 X α →交通α(安全)在任何地方应用到左左“头”在任何时间,但也可以有多个同时进行携带。由于它们永远无法超越对方,因此可以维持正确的顺序。 此言一,必须仍然取得了:上面的语法是不是上下文相关的许多规则的变化都
左侧的符号。上下文相关的语法不允许这样做。幸运的是,我们可以模拟形式的任何规则
由
所以我们很好,可以使用较小的语法。练习表明,多个这样的模拟之间的干扰不会造成伤害。