📄 7.3.3b.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.3.3.htm'" ></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'"
onclick="vbscript:window.location.href='7.3.3c.htm'" ></td>
</tr>
</table>
<br>
<br>
<table>
<tr>
<td> </td>
<td class="content">
4. E→L <br>
{<b>if</b> L.offset=<b>null then</b>
/* L is a simple <b>id</b> */ <br>
E.place:=L.place
<br>
<b> else begin</b> <br>
E.place:=newtemp;
<br>
emit(E.place':='L.place'['L.offset']')
<br>
<b> end</b>} <br>
L.offset是一个新的临时变量,存放着w与Elist.place 值的乘积。因此L.offset等价于(7.5)式的第一项:
<br>
5. L→Elist] <br>
{L.place:=newtemp; <br>
emit(L.place':='Elist.array'-'
<br>
((…((low<span
class="down"><sub>1</sub></span> n<span class="down"><sub>2</sub></span>+low<span
class="down"><sub>2</sub></span>)n<span class="down"><sub>3</sub></span>+low<span
class="down"><sub>3</sub></span>)…)n<span class="down"><sub>k</sub></span> +low<span
class="down"><sub>k</sub></span>) * w )); <br>
L.offset:=newtemp; <br>
emit(L.offset':='w'*'Elist.place)}
<br>
一个空的offset表示一个简单的名字: <br>
6. L→<b>id</b> <br>
(L.place:=<b>id</b>.place;L.offset:==<b>null</b>}
<br>
每当扫描到下一个下标表达式时,我们应用递归公式(7.7)。在下列语义动作中,Elist.place与(7.7)式中的e<span
class="down"><sub>m-1</sub></span>对应,Elist.place与(7.7)式中的e<span class="down"><sub>m</sub></span>对应。注意若Elist有m一1个元素,则产生式左部的Elist有m个元素。
<br>
7.Elist→Elist<span class="down"><sub>1</sub></span>,E <br>
{t:=newtemp; <br>
m: =Elist<span class="down"><sub>1</sub></span>.ndim+1;
<br>
emit(t':= ' Elist<span class="down"><sub>1</sub></span>.place'*'limit(Elist<span
class="down"><sub>1</sub></span>.array,m)); <br>
emit(t':= ' t '+'E.place); <br>
Elist.array:=Elist<span class="down"><sub>1</sub></span>.array;
<br>
Elist.place:=t; <br>
Elist.ndim:=m} <br>
E.place保存表达式E的值,即先后用来存放下标表达式i<span class="down"><sub>1</sub></span>,i<span
class="down"><sub>2</sub></span>,...i<span class="down"><sub>m</sub></span>之值,特别当m=
1时为i<span class="down"><sub>1</sub></span>之值,即为(7.6)式之值。 <br>
8. Elist→<b>id</b>[E <br>
{Elist.place:=E.place; <br>
Elist.ndim:=1: <br>
Elist.array:=<b>id</b>.place}
<br>
</td>
</tr>
</table>
<p><br>
</p>
<table align="right" width="300">
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'"
onclick="vbscript:window.location.href='7.3.3.htm'" ></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'"
onclick="vbscript:window.location.href='7.3.3c.htm'" ></td>
</tr>
</table>
</body>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -