📄 3.2.3.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.2.2b.htm'" src="../images/previous.gif"></IMG></td>
<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='3.2.3b.htm'" src="../images/next.gif"></IMG></td>
</tr>
</table>
<br><br>
<table border=0>
<tr>
<td width=5></td>
<td colspan=2>
<br>
<b>3.2.3 编写词法分析程序</b><br><br>
</td>
</tr>
<tr>
<td width=10></td>
<td width=30></td>
<td>
<p> <br>
在构造出识别单词的DFA M之后,让我们进一步考虑词法分析器的实现问题。最简单的办法是让每个状态结对应一小段程序。为此,下面我们将引进一组全局变量和过程,把它们作为实现词法分析的程序的基本成分。这些变量和过程是:</p>
</td>
</tr>
<tr>
<td width=10></td>
<td width=30></td>
<td>
<table>
<tr>
<td width=30>
</td>
<td>
<b>1.</b> character字符变量,存放最新读进的源程序字符。 <br>
<b>2.</b> token字符数组,存放构成单词符号的字符串。 <br>
<b>3.</b> getchar子程序过程,把下一个输入字符读到character中,把读入源程序字符的向前指针前移一个字节位置。 <br>
<b>4.</b> getbc子程序过程,检查character中的字符是否为空白、换行标记或结尾标记。若是,则调用getchar直至character中进入一个非空白也非标记字符为止。此时向前指针已指向下一个要读入的字符(即当前所取的单词符号的第一个字符),需将单词符号的开始指针移到向前指针的位置。<br>
<b>5.</b> concatenation子程序过程,把character中的字符连接到token中的字符串的后面。例如,假定token字符型数组中原来放有“ab”,而character中存放着“c”,经调用concatenation后,token数组中应放有“abc”。<br>
<b>6.</b> letter和digit布尔函数过程,它们分别判断character中的字符是否为字母和数字,从而给出true或false。 <br>
<b>7.</b> reserve整型函数过程,对token中的字符串查找保留字表,若它是一个保留字则返回它的编码;否则返回非保留字信息,譬如若0不是保留字的编码,则可回送0值。 <br>
<b>8.</b> retract子程序过程,把读人源程序字符的向前指针回调一个字节位置,把character中的字符置为空白。 <br>
<b>9.</b> buildlist子程序过程,为一般标识符和常数建立符号表。 <br>
<b>10.</b>return子程序过程,收集并携带必要的信息返回调用程序,即语法分析程序。<br><br>
</td>
</tr>
</table>
</td>
<tr>
<td width=10></td>
<td width=30></td>
<td>
<p>这些函数和子程序过程都不难编制,使用它们能够方便地构造词法分析程序。一般来说,可让每个状态结对应一程序段。例如,对于不含回路的分叉状态结(如图3.4中的状态14)来说,可让它对应一个case语句或一组if…then…else语句。对于含有回路的状态结(如图3.4中的状态1)来说,可让它对应一个由while语句和if语句构成的程序段。对于终态结来说,可让它对应一个返回过程,即return过程,并从而附带着词法分析中所得到的单词的信息二元式,返回语法分析程序。本书中描述算法的程序大都用类似Pascal语言来书写。相对于图3.4的词法分析程序可概要地构造如下页所示:</p>
</td>
</tr>
</table>
<table align=right width=300>
<tr>
<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='3.2.2b.htm'" src="../images/previous.gif"></IMG></td>
<td><IMG onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='3.2.3b.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 + -