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

📄 5.6.3_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.6.3_1b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.6.3_2b.htm'"></img></td>
</tr>
</table>
<br><br>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
前面的例子的思想可用下面的算法加以形式化。 
</p>
</td></tr></table>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
<b>算法5.2</b> 带有继承属性的自底向上的分析和翻译 
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
输入:基础文法是LL(1)文法的L-属性定义。 
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
输出:一个计算在分析栈中所有属性值的分析程序。 
</p>
</td></tr></table>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
方法:为了简单起见,我们假设每一个非终结符号A都有一个继承属性A.i,并且每一个文法符号X都有一个综合属性X.s。如果X是一个终结符号,那么它的综合属性值就是通过词法分析器返回的词法值;这个值出现在栈中数组val之中,如同前面所讲的。 
</p>
</td></tr></table>
    

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
对于每一个产生式A→X<sub>1</sub>…X<sub>n</sub>,引入n个新的标记非终结符号,M<sub>1</sub>,…,M<sub>n</sub>,用产生式A→M<sub>1</sub>X<sub>1</sub>…M<sub>n</sub>X<sub>n</sub>代替上面的产生式。综合属性X<sub>j</sub>.s;将放在分析栈中与X<sub>j</sub>相联系的数组val的表项中。如果有继承属性X<sub>j</sub>.i,它也出现在数组val之中,但它与M<sub>j</sub>相联系。 
</p>
</td></tr></table>
    
<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
一个重要的事实是,当我们进行分析时,如果继承属性A.i存在的话,它将在数组val中紧挨M<sub>1</sub>位置下面的位置(地址码较小者)中存放的。由于我们假设开始符号没有继承属性,那么在开始符号为A时,不会发生什么问题。但即使有这样的继承属性,我们也可以把它放在栈底的下面。注意,继承属性与标记非终结符号M<sub>j</sub>相联系,属性Xj.i总是在M<sub>j</sub>处计算,而且发生在我们开始做归约到X<sub>j</sub>的动作以前。 
</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.6.3_1b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.6.3_2b.htm'"></img></td>
</tr>
</table>

</BODY>

<html><script language="JavaScript">

⌨️ 快捷键说明

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