常规和无上下文语言中的歧义


11

我理解以下说法是正确的:

  1. 给定CFG中字符串的两个不同派生有时可能会将同一解析树归因于该字符串。
  2. 当给定CFG中存在某些字符串的派生属性不同的解析树时,则CFG就是模棱两可的。
  3. 模棱两可的CFG生成的某些无上下文语言也由模棱两可的CFG生成。
  4. 某些语言是唯一可以生成它们的CFG(并且有一些这样的语言)是模棱两可的。

Q1。从以上第3点的意义上来说,我知道也不确定任意CFG是否模棱两可。还是就第4点而言,不确定上下文无关的语言是否模棱两可?还是两者都不确定?

Q2。当我们将“无上下文”替换为“常规”时,第1-4点中的哪一个变为假?规则语法和语言是否总是明确的?


您在第4点中提到的语言是“天生含糊的”。对于第一季度,我认为不确定语法是否模棱两可。因此,3和4都是不确定的。
Lamine

正确,第4点语言被称为“固有歧义”。
dubiousjim

4
Q1:双方都不确定。Q2:1是不可能的,因为最多有一个非终端以任何句法形式出现,因此任何派生都是最左边和最右边的;2这仍然是事实;3如果删除``also''位仍然适用; 4不再是真的,例如,通过确定语法,您将获得一个明确的语法。
Sylvain

1
@Sylvain可以回答这个问题吗?
Yuval Filmus 2013年

@Sylvain,谢谢,是的,这是一个答案。我可以确认我已经理解了吗?关于2:因此,存在一个常规语法可以生成具有不同解析树的相同字符串吗?(此后,我遇到了对“模棱两可的NFA”的引用,但我不确定它是否在某种意义上使用了“模棱两可的”)。关于3和4,我想您是说某些常规语言可以由模棱两可的常规语法生成,但是也总是由明确的常规语法生成吗?
dubiousjim

Answers:


19

关于Q1:歧义问题(给定CFG,是否模棱两可)和内在歧义问题(给定CFG,其语言本质上是否模棱两可,即任何等效CFG是否模棱两可)都是无法确定的。以下是原始参考资料:


关于Q2:常规语法是一种“单侧线性”上下文无关的语法,其中在规则右半部最多出现一个非终结符,并且该非终结符在最后一个(在正确的线性语法中)或第一个(在右边的语法中)出现。左线性语法)位置。这样的语法很容易转换为等效的有限状态自动机(大致通过将每个非终结符视为状态),如果常规语法是明确的,则它们是明确的。Stearns和Hunt(1985)特别研究了明确的规则语法和明确的自动机这一类,他们证明他们喜欢包含问题的易处理算法。

  1. 关于推导之间的关系(即,规则的应用序列其中→交通α是文法的规则)和推导树(即,其中一个标记为节点是节点的序列的父X 1X m,其中A X 1X m是一个规则):在一般CFG中,可以有不同的派生,它们以不同的方式访问相同的派生树。β一种γβαγ一种α一种X1个X一种X1个X

    发生这些不同的推导,因为一个具有在句子形式施加在两个不同的地方语法规则之间的选择:在一个句型具有至少两个非终结符,可以应用→交通α第一和获得γ α η θ,或→交通β第一和获得γ η β θ,但应用其他规则将导致相同的γ α η β θ。气势最左边γ一种ηθ一种一种αγαηθβγ一种ηβθγαηβθ(始终以任何句法形式派生最左边的非终结符)或最右边的派生对访问派生树施加固定的顺序,然后给定派生树只有一个派生。

    在一个线性上下文无关文法,不存在这样的选择,因为有至多一个在任何句型非终结,并且存在对于给定的派生树,这既是最左边和最右边的单个推导。

  2. 具有两个相同的产量(叶序)的不同解析树是w的定义不明确,在考虑常规语法时不会改变。或者,也可以要求两个不同的最左导数。请注意,单面语法的派生对应于其关联的有限状态自动机中的接受行程,该接受行程以完全相同的方式被称为歧义:当给定输入w存在两个不同的接受行程时www

  3. 4. 如果采用有限状态自动机视图,就足以确定您的模棱两可的自动机,以便获得相同语言的模棱两可的自动机:任何给定的单词都将运行一次。这种确定性的自动机等效于明确的规则语法。 

    要回答您的评论:存在模棱两可的规则语法,例如具有用于最左边的两个推导一个小号一个小号一个。等价的明确语法为 S a小号一种一种一种一种一种小号一种一种小号一种小号一种

关于与Q1的关系:可以确定常规语法是否模棱两可(固有的歧义问题对常规语法不是很困难,因为即使不看输入语法,答案总是“否”)。可以在上对其关联的自动机进行平方运算来检查此情况:构造自动机与其自身的乘积,并查看具有q q '的某些状态q q '是否可访问且co -无障碍。我知道的最早的参考文献是Even(1965)的论文Ø|G|2qqqq


1

Q1。一切都是不确定的,因为语法产生语言(包含所有单词)的问题是不确定的。但是,如果您有一些特定的语法,例如由确定性PDA构造的语法,则问题是可以决定的,但这是一个非常无聊的案例。GΣ

我不太了解您在4中使用哪种语言。每种CF语言都有一个模棱两可的语法。

Q2。如果您对常规语法有所了解,那么一切都是可以决定的。您只需构建最小的DFA,并使用它即可构建明确的语法。如果您对CF语法定义的常规语言有所了解,答案是否定的-请参阅问题1。


谢谢,关于第二季度的澄清。如果语言是由常规语法指定的,则可以确定有关常规语言的问题。但这并不意味着如果CFG指定了语言,它们就可以确定-这就是您的意思,对吧?那么,我们是否知道,对于任意CFG而言无法确定的歧义等问题在仅限于碰巧会生成常规语言的CFG时也无法确定?
dubiousjim

可能不是,但是它们始终是可决定的。我的意思是,当您处理由常规语法描述的语言-CFG的子类时,您喜欢的任何问题都是可以确定的。但是某些非常规的CFG可以产生常规语言,甚至无法确定CFG是否会产生常规语言。
亚历山大·鲁布佐夫

2
@ alexandr-rubtsov“当您使用常规语法描述的语言时,您喜欢的任何问题都是可以决定的”。这看起来过于乐观了……
J.-E.

谢谢,我的意思是“可能是”,而不是“谁知道”。
dubiousjim

@ J.-E.Pin是的,我应该更加精致一些,说些诸如“所有自然问题,例如歧义性”之类的话。
亚历山大·鲁布佐夫

0

这取决于您是仅在“语言”之前还是在“语法”之前用“常规”替换“无上下文”。

所有常规语言都是由常规语法生成的,尤其是由无歧义的常规语法(例如LL(1)右正则语法生成的。

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.