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

📄 5.1.2.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='5.1.0b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.1.3.htm'"></img></td>
</tr>
</table>
<br><br>

<font class="title2"><b>5.1.2 综合属性</b></font>  


<table>
<tr>
<td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
综合属性在实际中被广泛应用。唯独只使用综合属性的语法制导定义称为S-属性定义。在S-属性定义的分析树中,我们通常可以使用自底向上的方法在每一个结点处使用语义规则来计算综合属性值,即从叶结点到根结点进行计算。
</p>
</td>
</tr>
</table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
<b>例5.2</b> 表5.1中的S-属性定义详细说明了一台计算器读人包含数字、括号、+和*运算符的算术表达式,随后再读入一个换行字符n,然后打印出表达式值的过程。例如,给定一个表达式3*5+4,后跟一个换行符n ,这样输入为3*5+4n,程序打印出表达式的值19。图5.2是3*5+4n的带注释的分析树。在树根的输出是根的第一个子结点E.val的值。  
</p>
</td></tr></table>



<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
为了看清属性是怎样计算的,我们首先考虑最底层最左边的内部结点,它对应于产生式F→digit,相应的语义规则是F.val:=digit.lexval,由于这个结点的子结点digit的属性digit.lexval的值为3,所以决定了结点F的属性F.val的值也为3。同样,在这个结点的父结点处,属性T.val的值也为3。
</p>
</td>
</tr>
</table>

<p align=center><img src="images/drawing1.gif"></p>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
现在我们来考虑产生式T→T<SPAN class=down><sub>1</sub></SPAN>*
 F对应的结点。这个结点的属性T.val的值由下面语义规则确定:
</p>
</td>
</tr>
</table>

<table align=center width=50%>
<tr>
<td align=center><b>产生式</b></td>
<td align=center><b>语义规则</b></td>
</tr>
<tr>
<td align=center>T->T<SPAN class=down><sub>1</sub></SPAN>* F</td>
<td align=center>T.val:=T<SPAN class=down><sub>1</sub></SPAN>.val * F.val</td>
</tr>
</table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
当我们在这个结点处应用语义规则时,T<SPAN class=down><sub>1</sub></SPAN>.val从左边的子结点得到值3,并且F.val从右边的子结点到值5,于是在这个结点处,T.val得到值15。 
</p>
</td>
</tr>
</table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
与包含开始符号L的产生式L→En对应的语义规则打印出通过E得到的表达式的值。 
</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='5.1.0b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.1.3.htm'"></img></td>
</tr>
</table>

</BODY>

<html><script language="JavaScript">

⌨️ 快捷键说明

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