📄 4.9.1.1.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> </td>
<td class="content">
<p><font class="emphasize">声明部分 </font>Yacc程序的声明部分有任选的两节。第一节处于分界符%{和%}之间,它是一些普通的C的声明。在这里放置由第二和第三部分的翻译规则或过程使用的声明。图4.29中这一节只有一个包含语句<br>
#include <br>
它使得C的预处理程序完成标准文件<ctype.h>的包含、这个文件含有谓词isdigit。
</p>
<p>声明部分的第二节是文法记号的声明,图4.29中的语句<br>
%token DIGIT
声明DIGIT是单词记号。这一节说明的记号可用于Yacc源程序的第二和第三部分。</p>
<p><font class="emphasize">翻译规则部分 </font>这部分位于第一个%%后面,放置翻译规则,每条规则由一个文法;产生式和有关的语义动作组成。产生式集合<br>
<left side>→<alt 1>|<alt 2>|…|<alt n><br>
在Yacc中写成<br>
<table align=center width=450 class="content">
<tr><td><left side>:</td><td><alt 1>{ semantic action 1 }</td></tr>
<tr><td></td><td>| <alt 2> { semantic action 2 }</td></tr>
<tr><td></td><td>......</td></tr>
<tr><td></td><td>| <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>
E→E+T|T
及和它们有关的语义动作写成
<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 + -