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

📄 a_5.5.htm

📁 建立《编译原理网络课程》的目的不仅使学生掌握构造编译程序的原理和技术
💻 HTM
字号:
<html>
<head>
<title>5.5的解答</title>
</head>
<body background="../../images/background.gif">
<center><font class="title2"><b>练习5.5</b></font></center><br>
<p>解答: (a)用综合属性决定s.val的语法制导定义:</p>          


<table align = center border = 1 width = "80%" cellspacing="0" cellpadding="5">
<tr>
<td width = "30%"><div align = center>产生式</div></td>
<td width = "70%"><div align = center>语义规则</div></td>
</tr>

<tr>
<td >
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S -&gt; L              
	
</td>
<td >
	
S.val:=L.val;   
 
	
</td>
</tr>


<tr>
<td >
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S -&gt; L<sub>1</sub>.L<sub>2</sub>          
	
</td>
<td>
	
S.val:=L<sub>1</sub>.val+L<sub>2</sub>.val*L<sub>2</sub>.p;
	
</td>
</tr>


<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L -&gt; B          
	
</td>
<td>
	
L.val:=B.val;&nbsp;&nbsp;&nbsp; L.p:=2<sup>-1</sup>;        
	
</td>
</tr>


<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L -&gt; L<sub>1</sub>B          
	
</td>
<td>
	
L.val:=L<sub>1</sub>.val*2+B.val;
<p>L.p:=L.p*2<sup>-1</sup>;</p>
	
</td>
</tr>



<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B -&gt; 0          
	
</td>
<td>
	
B.val:=0;
	
</td>
</tr>



<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B -&gt; 1          
	
</td>
<td>
	
B.val:=1;
	
</td>
</tr>




</table>




<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注:L.p表示恢复L.val的因子。</p>       
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (b)分析:设B.c是B的综合属性,是B产生的位对最终值的贡献。要求出B.c,必须求出B产生位的<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      
权,设B.i。B.i的求法请参看下面的图示:</p>
<p align=center><img src="a_5.5.gif" width="661" height="360"></p>




<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外,设L.fi为继承因子,L.fs为综合因子,语法制导定义如下:</p>    

<table align = center border = 1 width = "80%" cellspacing="0" cellpadding="5">
<tr>
<td width = "30%"><div align = center>产生式</div></td>
<td width = "70%"><div align = center>语义规则</div></td>
</tr>

<tr>
<td >
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S -&gt; L              
	
</td>
<td >
	
L.i:=1; L.fi:=2; L.fs:=1; S.val:=L.val;   
 
	
</td>
</tr>


<tr>
<td >
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S -&gt; L<sub>1</sub>.L<sub>2</sub>          
	
</td>
<td>
	
L<sub>1</sub>.i=1; L<sub>1</sub>.fi=2; L<sub>1</sub>.fs:=1; 
<p>L<sub>2</sub>.i=2<sup>-1</sup>; L<sub>2</sub>.fi=1; L<sub>2</sub>.fs:=2<sup>-1</sup>;</p>
<p>S.val:=L<sub>1</sub>.val+L<sub>2</sub>.val;</p>
	
</td>
</tr>


<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L -&gt; B          
	
</td>
<td>
	
L.s:=L.i; B.i:=L.s; L.val:=B.c;    
	
</td>
</tr>


<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L -&gt; L<sub>1</sub>B          
	
</td>
<td>
	
L<sub>1</sub>.i:=L.i*L<sub>1</sub>.fi;
<p>L.s:=L<sub>1</sub>.s*L<sub>1</sub>.fs;</p>
<p>B.i:=L.s;</p>
<p>L.val:=L<sub>1</sub>.val+B.c;
	
</td>
</tr>



<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B -&gt; 0          
	
</td>
<td>
	
B.c:=0;
	
</td>
</tr>



<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B -&gt; 1          
	
</td>
<td>
	
B.c:=B.i;
	
</td>
</tr>




</table>





<p>&nbsp;&nbsp;&nbsp;&nbsp;    
若把文法改写成如下形式,则语法制导定义会更清楚:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
S -&gt; L.R | L</p>   
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
L -&gt; LB | B</p>   
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
R -&gt; Rb | B</p>   
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
B -&gt; 0 | 1</p>   


<table align = center border = 1 width = "80%" cellspacing="0" cellpadding="5">
<tr>
<td width = "30%"><div align = center>产生式</div></td>
<td width = "70%"><div align = center>语义规则</div></td>
</tr>

<tr>
<td >
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S -&gt; L              
	
</td>
<td >
	
L.i:=1;&nbsp; S.val:=L.val;     
 
	
</td>
</tr>


<tr>
<td >
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S -&gt; L.R         
	
</td>
<td>
	
L.i=1;&nbsp;&nbsp; R.i=2<sup>-1</sup>;<p>S.val:=L.val+R.val;</p>  
	
</td>
</tr>



<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L -&gt; L<sub>1</sub>B         
	
</td>
<td>
	
B.i:=L.i;&nbsp; L<sub>1</sub>.i:=L.i*2;<p>L.val:=L<sub>1</sub>.val+B.c;</p> 
	
</td>
</tr>

<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L -&gt; B         
	
</td>
<td>
	
B.i:=L.i;&nbsp;&nbsp; L.val:=B.c;     
	
</td>
</tr>


<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; R -&gt; R<sub>1</sub>B        
	
</td>
<td>
	
R<sub>1</sub>.i:=R.i;&nbsp; R.s:=R<sub>1</sub>.s*2<sup>-1</sup>;<p>B.i:=R.s;</p>
	
</td>
</tr>

<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; R -&gt; B         
	
</td>
<td>
	
R.s:=R.i;&nbsp; B.i:=R.s;
<p>R.val:=B.c;</p>
	
</td>
</tr>




<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B -&gt; 0        
	
</td>
<td>
	
B.c:=0;
	
</td>
</tr>



<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B -&gt; 1       
	
</td>
<td>
	
B.c:=B.i;
	
</td>
</tr>




</table>





</body>

<html><script language="JavaScript">

⌨️ 快捷键说明

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