与自身连接的单词语言的上下文相关语法


9

我在寻找一个描述以下语言的上下文敏感语法: L={www{一个b}|w|1个}

我遇到这样的问题,即不允许使用类的规则,因此我不能放置任何非终结符来表示单词的“中间”。这个问题有招吗?Xε


1
无聊的答案:制定一个LBA并应用用于证明LBA和上下文相关语法同样强大的模拟。
拉斐尔

Answers:


6

确实,有一个简单的技巧可以让您在某个位置添加额外的信息:只需替换该位置旁边的字母,并用信息和原始字母标记即可。

在您的示例中,中间有一个非终结符,但由于不能删除,因此也算作普通字母。因此,我们有两个副本M aM b表示被替换的字母。在推导的最后,标记应替换为字母内容,并使用简单的生成方式(如M aa)替换。中号中号一个MbMaa

在大多数情况下,需要在推导过程结束时执行的应用。在某些构造中,这不需要“计时”:当M消失太早时,推导找不到合适的位置,并且该过程也不会成功停止。在其他情况下,确实需要一种控制。有时可以通过引入非终结符作为沿字母移动的信号来完成此操作。同样,此信号还应带有一个端子,否则您将遇到相同的问题。MaaM

围绕移动信息容易在所谓的单调文法| α |β |使用如规则)X X,这可以看作是X的跳跃过。对于适当的上下文相关语法,需要将其分为三个步骤:X A X A XX A XA A XA A XA Xαβ|α|β|XAAXXAXAXAX,XAXAAX,AAXAX。在每个作品中,在适当的上下文中更改一个字母。看到这个过程与推导的其他部分不相互作用,需要花费大量的想象力。例如,当最后一步中的首先涉及另一个推导步骤时,会发生什么?A

当信息多于可用职位时,这可能不适用于简短的单词。最简单的解决方案是忽略构造中的短字符串,并分别生成它们。


是否不要求以一定的顺序查看生产的产品,以便在将非末端重新排列到末尾之前不使用Ma→a?还是我错过了什么?
MrBolton

我在回答中对此添加了注释。在某些解决方案中,过早应用这种生产将导致无法成功完成的句子形式。在其他情况下,必须仔细同步生产。常识和反复试验的问题。
Hendrik 2013年1

1

简短的默认答案:提供一个接受该语言的LBA,并使用模拟来证明上下文相关语法和LBA定义了相同的语言集。但这当然不是你所追求的。

在这种特定情况下,尝试考虑对使用一次右线性语法,一次对左,另一半对右。您所要做的就是确保两个语法都“同步”派生。Σ

这可以通过在控制令牌周围交换来完成。也就是说,左语法选择一个规则,生成拟合控制令牌并将其传递给右语法。正确的语法查看控制标记并执行拟合规则。请注意,您也可以通过这种方式实现双向通信,但是这里没有必要。

上下文相关的语法有一个问题:它们永远不能删除非终结符(如果语言中有空单词,则除外)。因此,我们只需要创建所需数量的非终端即可;没有一个可以是多余的。Sε

实现这一目标的方法之一是使用相同的伎俩约LBA某些证明:产生你将需要所有非终端的第一,即准备“磁带”。稍后,在该磁带上“四处移动”。仅在“末尾”,将所有非端子替换为端子。

因此,让其中Σ = { a b }(结构很容易扩展到更大的字母),而Nδ由以下规则给出。G=(N,Σ,δ,S)Σ={a,b}Nδ

是用于产生“带”的规则。注意,帽子表示“头部位置”,而索引lr表示非终结符属于单词的哪一半。因此,为了保护下面的某些规则,会生成简短的单词。现在我们需要规则以在左侧导出一个符号:SX^lSXraaaaababbababbbbaabbεSXlSXrXlX^r

l,r

对于所有αγ∈ΣX^lXlXγX^lγX^lXαXγXαγ

。注意我们如何使用较高的索引将生成的符号带到右侧。X a X b是“最终的”非终端,将仅用于在周围移动控制令牌并稍后派生终端。此外请注意,第二个规则(仅)用于右半部分的最后一个符号。 对于随身携带移动到右前卫,我们要搬过去两个剩余 X 和已经产生的 X α(α,γ)Σ2XaXb

XlXα

对于所有αβγ∈Σ3。现在,一旦进位到达右侧控制令牌,我们就必须模仿左侧使用的规则:X^lγXlX^lXlγX^lγXαX^lXαγXlγXlXlXlγXlγXαXlXαγXαγXβXαXβγ

(α,β,γ)Σ3

为所有αγ∈Σ2。请注意,第一个规则用于右半部分的第一个符号,而最后一个规则只能用于最后一个符号,否则推导永远不会终止。现在我们只需要终止规则XlγX^rXlX^rγXαγX^rXαX^rγX^rγXrXγX^rX^rγXγ

(α,γ)Σ2

所有 α ∈ Σ而我们正在这样做。这些规则也只能在完成所有操作后(左侧)才能应用,否则派生将不会终止。 请注意,这种语法是模棱两可的。不仅可以能 X α →交通α(安全)在任何地方应用到左左“头”在任何时间,但也可以有多个同时进行携带。由于它们永远无法超越对方,因此可以维持正确的顺序。 此言一,必须仍然取得了:上面的语法是不是上下文相关的许多规则的变化Xαα

αΣ

Xαα

左侧的符号。上下文相关的语法不允许这样做。幸运的是,我们可以模拟形式的任何规则R

ABCD



所以我们很好,可以使用较小的语法。练习表明,多个这样的模拟之间的干扰不会造成伤害。ABAYRAYRXRYRXRYRXRDXRDCD

Lk={wkwΣ}L=i1LkLkL


0

X

w|w|1ε

aXaaa,  aXbab,  bXaba,  bXbbb

w


但是,使用@ hendrik-jan的方法可以为您节省两条规则。
Rmn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.