我怎么能证明这个语法含糊不清?

时间:2017-04-05 06:26:16

标签: grammar context-free-grammar ambiguous-grammar

我想证明这个语法含糊不清,但我不确定我该怎么做。我必须使用解析树吗?

  S -> if E then S | if E then S else S | begin S L | print E
  L -> end | ; S L
  E -> i

2 个答案:

答案 0 :(得分:0)

您可以将语法放入一个解析器生成器,该生成器支持所有无上下文语法,一个无上下文的通用解析器生成器。生成解析器,然后解析您认为不明确的字符串,并通过查看解析器的输出来查找。

无上下文的通用解析器生成器生成解析器,该解析器在多项式时间内生成所有派生。这种解析器生成器的示例包括SDF2,Rascal,DMS,Elkhound,ART。还有yacc(btyacc)的回溯版本,但我不认为它是在多项式时间内完成的。通常,输出被编码为图形,其中子句子的替代树用嵌套的替代树集编码。

答案 1 :(得分:0)

如果你能找到一种解析多种方式的字符串,你可以证明它是不明确的:

<script src="https://aframe.io/releases/0.5.0/aframe.min.js"></script>

这恰好是经典的“dangling else”歧义。谷歌搜索您的标签,标题和&amp;语法给出了其他命中。

但是,如果您没有想到一个含糊不清的字符串,那么googling your tag(s) & title

  

<强> how can i prove that this grammar is ambiguous?

     

没有简单的方法来证明无上下文语法含糊不清 - 事实上,   the question is undecidable,缩减为Post correspondence problem