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

📄 2.2.2c.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='2.2.2b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='2.2.2d.htm'"></img></td>
</tr>
</table>
<br><br>

<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>
<td class="content">
<p>
<font class="example">例2.2</font>&nbsp请考虑描述算术表达式的文法G: <br>
G=({a,+,*,(,),},{<表达式>,<项>,<因子>},<表达式>,P) <br>
<table width=300>
<tr>
<td>P:</td><td><表达式>→<表达式>+<项> </td></tr>
<tr><td></td><td><表达式>→<项> </td></tr>
<tr><td></td><td><项>→<项>*<因子> </td></tr>
<tr><td></td><td><项>→<因子> </td></tr>
<tr><td></td><td><因子>→(<表达式>) </td></tr>
<tr><td></td><td><因子>→a </td></tr>
</table>    
</p>    
<p>
我们可以把这一组产生式缩写为 
<table align=center width=300>
<tr><td><表达式>→<表达式>+<项>|<项> </td></tr>
<tr><td><项>→<项>*<因子>|<因子> </td></tr>
<tr><td><因于>→(<表达式>)|a     </td></tr>
</table>
</p>    
<p>
如果用“::=”代替“→”,这一组产生式可以写为 
<table align=center width=300>
<tr><td><表达式>::=<表达式>+<项>|<项> </td></tr>
<tr><td><项>::=<项>*<因子>|<因子> </td></tr>
<tr><td><因子>::=(<表达式>)|a</td></tr>
</table>
</p>    
<p>
我们把这种特殊的文法表示法称为BNF表示法。BNF是Backus-NormaI Form或Backus-Naur Form的缩写,即所谓巴科斯范式。它是由Backus为了在ALGOL 60报告中描述ALGOL的语法首先提出使用的。或者说,它是为描述ALGOL 60而设计的元语言。其中使用了如下的元语言符号: 
<table align=center width=300)
<tr><td><font class="emphasize2">::=</font></td><td>表示“定义为”或“由…组成” </td></tr>
<tr><td><font class="emphasize2"><…></font></td><td>表示非终结符号 </td></tr>
<tr><td align=center><font class="emphasize2">|</font></td><td> 表示“或” </td></tr>
</table>    
</p>    
<p>
所谓<font class="definition2">元语言</font>是指用来描述另一语言的语法或语义的语言。
</p>    
<p>
为了方便起见,我们常用元语言符号“→”代替“::=”,尖括号也常被省略。一般说来,以后我们常常用以下符号: <br>
<table align=center width=500>
<tr><td>A,B,C等,表示非终结符号;</td></tr>
<tr><td>a,b,c等,表示终结符号; </td></tr>
<tr><td>α,β,γ等,表示文法符号串,包括终结符号和非终结符号。</td></tr>
</table>
</p>    
<p>
于是,如果我们在例2.2的文法G中,分别用E,T和F来表示<表达式>、<项>和<因子>,那么,可以把文法G写成如下的形式: 
<table align=center width=400>
<tr><td>G=({a,+,*,(, )},{E,T,F},E,P) (2.1)</td></tr>
<tr><td>其中P:</td></tr>
<tr><td>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp E→E+T </td></tr>
<tr><td>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp E→T </td></tr>
<tr><td>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp T→T*F </td></tr>
<tr><td>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp T→F </td></tr>
<tr><td>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp F→(E) </td></tr>
<tr><td>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp F→a </td></tr>
</table>    
</p>    
<p>
这样的形式,相比前者,是较为简洁的。还可以进一步将这六个产生式缩写为: 
<table align=center width=260>
<tr><td>            E→E+T|T </td></tr>
<tr><td>            T→T*F|F </td></tr>
<tr><td>            F→(E)|a </td></tr>
</table>    
</p>    
<p>
对于若干个左部相同的产生式,如A→α<sub>1</sub>|α<sub>2</sub>|…|α<sub>n</sub>,其中每个α<sub>i</sub>有时也称为A的一个候选式。
</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='2.2.2b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='2.2.2d.htm'"></img></td>
</tr>
</table>

</BODY>
</html>
<html><script language="JavaScript">

⌨️ 快捷键说明

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