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

📄 4.7.4.0b.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.7.4.0.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.7.4.1.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>  
<td class="content">   

<p>
让我们把I<sub>4</sub>与I<sub>7</sub>合并成一个集合记为I<sub>47</sub>,它仅含有项目[C→d·,c/d/$] 。把I<sub>0</sub>,I<sub>2</sub>,I<sub>3</sub>及I<sub>6</sub>导入I<sub>4</sub>或I<sub>7</sub>的标志为d的弧统统改为导入I<sub>47</sub>。状态I<sub>47</sub>的作用是不论遇到当前输入符号是c,d或$都用C→d进行归约。要注意到I<sub>47</sub>无法及时发现输入串所含错误,所幸的是在输入下一个符号之前,错误仍将被查出。
</p> 
<p>由于go(I,X)仅仅依赖于I的心,因此LR(1)项目集合并后的转换函数可以通过go(I,X)自身的合并而得到,这就是说在合并项目集时用不着同时考虑修改转换函数的问题。动作action应当进行修改,使得能反映各被合并集合的既定动作。
</p> 

<p>假定有一个LR(1)文法,即它的LR(1)项目集中不存在动作冲突。如果我们把同心的项目集合并为一,就可能导致冲突,但是这种冲突不会是移进- 归约冲突。因为如果存在这种冲突,则意味着对当前输入符号a,有一个项目[A→α·,a] 要求进行归约,同时又有一个项目[B→β·aγ,b] 要求把a移进。这两个项目既然同处在合并后的同一个项目集中,那么合并前必存在某个c使得[A→α·,a] 和[B→β·aγ,c] 同处于某个项目集中。这一点又表示原来的LR(1)项目集已存在移进-归约冲突。故同假设不符。因此同心集的合并,不会产生新的移进-归约冲突。事实上移进-归约冲突不依赖于向前搜索符号而依赖于其心。但是同心集的合并可能引起归约-归约冲突。例如,考虑文法 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S'→S <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S→aAd|bBd|aBe|bAe <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A→c <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B→c </p>    

<p>这个文法接受的语言是{acd,ace,bcd,bce}。如果我们构造这个文法的LR(1)项目集规范族,即知它是一个LR(1)文法。在它的集族中,对活前缀ac的有效项目集是{[A→c·,d],[B→c·,e]}。对活前缀bc的有效项目集是{[A→c·,e] ,[B→c·,d] }。这两个集合都不含冲突项目且具有相同的心。但一经合并就变成{[A→c·,e/d],[B→c·,e/d]}。显然这是一个含有归约-归约冲突的集合。因为当面临输入符号为e或d时,我们不知道该用A→c还是用B→c进行归约。</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.7.4.0.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.7.4.1.htm'"></img></td>
</tr>     
</table>     
     
</BODY>     
</html>

⌨️ 快捷键说明

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