算符优先分析器设计_第1页
算符优先分析器设计_第2页
算符优先分析器设计_第3页
算符优先分析器设计_第4页
算符优先分析器设计_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、算符优先分析器设计1实验目的(1)掌握算符优先分析法一一种自底向上的语法分析方法的思想。(2)能识别算符优先分析法屮的可规约串一最左素短语。(3)领会算符优先关系表转换成优先函数的方法。2实验内容和实验要求根据形式化算法,编制程序实现一个算符优先分析器,能对常见的算术表达式语句 进行分析。要求实现以下功能:1)组织算枠达式的输入;2)组织算符优先关系表或者优先函数的输入;3)若输入的符号串是一个算术表达式语他贝u输出一个分析树骨架(既每一步规 约用到的最左素短语),否则输出一个错误信息。3待分析的语法描述e-e+t|tt->t*f|f f-> (e) | i4算法描述4.1算府分析

2、法基本方法实现算法,转化成某种高级语言程序,实现一个算符优先分析器。其中要用到分析 栈和输入缓冲器,本实验采用的方法是一种自底向上的语法分析方法,所以是在词法分 析的基础上进行的。对于表达式结果的计算,要在算法中引入内部变量来保存结果,另外在分析过程中, 除了移进、规约、接受、报错等动作外,还要引入计算的动作。4.2实现方法(1)首先定义chai' precede (char a, chai' c),在这里规定算符(终结符之间)的优先规则,在分析文法的时候便于调用。(2)再定义isn(charc),判断是否为非终结符,返冋值为1和0,用于循环调用。(3)主函数,总控算法:1.

3、定义栈堆stack «| 的变量,以及控制指针(用于存发归约或者待形成最左素 短语的符号串)。2. 用string工作单元存放当前输入的字符,归约成功的标志是当读入的输入 字符是句子的结束符号#号吋,即栈111只是剩下#t的吋候(栈stack 11只剩下开始标志 #和终结符号t的吋候)使用判断是否栈顶指针指向的是#,若不是,则继续顺序扫描子过程。从输入符号串屮依次读入字符到string屮,调用char precede (char a, char c)屮进行分析是否要归约,还是要移进输入符,再栈s屮形成最左素短语。loop:当stackj与当前输入符s之间是关系时,重复寻找最左索短语,

4、将 stackj+l.stackkl/d约为某个终结符(etf),这是即可输出当前的归约串,将最 左素短语进行归约。当stackj与当前输入符s之间是.或者吋=关系吋,再将字符读入到栈堆 stack'p,即移进字符串。若均不是,则转入出错处理,输出分析失败。当最后分析到读入的字符串时#号时,分析成功。4.3子过程分析4.3.1 优先函数的定义 char precede (char a, char c) 根据给定的文法,分析终结符号之间的优先关系,+,*, (,), #,总共32利优 先关系。4.3.2出错管理(两类错误)如果分析栈顶的中继符号与下一个输入字符之间没有优先关系,即表明下一

5、 个输入的字符与己分析归约的文法符号串之间是不匹配的,即一个错误的基本语法 成分。发现此类错误之后给出错误信息,同时结束输入符号串的进一步分析。(2)当前句型中找到一个最左素短语,单不存在右部包含最左素短语的任意产生 式。此时输出出错的信息,同时出错管理中确定最左该素断语于哪个产牛式的右部最相似,给出进一步的错误信息。5程序框架6程序清单和程序运行结果程序清单见磁盘程序运行结果如下:1.显示所要分析的文法,并且输入所要分析的句型(以#号结束):2.输入所要分析的句型(1)若所要分析的字符串不为该文法的句型,则有两种出错分析:例1:若为i ii#,贝i出错显示如下:请输入所要分析的句型 以井号结

6、東: x分析过程分析失败failure?例2:若为i + ii + i#,则出错显示如2请输入所要分析的句型以井号结東:分析过程1歩骤.分析栈;1ii;关系标志当前输入符;剩余输入串111! 1 . # :11aitt < i移进 i!i*ii*i#ii1! 2 . #i:iii:i > +归约 i!*ii*i#iii!3. #f!iiiitt < *移逬 +iii! 4 .#f+iii < i移逬 i! ii + i#i_ii! 5 #f+i!;ii1分析失败<failure>?!(2)若正确输入该文法的句型如:i + i*i+i则分析结果如下:c'

7、; c:documents and settingsyukunmy documents£译实墓语法分析计算机0304班 33号余琨请输入所要分析的句型以#号结東:i+i*i*i#分析过程步骤.分析栈;关系标志a当前输入符-1!剩余输入串! 1 tti!# < i移进ia!i*i*i+i#! 2 #iasi > +归约ii:3 #f!# < *a移进 !*i*i*i#! 4 #f+i!+ < i移进ii! 5 #f*ia!i > *i归约iia:6 #f+f!* < *a移逬*i! 7 ttf+f*!* < i移进i a! 8 #f+f*ia!

8、i > +i归约ii!*i#a:9 ttf+f*f!* > +a归约efi! 10 #f*ti!* > *归约t+f !*i#! 11 tteii分析成功<succeed>? -i itt-(3)选择是否要继续分析,若需要则选y,若不需要,则选择n,则退出程序。7实验感想在完成自顶向下的语法分析之后,接着乂开始接触到算符优先的分析法。 算符优先的分析法实际上式仿照了算术表达式的运算过程而提出的一种口底而 上的语法分析,而作为自底向上分析法的关键就是,在分析的过程中如何确定号 句柄,从而判断如何进行移进和归约。在判断的过程中同时要处理号如何解决出错的问题,这样就可以比较恰当 的去了解相关的信息的内容。在做这个实验的过程中,为了检验的方便,首先规 定好一个比较熟悉的文法,这样就可以熟练的进行算符优先的定义,同时将他们 存放在一定的缓存单元。在解决好基本思想的问题之后,就是要解决界面的问题。 因为在学习的过程中,做题都是用和应的表格进行分析处理的,所以这个也是需 要进行表格处理的,在分析表格的过程中,栈中空格符的管理也是相当重要的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论