我想证明这个语法含糊不清,但我不确定我该怎么做。我必须使用解析树吗?
S -> if E then S | if E then S else S | begin S L | print E
L -> end | ; S L
E -> i
答案 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。