简述什么是二义性文法?
模棱两可。歧义的定义:“如果一个语法的句子中有两个不同的语法树,那么这个语法就是歧义的。”在这种情况下,“abc”这个句子有两个不同的语法树:s|||||||||||||||||||||||||||||||----------------------------------."如果语法不明确,编译时就会有不确定性。遗憾的是,理论上已经证明了语法的歧义性是无法确定的,即不可能通过有限的步骤构造一个判断语法是否具有歧义性的算法。现在的解决办法是提出一些限制性条件,称为无歧义的充分条件。当语法满足这些条件时,就可以判断语法没有歧义。由于无歧义语法相对简单,我们也可以采用另一种解决方案:不改变无歧义语法,我们可以确定满足无歧义充分条件的编译算法。”例如,在这种情况下,可以添加一个限制:ac具有比ab更高的优先级,这消除了模糊性。
编译原理,证明下面文法g(s)是二义性的?
证明:如果语法中有这样一个句型,而且它有两个不同的语法树,就说语法是歧义的,应该尽量避免。(s,s)和(s*s),以及(i,s*s)和(s,si)可以表示i,i*i,所以g(s):s->s,s*s*i;语法有歧义。编译器被分成几个“过程”,以使编译器的结构更清晰。构造编译器时应掌握源程序、目标语言和编译方法的知识。对于编译,变量同时包含左值和右值。编译器处理大多数表。目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码,因此它不是目标代码。词法分析遵循构词规则,语法分析遵循语法规则,中间代码生成遵循语义规则,语义规则可以定义程序的意义。
g[a]:a→aa|b|ab→a证明文法的二义性?
查找句子有两种最左或最右的派生。
例如,aaa可以推导如下:a→aa→aaa→aaa也可以推导如下:a→aa→aaa→aab→aaa都是最右边的派生,所以有两个不同的语法树,所以它们是不明确的
原文标题:什么是二义性 简述什么是二义性文法?,如若转载,请注明出处:https://www.saibowen.com/news/19152.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「赛伯温」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。