算符优先分析程序

算符优先分析程序

ID:7273211

大小:71.50 KB

页数:12页

时间:2018-02-10

算符优先分析程序_第1页
算符优先分析程序_第2页
算符优先分析程序_第3页
算符优先分析程序_第4页
算符优先分析程序_第5页
资源描述:

《算符优先分析程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理实验报告实验名称:_____算符优先分析程序___实验类型:________设计型实验_________指导教师:_________何中胜_____________专业班级:________09计二______________姓名:_________周健_______________学号:______09030231_____________电子邮件:____________________________实验地点:_______院士楼720_____________实验成绩:_________________________一、试验目的和要求通过设计、编制

2、、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。1、选择最有代表性的语法分析方法,如LL(1)语法分析程序、算符优先分析程序和LR分析分析程序,并至少完成两个题目。2、选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。⑴实习前的准备按实习目的和要求,编写语法分析程序,同时考虑相应的数据结构。⑵调试调试例子应包括符合语法规则的算术表达式,以及分析程序能够判别的若干错例。⑶输出对于所输入的算术表达式,不论对错,都应有明确的信息告诉外界。⑷扩充

3、有余力的同学,可适当扩大分析对象。譬如:①算术表达式中变量名可以是一般标识符,还可含一般常数、数组元素、函数调用等等。②除算术表达式外,还可扩充分析布尔、字符、位等不同类型的各种表达式。③加强语法检查,尽量多和确切地指出各种错误。⑸编写上机实习报告。二、实验过程1、准备:阅读课本有关章节,确定算术表达式的文法。2、考虑好设计方案。3、设计出模块结构、测试数据,初步编制好程序。4、上机调试,发现错误,分析错误,在修改完善。算符优先文法分为两种:一种是自上而下的,一种是自下而上的,本次采用自上而下的方式。三、试验结果三、讨论与分析自下而上分析技术:从输入符号串出发,试图

4、把它规约为识别符号。自下而上分析技术是一种“移进-归约”法。从输入符号串开始,从左到右进行扫描,将输入符号逐个移入一个栈中,边移入边分析,一旦栈顶符号串形成某个产生式的右部时,就用该产生式的左部非终结符代替,称为归约。重复这一过程,直到归约到栈中只剩下文法的开始符号时,则分析成功,称为“移进-归约”方法。分析器做四种动作:1、移进:将下一输入符号移入栈2、归约:当栈顶出现句柄,用产生式左侧的非终结符替换栈顶的句柄3、接受:分析成功,是归约的一种特殊情况4、出错:栈顶的内容与输入符号相悖,进行出错处理构造FIRESVT和LASTVT,建立算符优先关系表来辅助判断FIR

5、ESVT:对每个非终结符P,FIRSTVT(P)={a

6、P⇒a...或P⇒Qa...,a为终结符,P、Q为非终结符}LASTVT:对每个非终结符P,LASTVT(P)={a

7、P⇒...a或P⇒...aQ,a为终结符,P、Q为非终结符}构造优先关系表:1、如果每个非终结符的FIRSTVT和LASTVT集均已知,则可构造优先关系表。2、若产生式右部有...aP...的形式,则对于每个b∈FIRSTVT(P)都有a≦b(优先集);3、若产生式右部有...Pb的形式,则对于每个a∈LASTVT(P)集,都有a≧b;4、若产生是形如:A→…ab…或A→…aBb…形式,则有a≒

8、b。5、#与其他终结符的优先关系可利用拓广文法S‟à#S#来获得。五、附录#include"stdio.h"#include"malloc.h"structLchar{charchar_ch;structLchar*next;}LLchar,*p,*h,*temp,*top,*base;inttable[8][8]={{1,1,-1,-1,-1,1,-1,1},{1,1,-1,-1,-1,1,-1,1},{1,1,1,1,-1,1,-1,1},{1,1,1,1,-1,1,-1,1},{-1,-1,-1,-1,-1,-1,-1,0},{1,1,1,1,0,1,0,1}

9、,{1,1,1,1,0,1,0,1},{-1,-1,-1,-1,-1,0,-1,-1}};//存储算符优先关系表,大于为1,小于或等于为-1,其它为0表示出错charcurchar;charcurcmp;intright;/*设置开关项,当出错时为0*/inti,j;intk;/*比较字符在栈的位置*/voidpush(charpchar)/*入栈函数*/{temp=(Lchar*)malloc(sizeof(LLchar));temp->char_ch=pchar;temp->next=top;top=temp;}voidpop(void)/*出栈函数*/{i

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

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

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