📄 7.1.1c.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.1.1b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'"
onclick="vbscript:window.location.href='7.1.2.htm'"></td>
</tr>
</table>
<br><br>
<table>
<tr>
<td> </td>
<td class="content">
<p>后缀式是语法树的线性表示形式;后缀式是一列有序的树结点,其中的每个结点都是在它的所有子结点之后立即出现的,顺序是自左向右的。例如,在图7.1(a)中的语法树的后缀式是 </p>
</td>
</tr>
</table>
<table>
<tr>
<td width=150> </td>
<td class="content" align=center>a b c uminus * b c uminus * +assign </td>
</tr>
</table>
<table>
<tr>
<td> </td>
<td class="content">
<p>表7.1是产生赋值语句语法树的语法制导定义,它是第5.2节关于表达式的语法制导定义的一个扩展。非终结符号S产生一个赋值语句。二目算符+和*是从运算符号集中选出的两个代表。其运算的结合律和优先次序按照通常的规定,这些规定未在文法中体现。根据表7.1,可以从输入a:= b*-c+b*-c构造出相应的图7.l(a)的语法树。</p>
</td>
</tr>
</table>
<table>
<tr>
<td> </td>
<td class="content">
<p>若函数mkunode(op,child)和mknode(op,left,right)每当可能时就返回一个指向一个存在的结点的指针,以代替建立新的结点,那么,这个同样的语法制导定义将生成图7.1中的dag。符号<b>id</b>的属性place是一个指向符号表中该标识符表项的指针。“uminus”表示一目减。</p>
</td>
</tr>
</table>
<table>
<tr>
<td> </td>
<td class="content">
<p>对于图7.1(a)中的语法树,可以有两种表示法,见图7.2。在图7.2(a)中,语法树的每一个结点用一个记录来表示,该记录包括一个运算符号域和若干个指向子女结点的指针域。在图7.2(b)中,把所有的结点看成是一个记录的数组,结点的位置或索引作为指向结点的指针。从第10号位置上的根结点开始并沿着指针所指的方向进行,语法树中的所有结点都能被访问到。</p>
</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.1.1b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'"
onclick="vbscript:window.location.href='7.1.2.htm'"></td>
</tr>
</table>
</body>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -