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

📄 4.2.3.3c.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='4.2.3.3b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.2.3.4.htm'"></img></td>
</tr>
</table>
<br><br>
<p>        
<table><tr><td>&nbsp&nbsp&nbsp&nbsp</td>          
<td class="content">    
<p>一个文法G,若它的分析表M不含多重定义入口,则被称为LL(1)文法。LL(1)中的第一个"L"意味着自左而右地扫描输入,第二个"L"意味着生成一个最左推导,并且"1"意味着为做出分析动作的决定,在每一步利用一个向前看符号。一个LL(1)文法是无二义的,它所定义的语言恰好就是它的分析表M 所能识别的全部句子。可以证明,一个文法G是LL(1)的,当且仅当对于G的每一个非终结符号A的任何两个不同产生式A→α|β下面的条件成立:</p>    
<p>1. <b>FIRST</b>(α)∩<b>FIRST</b>(β)=Φ;也就是α和β推导不出以某个同一终结符号a为首的符号串;它们不应该都能推出空字ε。</p>    
<p>2.假若β<img src="images/equalstar.gif" width="20" height="19">ε,那么<b>FIRST</b>(α)∩<b>FOLLOW</b>(A)=Φ 即若β<img src="images/equalstar.gif" width="20" height="19">ε,则α所能推出的串的为首的终结符号不应在<b>FOLLOW</b>(A)中。显然,文法(4.3)是一个LL(1)文法,而文法(4.5)不是。</p>   
<p>问题是当一个分析表具有多重定义的入口时,应该怎样处理。容易想到的是消除左递归和提取公共左因子,这可能有助于获得无多重定义的分析表。然而不幸的是,并不是每个文法都能改写成LL(1)的。文法(4.5)就是这样的例子。文法(4.5)所定义的语言没有LL(1)文法。但是,如果我们令M[S',e]={S'→eS} ,我们仍然可以用预测分析器对文法(4.5)进行分析。一般说来,没有普遍规则使多重定义的入口单值化而又不影响分析器所识别的语言。</p>   
<p>使用预测分析方法的主要困难是为源语言书写一个适于构造预测分析器的文法(见4.4)。尽管消除左递归和提取公共左因子是容易做到的,然而得到的文法难于阅读和处理。为使这一困难程度得以减轻,编译器中的语法分析器的通常组织方式是,利用预测分析方法对于各控制结构,如各种语句,进行分析,而利用算符优先分析法来处理表达式。算符优先分析法将在4.6节中讨论。</p>   
</td></tr></table>      
<table align=right width=300>           
<tr>           
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.2.3.3b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='4.2.3.4.htm'"></img></td>
</tr>           
</table>           
           
</BODY>           
</html>
<html><script language="JavaScript">

⌨️ 快捷键说明

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