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

📄 5.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.1.0.htm'" width="65" height="27"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.1.2.htm'"></img></td>
</tr>
</table>
<br><br>

<font class="title2"><b>5.1.1 语法制导定义的形式</b></font> 


<table>
<tr>
<td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
在一个语法制导定义中,对应于每一个文法产生式A→α都有与之相关联的一套语义规则,规则形式为b:= f(c1,c2,…,ck),在这里,f是一个函数,而且或者 
</p>
</td>
</tr>
</table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
1.b是A的一个综合属性并且c1,c2,…,ck是产生式右边文法符号的属性,或者
</td></tr></table>





<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
2.b是产生式右边某个文法符号的一个继承属性并且c1,c2,…,ck是A或产生式右边任何文法符号的属性。  
在两种情况下,我们都说属性b依赖于属性c1,c2,…,ck。
</td></tr></table>



<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
语义规则中的函数通常写成表达式。在某些情况下,在语法制导定义中的一个语义规则的唯一目的就是产生某个副作用。这样的语义规则通常写成过程调用或过程段。如在例5.1中所讨论的。它们可以看成是定义有关产生式左边非终结符号的虚综合属性的规则;在这样的语义规则中的虚属性和符号:= 都不表示出来。 
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
<b>例5.1</b>  表5.1中的语法制导定义是用于台式计算器程序的。这个定义中把一个称为val的整数值的综合属性与每一个非终结符号E,T和F联系起来。对于每一个E,T和F的产生式,语义规则通过产生式右边非终结符号的val值来计算出产生式左边非终结符号的val值。 
</td></tr></table>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
符号digit有一个综合属性lexval,它的值可由词法分析器提供。与产生式L→ E n对应的语义规则仅仅是打印出由E产生的算术表达式的值的一个过程;我们可以认为这个规则定义非终结符号L的一个虚属性。 
</td></tr></table>


<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
在语法制导定义中,我们假设终结符号只有综合属性,因为这样的定义没有为终结符号提供语义规则。正如我们在第三章中讨论的那样,终结符号的属性值通常由词法分析器提供。我们还假设开始符号没有继承属性,除非另外加以说明。
</td></tr></table>

<p align=center>表5.1 一个简单台式计算器的语法制导定义</p> 

<table align = center border = 1 width = "60%" cellspacing="0" cellpadding="5">
<tr>
<td width = "40%"><div align = center>产生式</div></td>
<td width = "60%"><div align = center>语义规则</div></td>
</tr>
<tr>
<td width = "40%">
	<br>
	<p>L -> En</p> 
	<p>L -> E<sub>1</sub>+T</p>	
	<p>E -> T</p>	 
	<p>T -> T<sub>1</sub>*F</p>	
	<p>T -> F</p>	 
	<p>F -> (E)</p>	 
	<p>F -> digit</p> 
	<p></p>	
</td>
<td width = "60%">
	<br>
	<p>print(E.val)</p>	
	<p>E.val := E<sub>1</sub>.val+T.val</p>	
	<p>E.val := T.val</p>	 
	<p>T.val := T<sub>1</sub>.val*F.val</p>	
	<p>T.val := F.val</p>	
	<p>F.val := E.val</p>	
	<p>F.val := digit.lexval</p>
	<p></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.1.0htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='5.1.2.htm'"></img></td>
</tr>
</table>

</BODY>

<html><script language="JavaScript">

⌨️ 快捷键说明

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