基于算符优先分析方法

基于算符优先分析方法

ID:14854868

大小:55.50 KB

页数:10页

时间:2018-07-30

基于算符优先分析方法_第1页
基于算符优先分析方法_第2页
基于算符优先分析方法_第3页
基于算符优先分析方法_第4页
基于算符优先分析方法_第5页
资源描述:

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

1、基于算符优先分析方法的表达式语法分析器年级:2007级班级:计算机科学与技术四班姓名:毛群晖学号:20074042154指导老师:段明秀年月日摘要:算符优先分析法是Floyd在1963年首先提出来的,是一种古典而又实用的方法,用这种方法在分析程序语言中的各类表达式时尤为有效。不少编译程序中都使用这种方法分析表达式。算符优先分析法就是仿照算术表达式的运算过程而提出的一种自底向上的语法分析方法。其基本思想是:首先规定算符,这里是文法的终极符之间的优先关系,然后根据这种优先关系,通过比较相邻算符的优先次序来确定句型中的“句柄”,然后进行归约。算符优先分析法的关键:算符优先分析

2、法的关键就是寻找当前句型中的最左素短语,并归约它。关键字:小于、大于、等于、句柄、归约、一、对表达式文法G[E’]构造算符优先关系表。计算算符优先只针对于终结符,终结符之间的优先关系有三种,在计算优先关系之前我们先定义两个集合,对于任意两个终结符(a,b)FIRSTVT(B)={b

3、B=>b…或B=>Cb…},其中…表示V*中的符号串。LASTVT(B)={a

4、B=>…a或B=>…aC}三种优先关系:(1)等于关系:可直接查看产生式的右部,对如下形式的产生式A->…ab…A->…aBb…则有a=b成立。(2)小于关系:求出每个非终结符B的FIRSTVT(B),观察如下形

5、式的产生式A->…aB…对每一b∈FIRSTVT(B)有a≮b成立(3)大于关系:计算每个非终结符B的LASTVT(B),观察如下形式的产生式A->…Bb…对每一a∈LASTVT(B)有a≯b成立表达式文法G[E’]:E’→#E#E→E+Q

6、QQ→Q-T

7、TT→T*F

8、FF→F/M|MM→M^P|PP→(E)|i根据上面的规则手工构造上述文法的算符优先表如下:+-*/^()i#+≯≮≮≮≮≮≯≮≯-≯≯≮≮≮≮≯≮≯*≯≯≯≮≮≮≯≮≯/≯≯≯≯≮≮≯≮≯^≯≯≯≯≯≮≯≮≯(≮≮≮≮≮≮=≮)≯≯≯≯≯≯≯i≯≯≯≯≯≯≯#≮≮≮≮≮=packagecom.op.co

9、re;/********************************************************************************简单表达式文法G[E’]构造算符优先关系表。*E’→#E#*E→E+Q

10、Q*Q→Q-T

11、T*T→T*F

12、F*F→F/M|M*M→M^P|P*P→(E)|i*@author*/publicclassPriorityTable{privatestaticchartable[][]={//+*/i()#^{'>','<','<','<','<','>','>','<'},//+{'>','>','>','<',

13、'<','>','>','<'},//*{'>','>','>','<','<','>','>','<'},///{'>','>','>','$','$','>','>','>'},//i{'<','<','<','<','<','=','$','<'},//({'>','>','>','$','$','>','>','>'},//){'<','<','<','<','<','$','=','<'},//#{'>','>','>','<','<','>','>','<'},//^};//算符优先表/************************************

14、****************************************判断一个符号在算符优先表中位置**@paramc*@return*/privatestaticintjudgePriority(charc){intpriority=0;switch(c){case'+':priority=0;break;case'*':priority=1;break;case'/':priority=2;break;case'i':priority=3;break;case'(':priority=4;break;case')':priority=5;break;cas

15、e'#':priority=6;break;case'^':priority=7;break;}returnpriority;}/***判断两个算术符的优先级**@paramm*为符号栈的栈顶元素*@paramn*为当前输入算术符*@return*/publicstaticchargetPriority(charm,charn){returnPriorityTable.table[judgePriority(m)][judgePriority(n)];}}二、根据算符优先表用栈结构来实现算符优先分析设置两个栈:存放运算符的OPTR栈和存放

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

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

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