与上下文无关的语法的前后集是否始终与上下文无关?


14

G为上下文无关的语法。如果您可以通过将次数乘以零或多次到的开始符号上来获得的一串和的句子,则可以说它是一种句法形式。让是该组中的句型。GGGSSF(G)G

让,并让是的一个子 -我们称之为一个片段的。现在让αSF(G)βαβSF(G)

Before(β)={γ | δ.γβδSF(G)}

After(β)={δ | γ.γβδSF(G)}

是和上下文无关语言?如果不含歧义怎么办?如果明确,是否也可以使用明确的上下文无关语言来描述和吗?Before(β)After(β)GGBefore(β)After(β)

这是一个后续到我先前的问题,后一个较早的尝试,使我的问题比较容易回答失败。否定的答案将使我正在研究的总体问题很难回答。

Answers:


8

首先让我们对“ 和“ 之后” β 有所了解。考虑一个包含β的推导树;这里的“包含”意味着您可以切除子树,以使β是树前的子词。然后,之前(之后)集合是树的β的左(右)部分的所有潜在前沿:Before(β)After(β)βββ

tree with before and after sets
[ 来源 ]

因此,我们必须为树的水平线(垂直线)部分建立语法。这似乎很容易,因为我们已经对整棵树有了语法。我们只需要确保所有的句子形式都是单词(更改字母),过滤掉不包含那些词(因为β是固定的,这是常规性质),并删去β之后(之前)的所有内容,包括β。这种切割也应该是可能的。ββββ


现在要正式证明。我们将按照概述的方式转换语法,并使用闭包属性进行过滤和剪切,即,我们将执行非构造性证明。CFL

为上下文无关文法。不难发现SF G 是上下文无关的;构造G ' = N 'T 'δ 'N S像这样:G=(N,T,δ,S)SF(G)G=(N,T,δ,NS)

  • N={NAAN}
  • T=NT
  • δ={α(A)α(β)Aβδ}{NAAAN}

用于所有Ťα = Ñ 所有一个Ñ。显然LG '= SF G ; 因此相应的前缀闭包Pref SF G 和后缀闭包Suff SF G 也是上下文无关的¹。α(t)=ttTα(A)=NAaNL(G)=SF(G)Pref(SF(G))Suff(SF(G))

现在,对于任何大号β Ñ Ť *大号Ñ Ť * β 正则语言。由于C F L在使用常规语言的交集和右/左商下是封闭的,因此我们得到β(NT)L(β(NT))L((NT)β)CFL

Before(β)=(Pref(SF(G))  L((NT)β))/βCFL

After(β)=(Suff(SF(G))  L(β(NT)))βCFL


¹ 下右(左)商关闭 ; Pref L = L / Σ ,对于Suff产量前缀表示类似。后缀关闭。CFLPref(L)=L/ΣSuff


我开始写一个答案,然后意识到我的证明和你的一样。我不得不把它这种方式(压缩,以适应这里):形成文法加入了新的终端(一metavariable)为每个非终端和一生产一个。然后的句型ģ是通过所识别的词语ģ即由元变量的。这是CFG与常规语言的交集,因此是常规的。CFG的前缀集是CFG(使用PDA并使每个状态都变为最终状态)。Ë ˚F ø - [R Èγ =GA^AAA^GG又是一个CFG。Before(γ)={γγβL(Prefix(G^))}
吉尔(Gilles)'所以

1
@Gilles,对此有3条评论:1)句子形式通常(正确地)包含语言。2)“使每个州都处于最终状态”-无效;您还将接受非单词的前缀。3)严格切断“后缀”的最后一步似乎很棘手。:/您是否有比我更严格但更紧凑的证明?
拉斐尔

1)无关紧要(将更改为每个端子都具有一个非端子)。2)糟糕,我切断得太多了:将可以到达最终状态的每个状态都设为最终状态。3)一次在一个终端b上执行一次;在PDA中,通过将b改为final来标记可以从其达到最终状态的状态。是的,要使其更加严格,还需要更多扩展。Gbb
吉尔(Gilles)“所以

9

是的,Afterβ 是上下文无关的语言。这就是我要证明的方式。首先,引理(症结)。如果L为CF,则:Before(β)After(β)L

Before(L,β)={γ | δ.γβδL}

After(L,β)={γ | δ.δβγL}

是CF。

证明?对于构造一个非确定性有限状态变换器Ť β该扫描一个字符串,输出它看到每个输入符号,并且同时搜索非确定性为β。每当Ť β看到的第一个符号β它fork非确定性,并停止输出符号,直到它完成看到β或它看到看到一个符号,从偏离β,在任一情况下停止。如果牛逼β看到βBefore(L,β)TββTββββTββ完全,它在停止时接受,这是它唯一的接受方式。如果看到与的偏差,则拒绝。β

引理可以jiggered处理情况下,可以与自身重叠(如一个b b -不断寻找β即使在扫描之中的前β)或出现多次(实际上,原非determinisic分叉已经可以解决这个问题)。 βababββ

这是相当明显,,并且由于紧凑型荧光灯的下有限状态转导闭合时,大号β 因此是CF. Tβ(L)=Before(L,β)Before(L,β)

也可以使用类似的参数,也可以使用BeforeL β )中的字符串反转来完成,CFL也可以在反转时关闭:After(L,β)Before(L,β)

After(L,β)=rev(Before(rev(L),rev(β)))

实际上,现在我看到了逆向参数,从开始会更容易,因为用于此的转换器更易于描述和验证-在寻找β的同时输出空字符串。当找到β时,它将不确定地进行分叉,一个分叉继续寻找β的其他副本,另一个分叉从输入到输出逐字复制所有后续字符,并一直接受。After(L,β)βββ

What remains is to make this work for sentential forms as well as CFLs. But that is pretty straightforward, since the language of sentential forms of a CFG is itself a CFL. You can show that by replacing every non-terminal X throughout G by say X, declaring X to be a terminal, and adding all productions XX to the grammar.

I'll have to think about your question on unambiguity.

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.