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

📄 4.9.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='4.9.1.0b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.9.1.1b.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td> 
<td class="content">  
<p><font class="emphasize">声明部分   </font>Yacc程序的声明部分有任选的两节。第一节处于分界符%{和%}之间,它是一些普通的C的声明。在这里放置由第二和第三部分的翻译规则或过程使用的声明。图4.29中这一节只有一个包含语句<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include <br>
它使得C的预处理程序完成标准文件<ctype.h>的包含、这个文件含有谓词isdigit。    
</p>
<p>声明部分的第二节是文法记号的声明,图4.29中的语句<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%token DIGIT
声明DIGIT是单词记号。这一节说明的记号可用于Yacc源程序的第二和第三部分。</p>
<p><font class="emphasize">翻译规则部分   </font>这部分位于第一个%%后面,放置翻译规则,每条规则由一个文法;产生式和有关的语义动作组成。产生式集合<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;left side>→&lt;alt 1>|&lt;alt 2>|…|&lt;alt n><br>
在Yacc中写成<br>
<table align=center width=450 class="content">
<tr><td>&lt;left side>:</td><td>&lt;alt 1>{ semantic action 1 }</td></tr>   
<tr><td></td><td>| &lt;alt 2> { semantic action 2 }</td></tr> 
 <tr><td></td><td>......</td></tr>  
<tr><td></td><td>| &lt;alt n> { semantic action n }</td></tr>   
<tr><td></td><td>;</td></tr>   
</table>
</p>
<p>在Yacc产生式中,单引号括起来的字符'c'是由终结符号c组成的记号;没有引号的字母数字串,若也没有声明为记号,则是非终结符。右部的各个选择之间用竖线隔开,最后一个右部的后面用分号,表示该产生式集合的结束。第一个左部非终纪符是开始符号。</p>
<p>Yacc的语义动作是C语句序列.在语义动作中,符号$$表示引用左部非终结符的属性值,而$i表示引用右部第i个文法符号的属性值。每当归约一个产生式时,执行与之关联的语义动作,所以语义动作一般是从$i的值决定$$的值。在这个Yacc源程序中,两个E产生式<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E→E+T|T
&nbsp;&nbsp;&nbsp;&nbsp;及和它们有关的语义动作写成
<table align=center width=450 class="content">
<tr><td>expr :</td><td> expr'+' term { $$ = $1 + $3 ;}</td></tr>   
<tr><td></td><td>| term</td></tr>   
<tr><td></td><td>;</td></tr>   
</table></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='4.9.1.0b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.9.1.1b.htm'"></img></td>
</tr>     
</table>     
     
</BODY>     
</html>
<html><script language="JavaScript">

⌨️ 快捷键说明

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