📄 新建 文本文档.txt
字号:
<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.0.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>    </td>
<td class="content">
<P>
<b>类型表达式的表达方法 </b>
</p>
</td></tr></table>
<table><tr><td>    </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>    </td>
<td class="content">
<P>
类型构造符 编码 基本类型 编码 <br>
POINTER 01 boolean 0000 <br>
ARRAY 10 char 0001 <br>
freturn 11 real 0011 <br>
real 0011
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
可以把下面左边的类型表达式编码成右边的位串:
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
类型表达式 编码 <br>
char 000000 0001 <br>
freturn(char) 000011 0001 <br>
POINTER(freturn(char)) 000111 0001 <br>
ARRAY(POINTER(freturn(char))) 100111 0001
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
根据这种编码方案,两个不同的位串不可能表示相同的类型表达式;由于数组的大小和函数的变元没有表示在位串中,因此,不同的类型表达式可能编码成相同的位串。这种编码可以包含记录,办法是把记录看成基本类型,用不同的位序列编码记录中每一个域的类型。
</p>
</td></tr></table>
<table><tr><td>    </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.0.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>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -