📄 7.2.3.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='7.2.2c.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='7.3.1.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>7.2.3 记录中的域名</b></font>
<table><tr><td>    </td>
<td class="content">
<p>
下述产生式中的非终结符号T产生记录类型;
</p>
<table><tr><td>    </td>
<td class="content">
<p>
T→<B>record</B> D <B>end</B>
</p>
</td></tr></table>
<p>
继续上节的讨论,即除基本类型、指针和数组外,还允许T产生记录类型。在图7.7翻译模式的动作中强调作为一个语言结构的记录的设计与活动记录之间的相似处。因为在图7.6中过程定义并不影响域宽的计算(从图7.6的第四个产生式中可以看出)。因此我们允许过程定义出现在记录中。这样,关于D的产生式就完全与图7.6表示的一样。图7.7为一个记录中的域名建立符号表。
</p>
<p>
<p>
T→<b>record</b> LD <b>end</b> { T.type:=record(top(tblptr)); <br>
T.width:=top(offset);
<br>
pop(tblptr);pop(offset)}
<br>
L→ε {
t:=mktable(nil);
<br>
push(t,tblptr);push(0,offset))}
</p>
<p> <font face="楷体_GB2312">图7.7为-个记录中的域名建立一张符号表 </font></p>
<p>
当遇到保留字<B>record</B>时,便执行与标记非终结符号L相连的语义动作,即为记录中的各域名创建一张新的记录符号表;并把指向该表的指针压人栈tblptr中;把相对地址0压入栈offset中。根据图7.6可知,产生式D→<B>id</B> :T的语义动作是将域名<B>id</B>的有关信息填入此记录的符号表中。当记录的所有域名都被检查过之后,在offset的栈顶将存放着记录之内的所有数据目标的总域宽。图7.7中end之后的语义动作是将offset的栈顶的总域宽作为综合属性T.width的值;类型T.type由record(top(tblptr))而得到,其中top(tblptr)是指向该记录的符号表的指针,而record(top(tblptr))表示以top(tblptr)作为指向其符号表的指针的记录类型。在下一节该指针将用来恢复记录中各域的域名、类型及域宽等,即用于记录中的域名的引用。
</td></tr><tr><td></td>
<td class="content">
</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='7.2.2c.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='7.3.1.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -