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

📄 a_5.10.htm

📁 建立《编译原理网络课程》的目的不仅使学生掌握构造编译程序的原理和技术
💻 HTM
字号:
<html>
<head>
<title>5.10的解答</title>
</head>
<body background="../../images/background.gif" >
<center><font class="title2"><b>练习5.10</b></font></center><br>
<p>解答:&nbsp;</p>   


<p>(a) 对于F<sub>1</sub> sub F<sub>2</sub> sub F<sub>3</sub>,其最左推导和分析树如下:</p>      


<table align = center border = 0 width = "80%" cellspacing="0" cellpadding="5">
<tr>
<td width = "40%" valign="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S =&gt; L   
  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; B</p>   
  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; B sub F<sub>3</sub></p>  
  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; B sub F<sub>2</sub> sub  
  F<sub>3</sub></p> 
  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; F<sub>1</sub> sub  
  F<sub>2</sub> Sub F<sub>3</sub></p>  
</td>
<td width = "60%"><img src="a_5.10.gif" width="169" height="279"></td>
</tr>





</table>



<p>&nbsp;&nbsp;&nbsp; 显然,F<sub>3</sub>.ps:=shrink(F<sub>2</sub>.ps);</p>       



<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F<sub>2</sub>.ps:=shrink(F<sub>1</sub>.ps);&nbsp;&nbsp;</p>       



<p>&nbsp;&nbsp;&nbsp; 为此,为B设一个综合属性B.pt,其值等于其下标F的继承属性F.ps。语法制导定义如下:&nbsp;</p>       


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

<tr>
<td >
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S -&gt; L          
	
</td>
<td >
	
L.ps:=10;&nbsp; S.ht:=L.ht;    
 
	
</td>
</tr>


<tr>
<td >
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L -&gt; B       
	
</td>
<td>
	
B.ps:=L.ps;&nbsp; L.ht:=B.ht;    
	
</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>.ps:=L.ps;&nbsp; B.ps:=L.ps; 
<p>L.ht:=max(L<sub>1</sub>.ht,B.ht);   
	
</td>
</tr>




<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B -&gt; B<sub>1</sub> sub  
F     
	
</td>
<td>
	
B<sub>1</sub>.ps:=B.ps;&nbsp; F.ps:=shrink(B<sub>1</sub>.pt); 
<p>B.ht:=disp(B<sub>1</sub>.ht,F.ht);</p>
<p>B.pt:=F.ps;  
	
</td>
</tr>


<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B -&gt; F       
	
</td>
<td>
	
F.ps:=B.ps; B.ht:=F.ht;
<p>B.pt:=B.ps;  
	
</td>
</tr>

<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F -&gt; {L}      
	
</td>
<td>
	
L.ps:=F.ps; F.ht:=L.ht;  
	
</td>
</tr>


<tr>
<td>
	
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F -&gt; text      
	
</td>
<td>
	
F.ht:=text.h*F.ps  
	
</td>
</tr>




</table>



<p>(b) 翻译模式如下:</p>   



<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
S -&gt; {L.ps:=10}</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 {S.ht:=L.ht}</p>   



<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
L -&gt; {B.ps:=L.ps}</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 {L.ht:=B.ht}</p>   



<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
L -&gt; {L<sub>1</sub>.ps:=L.ps}</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<sub>1</sub> {B.ps:=L.ps}</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&nbsp; {L.ht:=max(L<sub>1</sub>.ht,B.ht)}</p>   



<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
B -&gt; {B<sub>1</sub>.ps:=B.ps}</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<sub>1</sub></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; 
sub {F.ps:=shrink(B<sub>1</sub>.pt)}</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; 
F {B.ht:=disp(B<sub>1</sub>.ht,F.ht);</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;&nbsp;&nbsp;&nbsp; 
B.pt:=F.ps}</p>   



<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
B -&gt; {F.ps:=B.ps}</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; 
F {B.ht:=F.ht; B.pt:=B.ps}</p>   



<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
F -&gt;&nbsp;&nbsp;&nbsp; {L.ps:=F.ps}</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}{F.ht:=L.ht}</p>   



<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
F -&gt; text {F.ht:=text.h*F.ps}&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     
&nbsp;&nbsp;&nbsp;&nbsp; </p>   



<p> </p>



</body>

<html><script language="JavaScript">

⌨️ 快捷键说明

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