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

📄 3.6.1c.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 bgColor=lavender>

<table align=right width=300>
	<tr>
		<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='3.6.1b.htm'" src="../images/previous.gif"></IMG></td>
		<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='3.6.1d.htm'" src="../images/next.gif"></IMG></td>
	</tr>
</table>
<br><br>
<table border=0>
	<tr>
		<td width=10></td>
		<td>
			  <p>  <b>例3.7 </b>对于表3.5中单词,我们给出识别它的lex程序,考察一下此程序</p>
		</td>
	</tr>
	<tr>
		<td width=10></td>
		<td>
			<table  width="100%">
				<tr>
					<td width=200>
					<td align=left>
						<br>
						<font color=blue>%{ </font><br>
						<font color=green>/*显明常量 <br>
						LT,LE,EQ,NE,GT,GE, <br>
						IF, THEN, ELSE,ID, NUMBER, RELOP的定义*/ </font><br>
						<font color=blue>%}</font> <br>
						<font color="green">/*正规定义*/ </font><br>
						delim &nbsp&nbsp&nbsp&nbsp;[\t\n] <br>
						ws &nbsp&nbsp&nbsp&nbsp;{delim}+ <br>
						<br>
						letter &nbsp&nbsp&nbsp&nbsp;[A-Za-z] <br>
						digit &nbsp&nbsp&nbsp&nbsp;[0-9] <br>
						id &nbsp&nbsp&nbsp&nbsp;letter}({letter}|{digit})* <br>
						 number &nbsp&nbsp&nbsp&nbsp;{digit}+(\.{digit}+)?(E[+\-]?{digit}+)? <br>
						<font color=blue>%% </font><br>
						{ws}&nbsp&nbsp&nbsp&nbsp;{<font color="green">/*没有动作,也不返回*/</font>} <br>
						if &nbsp&nbsp&nbsp&nbsp;{<font color=blue>return</font> (IF);} <br>
						then &nbsp&nbsp&nbsp&nbsp;{<font color=blue>return</font> (THEN);} <br>
						else &nbsp&nbsp&nbsp&nbsp;{ <font color=blue>return</font> (ELSE);} <br>
						{id}&nbsp&nbsp&nbsp&nbsp;{yylval = install_id(); <font color=blue>return</font>(ID);} <br>
						{number}&nbsp&nbsp&nbsp&nbsp;{yylval=install_num();<font color=blue>return</font>(NUMBER);} <br>
						“<”&nbsp&nbsp&nbsp&nbsp;{yylval = LT; <font color=blue>return</font> (RELOP);J <br>
						“<=”&nbsp&nbsp&nbsp&nbsp;{yylval=LE; <font color=blue>return</font>(RELOP);} <br>
						“=” &nbsp&nbsp&nbsp&nbsp;{yylval=EQ; <font color=blue>return</font>(RELOP);} <br>
						“<>”&nbsp&nbsp&nbsp&nbsp;{yylval = NE; <font color=blue>return</font>(RELOP);) <br>
						“>”&nbsp&nbsp&nbsp&nbsp;{yylval = GT; <font color=blue>return</font>(RELOP);} <br>
						“>=”&nbsp&nbsp&nbsp&nbsp;{yylval = GE; <font color=blue>return</font>(RELOP)} <br>
						<font color=blue>%% </font><br>
						install_id()<br>
                                                   &nbsp&nbsp&nbsp&nbsp;  {
						<font color="green">/*把单词装入符号表并返回指针。 <br>
						yytext指向该单词的第一个字符, <br>
						yyleng给出它的长度*/ <br>
						</font>} <br>
						install_num()<br>
                                                   &nbsp&nbsp&nbsp&nbsp;  {
						<font color="green">/*类似上面过程,但单词是数*/ </font>}
            <P></P><!--p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图 3.18</p-->
						<br>
					</td>
				</tr>
			</table>
		</td>
	</tr>
	<tr>
		<td width=10></td>
		<td>
			<p>在声明节,可以看见由翻译规则仅用的某些显明常量的声明,这些声明由特别的括号<font class="emphasize">%{</font>和<font class="emphasize">%}</font>包围。出现在括号中的任何东西都直接抄写到词法分析器lex.yy.c中,不作为正规定义和翻译规则的一部分。在第三节中的辅助过程也按同样方式处理,程序中有两个过程install_id()和install_num(),它们由翻译规则使用,被逐字抄入lex.yy.c中。 </p>
		</td></tr>
</table>
<table align=right width=300>
	<tr>
		<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='3.6.1b.htm'" src="../images/previous.gif"></IMG></td>
		<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='3.6.1d.htm'" src="../images/next.gif"></IMG></td>
	</tr>
</table>
</BODY>
</html>
<html><script language="JavaScript">

⌨️ 快捷键说明

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