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

📄 3.6.1d.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.1c.htm'" src="../images/previous.gif"></IMG></td>
		<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='lianxiti.htm'" src="../images/next.gif"></IMG></td>
	</tr>
</table>
<br><br>
<table border=0>
	<tr>
		<td width=10></td>
		<td>
			<p>声明节还包括一些正规定义,<font class="emphasize">每个定义由一个名字和该名字指示的正规式组成</font>。例如,第一个定义的名字是delim,它代表字符类[\t\n],也就是空格、制表(\t)和换行(\n)三个字符的任意一个。第二个是空白定义,由名字ws表示,空白是一个或多个分界符的序列。注意,在Lex中,字delim必须由花括号包围,以区别由五个字母delim组成的模式。</p>
			<p>在第五个定义id中使用了圆括号,它们是Lex的元符号,按通常的定义,作为分组记号。同样地,竖线在Lex里表示或者。反斜线作为换码,让作为Lex元符号的字符有自身本来的含义,数的正规定义中,十进制小数点由\.表示,因为在Lex及许多处理正规式的UNIX程序中,点本身可以代表除了换行符以外的任何一个字符。在字符类[+\-]中,减号的前面放了反斜线,因为减号也是元符号,用于表示范围,如[A-Z]。还有另外的方法可让作为元符号的字符表示原来的含义:把它们放在引号中。在规则节有这样的例子,六个关系算符都由引号包围。</p>
			<p>现在,让我们看第一个%%后面的翻译规则,第一条规则表明,如果看见ws,也就是空格、制表和换行符的串,没有任何动作发生,控制不返回分析器,词法分析器继续去识别记号,直至所找到记号的动作引起返回为止。 
			  <br>
			  第二条规则表明,如果看见字母if,返回记号IF,它是代表某个整数的显明常量,分析器把这个整数理解为if.下面的两条规则以同样的方式处理then和else。在id的规则中,有关的动作含两个语句。首先,过程insiall_id返回的值赋给变量yylval,这个过程定义在第三节。变量yylval的定义出现在Lex的输出lex.yy.c中,它对分析器也是可用的,它的作用是保存返回的单词值,因为动作的第二个语句return(ID)只能返回记号的类别。</p>
			<p>我们略去了install_id的详细代码,但是,可以猜想,它在符号表中查找由模式id匹配的单词。 
			  Lex通过两个变量yytext和yyleng使单词对出现在第三节的子程序是可用的,变量yytext是指针,它指向单词的开始字符,变量yyleng是整数,它指出单词的长度。</p>

<p>再下一条规则以类似方式处理数。最后六条规则都返回记号relop,而用yylval的值来区别不同的关系符。如果下一个要匹配的单词是if,那么模式if和{id}都匹配这个单词,而且这时它们都不能匹配更长的串。由于表3。5中关键字if的模式先于标识符的模式,这个冲突的解决是选择排在前面的关键字。这个二义性的解决策略使得保留字的处理变得很容易,只要把它们列在标识符模式的前面即可。如果要读的前两个字符是"&lt;=",这时模式"&lt;"匹配第一个字符,但它不是匹配最长输入前缀的模式,由于Lex的策略是选择匹配某模式的最长前缀,使解决"&lt;"和"&lt;="的冲突变得容易,并按我们期望的方式选择"&lt;="作为下一个记号。 
			</p>
      <BLOCKQUOTE></BLOCKQUOTE>
		</td></tr>
</table>
<table align=right width=300>
	<tr>
		<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='3.6.1c.htm'" src="../images/previous.gif"></IMG></td>
		<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='lianxiti.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 + -