⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.9.2.1b.htm

📁 建立《编译原理网络课程》的目的不仅使学生掌握构造编译程序的原理和技术
💻 HTM
字号:
<html>

<head>
<title>编译原理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link type="text/css" rel="stylesheet" href="../css/specification.css">
</head>

<BODY>

<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.9.2.1.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.9.3.0.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td> 
<td class="content">  
<p>Yacc解决移进-归约冲突时,参考卷入这个冲突的产生式和终结符的优先级和结合性。如果Yacc必须在移进输入符号a和按产生式A→α归约这两个动作间进行选择时,那么,当这个产生式的优先级高于a,或者优先级相同但产生式左结合,取归约动作,否则选择移进。</p>
<p>通常,产生式的优先级和它最右边的终结符号的优先级一致,在大多数情祝下,这是合理的决策。例如,给定产生式 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E→E+E|E*E <br>
&nbsp;&nbsp;&nbsp;&nbsp;若搜索符是+,归约项目的产生式是E→E+E,那么选择归约,因为右部的+和搜索符有同样的优先级,而+是左结合。如果搜索符是*,那么取移进,因为搜索符的优先级高于这个产生式中的+。</p>


<p>在那些最左终结符不能给产生式以适当的优先级的情况下,我们可以给产生式附加标记来强制它的优先级,%Prec<terminal> 它的优先级和结合性同这个标记中的终结符一样。这个终结符可以是个占位符,如图4.30的UMINUS那样,它不由词法分析器返回,仅用来决定一个产生式的优先级。图4.30中,声明 <br>      
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%right UMINUS <br>
&nbsp;&nbsp;&nbsp;&nbsp;给记号UMINUS指定高于*和/的优先级。在翻译规则部分,标记 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%Prec UMINUS <br>
&nbsp;&nbsp;&nbsp;&nbsp;在产生式 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expr :'-' expr <br>
&nbsp;&nbsp;&nbsp;&nbsp;的后面,它使得这个产生式的一元减算符的优先级高于其它任何算符。<br>
&nbsp;&nbsp;&nbsp;&nbsp;Yacc不报告用这种优先级和结合性能解决的移进-归约冲突。
</p>   

</td></tr></table>  
     
<br>     
<table align=right width=300>     
<tr>     
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.9.2.1.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.9.3.0.htm'"></img></td>
</tr>     
</table>     
     
</BODY>     
</html>
<html><script language="JavaScript">

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -