网站大量收购闲置独家精品文档,联系QQ:2885784924

算符优先词法分析器_编译原理完整课程设计.doc

算符优先词法分析器_编译原理完整课程设计.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算符优先词法分析器_编译原理完整课程设计 算符优先词法分析器 4 16 - 1 - 算符优先词法分析器 算符优先算法是自底而上分析方法的一种。所谓自底向上分析,也称移进—规 约分析,粗略地说他的实现思想是对输入符号串自左向右进行扫描,并将输入符逐 个移入一个后进先出的栈中,边移进边分析,一旦栈顶符号串形成某个句型的句柄 或可规约串是,就用该产生式的左部非终结符代替相应右部的文法符号串,这称为 一部规约。重复这一过程直到规约到栈中只剩文法的开始符号是则为分析成功,也 就确认输入串是文法的句子。而算符优先分析的基本思想是只规定算符之间的优先 关系,也就是只考虑终结符之间的优先关系。 本课程设计的主要目的: 1、通过本次课程设计,全面系统的了解编译原理程序构造的一般原理和基本实 现方法,尤其是对自底向上的优先分析方法的认识和理解; 2、提高对编译程序工作基本过程及其各阶段基本任务的分析技能; 3、加强对编译程序的生成过程、构造工具及编译程序总流程框图的理解,巩固 所学的课本知识。 算符优先分析法是一种有效的自底向上的分析方法。自底向上分析方法面临的 主要问题是如何确定可归约串,而算符优先分析法根据两个终结符号之间的优先关 系比较,成功的解决了可归约串的问题。算符优先分析法是采用最左素短语进行归 约的,严格来讲不属于规范规约的范畴。 因此,在设计以前我们必须要知道什么是素短语和最左素短语。所谓素短语就 是指句型中具有这样性质的短语:至少含有一个终结符,且除了自身之外,不再含 有任何更小的素短语的短语。最左素短语,是指在句型的所有素短语中,处于句型 最左边的素短语。 了解了素短语和最左素短语,那么如何构造这种算法呢?首先,根据非终结符 的FIRSTVT集和LASTVT集找出它们之间的优先关系,构造算符优先矩阵。然后,由 此矩阵构造相应符号串的算符优先分析表并编写程序。 - 2 - 算符优先词法分析器 在算符优先算法中,存在定理: 一个算符优先文法G的任何句型 # NaNaNaN# 1 1 2 2 ? n n n+1 (a?V,N?V,i=1, 2, ?,n, n+1,N可有可无) TjNj 的最左素短语是满足下列条件的最左子串: NaNaNaNj j j+1 j+1 ? i i i+1 其中,aaj-1 j a= a, ?,a = aj j+1i-1i aai i+1 由该定理可以看出,在算符优先文法的句型中,任何素短语中最相近的两个终 结符的优先级相等,且素短语中位于最前面的终结符的优先级高于在句型中紧临其 前的终结符的优先级,而素短语中处于最后面的终结符的优先级高于在句型中紧随 其后的终结符的优先级。 设有算符优先文法G[S]=(V, V, P, S),则得出如下步骤:NT 1、根据G[S]文法构造优先关系矩阵; 2、设置一个符号栈S,存放已经归约的或待形成最左素短语的符号串,另设一 个工作单元R,存放当前的待输入符号; 3、采用移进归约的方法,当符号栈S的栈顶形成可归约串——最左素短语时, 进行归约。具体方法如下: ?分析开始时,符号栈S中只有一个符号“#”,工作单元R中存放输入串的第一个终结符; ?查优先关系矩阵,比较符号栈中最靠栈顶的终结符号(假设为a)与工作单元R中的终结符(假设为b)的优先关系; ?)若a,b之间无优先关系,则出错并退出分析程序; - 3 - 算符优先词法分析器 ?)若ab或a=b,则将b进栈,扫描指针后移,工作单元R中存放下一待 输入的终结符,重复?; ?)若ab,则表明此时栈顶已经形成最左素短语,转?; ?从符号栈中最靠栈顶的终结符X开始,依次向前(向栈底方向)与最近的终n 结符比较,若X=X则继续比较X和X如此反复,直至 n-1n,n-2n-1 X X(i=1, 2, ? n, 设X= #) i-1 i 0 为止, 于是最左素短语的左界也确定,此时最左素短语为从N开始(N为在X之前紧iii临X的非终结符,若为“空”,则从X开始)一直到栈顶的符号串: ii NXNX? NXNi i i+1 i+1 n n n+1 ?在文法G[S]的产生式中,选择其右部具有NXNX? NXN形式的规i i i+1 n+1 n n n+1则进行规约(注意:此时非终结符号不必完全相同):弹出符号栈栈顶的最左素短语, 相应规则的左部非终结符进栈。若此时分析栈中只有#和文法的一个非终结符,且待分析符号串只剩下#(即工作单元R中符号为#),则表明分析成功,所分析的输入串 (源程序)是文法G[S]的句子,退出分析程序;否则,重复?。 有了以上的思路,我们首先对已经给定的文法按其产生式构造算符优先关系表, 有了算符优先关系表并满足算符优先文法时,我们就可以对

文档评论(0)

Byakko + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档