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

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

<font class="title2"><b>5.8.1 类型表达式</b></font>         

<table><tr><td></td>
<td class="content">
<P><p>
<b>5.8.1.1  类型表达式定义(续) </b> 
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
<b>类型表达式的表达方法 </b>
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
在类型无递归定义的情况下,表示类型表达式的直观方法是使用5.2为表达式构造语法树的方法为类型表达式构造一棵树,这种树的内部结点是类型构造符,叶结点是基本类型,类型名或类型变量。例5.24函数f的类型表达式的树由图5.29给出。</p>
<center><img src="images/5_29.gif"></center>
<p>在对类型表达式作某些限制的条件下,一个类型表达式可以编码成一个位串,因而可以用一个整数表示。例如,考虑由POINTER、→和ARRAY 作为构造符的类型表达式。构造符→作用于类型表达式表示的参数,用freturn(t)表示,其中t为函数返回对象的类型,而函数变元的类型则被存放在其它地方。类似地,ARRAY(t) 表示元素为t 的数组,而数组元素的个数保存在其它地方。这样,构造符都成为一元算符,把它们作用于基本类型形成的类型表达式有非常统一的结构。使用下面的简单编码方案: 
</p>
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<P>
&nbsp;&nbsp;&nbsp; 类型构造符 &nbsp;编码 &nbsp;&nbsp;&nbsp;&nbsp;基本类型&nbsp; 编码  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;POINTER &nbsp;&nbsp;&nbsp;&nbsp;01 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean &nbsp;0000 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;ARRAY &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char &nbsp;&nbsp;&nbsp;&nbsp;0001 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;freturn&nbsp;&nbsp; &nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; real &nbsp;&nbsp;&nbsp;&nbsp;0011 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;real &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0011 
</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>
&nbsp;&nbsp;&nbsp; 类型表达式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编码 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;char &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000000 0001 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;freturn(char) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;000011 0001 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;POINTER(freturn(char))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;000111 0001 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARRAY(POINTER(freturn(char)))&nbsp;100111 0001
</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>
上面的类型表达式编码成位串的方案出自D.M.Ritchie写的C编译器,也用于Johnson描述的C编译器中。 
</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.8.1.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.8.1_2.htm'"></img></td>
</tr>
</table>

</BODY>

<html><script language="JavaScript">

⌨️ 快捷键说明

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