编译原理课程设计.doc

编译原理课程设计.doc

ID:53968097

大小:234.00 KB

页数:34页

时间:2020-04-11

编译原理课程设计.doc_第1页
编译原理课程设计.doc_第2页
编译原理课程设计.doc_第3页
编译原理课程设计.doc_第4页
编译原理课程设计.doc_第5页
资源描述:

《编译原理课程设计.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编译原理课程设计自顶向下语法分析器学院(系):计算机科学与技术学院学生姓名:xxxxxxxxx学号:xxxxxxxxx班级:电计1102大连理工大学DalianUniversityofTechnology目录1系统概论12需求分析23系统设计24系统实现45使用说明45.1程序运行平台45.2程序中所有定义的函数55.3文档说明65.4调试分析76课程设计总结12参考文献12附录:重要代码13I编译原理课程设计1系统概论语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法

2、规则。语法分析器在编译程序中的地位如图1所示:图1语法分析器在编译程序中的地位语言的语法结构是用上下文无关文法描述的。因此,语法分析器的工作本质上就是按文法的产生式,识别输入符号串是否为一个句子。这里所说的输入串是指由单词符号(文法的终结符)组成的有限序列。对一个文法,当给你一串(终结)符号时,怎样知道它是不是该文法的一个句子呢?这就要判断,看是否能从文法的开始符号出发推导出这个输入串。或者,从概念上讲,就是要建立一棵与输入串相匹配的语法分析树。自顶向下分析法就是语法分析办法中的一类。顾名思义,自顶向下就是从文法的开始符号出发,向

3、下推导,推出句子。这种方法是带“回溯”的。自顶向下分析的主旨是,对任何输入串,试图用一切可能的办法,从文法开始符号(根结)出发,自上而下地为输入串建立一棵语法树。或者说,为输入串寻找一个最左推导。这种分析过程本质上是一种试探过程,是反复使用不同产生式谋求匹配输入串的过程。实现这种自顶向下的带回溯试探法的一个简单途径是让每个非终结符对应一个递归子程序。每个这种子程序可作为一个布尔过程。一旦发现它的某个候选与输入串相匹配,就用这个候选去扩展语法树,并返回“真”值;否则,保持原来的语法树和IP值不变,并返回“假”值。-31-编译原理课程

4、设计2需求分析以前,人们对语法的分析都建立在人工的基础上,人工分析虽然能够做到侧类旁推,但终究人力有限,再精密的分析都会出现或多或少的错误。为减少因人为产生的错误,并加快语法的分析,故设计了这个自顶向下的语法分析器。人们只要运行程序,输入几个简单的命令或语法,就能求出人们所需要的各种结果。虽然程序设计有一定的局限性,但在这个局限中却能如人们的要求对语法进行分析,从而在一定程度上帮助人们更好的完成工作。3系统设计自顶向下的分析算法通过在最左推导中描述出各个步骤来分析记号串输入。之所以称这样的算法为自顶向下是由于分析树隐含的编号是一个

5、前序编号,而且其顺序是由根到叶自顶向下的分析程序有两类:回溯分析程序(backtrackingparser)和预测分析程序(predictiveparser)。预测分析程序试图利用一个或多个先行记号来预测出输入串中的下一个构造,而回溯分析程序则试着分析其他可能的输入,当一种可能失败时就要求输入中备份任意数量的字符。虽然回溯分析程序比预测分析程序强大许多,但它们都非常慢,一般都在指数的数量级上,所以对于实际的编译器并不合适。递归下降程序分析和LL(1)分析一般地都要求计算先行集合,它们分别称作First集合和Follow集合。由于无

6、需显式地构造出这些集合就可以构造出简单的自顶向下的分析程序。1、LL(1)文法LL(1)文法是一类可以进行确定的自顶向下语法分析的文法。就是要求描述语言的文法是无左递归的和无回溯的。根据LL(1)文法的定义,对于同一非终结符A的任意两个产生式A:=a和A:=b,都要满足:SELECT(A:=a)∩SELECT(A:=b)=Ø。这样,当前非终结符A面临输入符a时,如果a∈SELECT(A:=a),则可以选择产生式A:=a去准确匹配。如本程序中举例说明的a.txt的文法就是一个LL(1)文法:S:=aBc

7、bABA:=aAb

8、b-31

9、-编译原理课程设计B:=b

10、02、文法的左递归当一个文法是左递归文法时,采用自顶向下分析法会使分析过程进入无穷循环之中。所以采用自顶向下语法分析需要消除文法的左递归性。文法的左递归是指若文法中对任一非终结符A有推导AÞA…,则称该文法是左递归的。左递归又可以分为直接左递归和间接左递归。3、直接左递归若文法中的某一产生式形如A→Aα,α∈V*,则称该文法是直接左递归的。消除直接左递归的方法:设有产生式是关于非终结符A的直接左递归:A→Aα

11、β(α,β∈V*,且β不以A开头)对A引入一个新的非终结符A′,把上式改写为:A→βA′A′→

12、αA′

13、ε4、间接左递归若文法中存在某一非终结符A,使得AÞA…至少需要两步推导,则称该文法是间接左递归的。消除间接左递归的方法:【方法一】采用代入法把间接左递归变成直接左递归。【方法二】直接改写文法:设有文法G10[S]:S→Aα

14、β⑴A→Sγ⑵

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。