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

下载本文档

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

文档简介

1、 算符优先分析法设计与实现一、实验目的加深对语法分析器工作过程的理解;加强对算符优先分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二、实验内容在实验1的基础上,用算符优先分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。三、实验要求:1. 对语法规则有明确的定义;2. 编写的分析程序能够对实验一的结果进行正确的语法分析;3. 对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;四、实验步骤1. 定义目标语言的语法规则;2. 求解预测分析方法需要的符号集

2、和分析表;3. 依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束;4. 对遇到的语法错误做出错误处理。五、实验报告要求详细说明你的程序的设计思路和实现过程。实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。算符优先分析器(综合性实验)一、实验目的掌握 FirstVT和 LastVT集的算法,算符优先分析表的构造算法及其分析过程,并掌握中间代码产生过程。二、实验内容算术表达式和赋值语句的文法可以是(可以根据需要适当改变): Si=EEE+TEE-TETTT*F TT/F TFF(E)Fi 根据算符优先分析法,将赋值语句进行语法

3、语义分析,翻译成等价的一组基本操作,每一基本操作用四元式表示。三、实验过程和指导1、构造FirstVT和LastVT集合给定一个上下文无关文法,根据算法设计一个程序,求文法中每个非终结符的 FirstVT 集和LastVT 集。算符描述如下:/*求 FirstVT 集的算法*/ PROCEDURE insert(P,a); IF not FP,a then begin fp,a = true; (P,a)进栈 end; Procedure FirstVT; Begin for 对每个非终结符 P和终结符 a do FP,a = false for 对每个形如 Pa或 PQa的产生式 do In

4、sert(P,a) while stack 非空 begin 栈顶项出栈,记为(Q,a) for 对每条形如 PQ的产生式 do insert(P,a) end; end.2、构造算符优先分析表依据文法和求出的相应FirstVT和 LastVT 集生成算符优先分析表。算法描述如下:for 每个形如 P-X1X2Xn的产生式 do for i =1 to n-1 do begin if Xi和 Xi+1都是终结符 then Xi = Xi+1 if i= n-2, Xi和 Xi+2 是终结符, 但 Xi+1 为非终结符 then Xi = Xi+2 if Xi为终结符, Xi+1为非终结符 th

5、en for FirstVT 中的每个元素 a do Xi Xi+1 ; end;3、构造算符优先分析和中间代码产生过程。四、输入数据和输出数据若输入文法: E-E+T | T T-T*F | F F- (E) | i 将得到如下所示的 FirstVT 集和LastVT数组。输出的优先关系表如下:若输入的语句是 a:=b+c*(e-a)则输出:(-,e,a,T1)(*,c,T1,T2)(+,b,T2,T3)(:=,T3,_,a)算符优先文法处理 一、实验目的掌握算符优先分析法的原理,利用算符优先分析法将赋值语句进行语法分析,翻译成等价的四元式表示。二、实验内容: 1.算术表达式的文法可以是(你

6、可以根据需要适当改变): EE+E|E-E|E*E|E/E|(E)|i 2.根据算符优先分析法,将表达式进行语法分析,判断一个表达式是否正确。 3.将赋值语句进行语法分析,翻译成等价的一组基本操作,每一基本操作用四元式表示。 三、实验预习提示1.实验原理 我们要分析的表达式满足下面的算符优先矩阵 21+ - * / ( ) + - * / ( =为实现算符优先算法,可以使用两个工作栈。一个叫做OPTR,用以寄存运算符,一个叫OPND,用以寄存操作数或结果。算法描述如下: 1首先置操作数栈为空栈,将表达式起始符;作为运算符栈的栈底元素。2依次读入表达式中每个单词,若是操作数则进OPND栈,若是运

7、算符则转3。 3将此运算符1与OPTR栈顶元素2进行比较,即查上表,若12,则:1进栈,转2 若12,如1为;,则分析成功,否则OPTR栈顶元素出栈,并转2 若12,则出栈OPND栈顶元素至b,又出栈其栈顶元素至a,出栈OPTR栈顶元素至t,进行运算r=atb(t为运算符),并将结果r存入栈OPND后转3。 若1和2之间无优先关系,则报错。 四、实验步骤(一)准备: 1.阅读课本有关章节,花一周时间确定算术表达式的文法,设计出算符优先关系表;2.考虑好设计方案; 3.设计出模块结构、测试数据,初步编制好程序。 (二)上课上机:上机调试,发现错误,分析错误,再修改完善。教师根据学生的设计方案与学

8、生进行探讨,以修改方案和代码。(三)程序要求: 程序思路(仅供参考): 1.借用实验一的结果,可将其中的取字符函数几乎原封不动地移植过来,其中的分割和分析单词的方法可借用过来分割现在这个实验的运算符、常量和变量。2.模块结构:(1)初始化:设立算符优先关系表(或优先函数)、初始化变量空间(包括堆栈、结构体、数组、临时变量等);(2)控制部分:将一个表达式从文件中读出;(3)词法分析:将表达式分割成单词序列;(4)利用算符优先文法进行表达式处理:根据算符优先关系表(或优先函数)对表达式单词序列进行堆栈(或其他)操作,得到并保存四元组,如果遇到错误则显示错误信息;(5)输出四元组。 3.程序输入/输出示例: 如参考C语言的运算符。输入如下表达式(以分号为结束)和输出结果: (1)10; 输出:正确 (2)1+2; 输出:正确 (3)(1+2)/3+4-(5+6/7); 输出:正确(4)(1-2)/3+4 输出:错误 (5)1+2-3+(*4/5) 输出:错误 注意:1.为降低难度,表达式中不含变量(只含无符号整数);2.如果遇到错误的表达式,应输出错误提示信息(

温馨提示

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

评论

0/150

提交评论