收藏 分享(赏)

算符优先分析程序的设计与实现.doc

上传人:HR专家 文档编号:11590049 上传时间:2020-07-18 格式:DOC 页数:6 大小:379KB
下载 相关 举报
算符优先分析程序的设计与实现.doc_第1页
第1页 / 共6页
算符优先分析程序的设计与实现.doc_第2页
第2页 / 共6页
算符优先分析程序的设计与实现.doc_第3页
第3页 / 共6页
算符优先分析程序的设计与实现.doc_第4页
第4页 / 共6页
算符优先分析程序的设计与实现.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、实验2:算符优先分析程序的设计与实现【实验目的和要求】设计、编制、调试一个典型的算符优先语法分析程序,实现对如下文法的算符优先语法分析,进一步掌握常用的语法分析方法。算符优先分析法是Floyd在1963年首先提出来的,是一种古典而又实用的方法,用这种方法在分析程序语言中的各类表达式时尤为有效。不少编译程序中都使用这种方法分析表达式。算符优先分析法就是仿照算术表达式的运算过程而提出的一种自底向上的语法分析方法。其基本思想是:首先规定算符,这里是文法的终极符之间的优先关系,然后根据这种优先关系,通过比较相邻算符的优先次序来确定句型中的“句柄”,然后进行归约。算符优先分析法的关键:算符优先分析法的关

2、键就是寻找当前句型中的最左素短语,并归约它。【实验内容】从键盘输入表达式串,利用算符优先法求出其值,如输入表达式有错,则给出报错提示。表达式以“#”结尾。构造算符优先关系表的算法用程序来实现对文法的算符优先关系表的构造。例如:输入字符串“2*(3+4)+5#”,字符串以#结尾,通过运算输出“2*(3+4)+5=19”【实验环境】Windows PC机,任何版本的C语言。【提交内容】提交实验报告,报告内容可以在如下两种方式中任选一个:1、能够读懂程序代码,正常输入输出(截图),画出核心功能的数据流图,对数据流图进行文字描述。2、按照所讲的思路,用C语言编写程序,程序输入输出正常(提供程序代码、输

3、入输出截图)。【程序代码说明(java程序)】1、构造算法优先关系表:PriorityTable.java,table数组2、切分运算符import java.util.Vector;public class StringUtil public static String splitExp(String str) Vector v = new Vector();int beginIndex = 0;for (int i = 0; i 32 & str.charAt(i) 48 & str.charAt(i) != 46)| str.charAt(i) = 94) if (beginIndex

4、!= i)v.add(str.substring(beginIndex, i);v.add(String.valueOf(str.charAt(i);beginIndex = i + 1;if (beginIndex != str.length()v.add(str.substring(beginIndex, str.length();String result = new Stringv.size();for (int i = 0; i v.size(); i+) resulti = v.get(i);return result;3、核心程序:OperatorPriority.java的sc

5、anner方法1)分割字符String exp = StringUtil.splitExp(input);2)程序处理过程2 * (3 + 4)依次进栈,数值进入opndStack,运算符进入optrStack* ( + ,exp数组中的字符均比optrStack栈中的第一个运算符优先规则小“)”的优先级比栈中的第一个运算符“+”优先规则小,则将opndStack栈中的前两个数值按照optrStack栈中的第一个运算符进行计算,计算完成后,将opndStack栈中的前两个数值出栈,并将结果7进栈,同时将optrStack栈中的第一个运算符“+”出栈得到如下结果。exp数组中的字符“)”与opt

6、rStack栈中的第一个运算符“)”优先规则相等,则将optrStack栈中的第一个运算符“)”出栈,得到如下图结果。exp数组中的字符“+”与optrStack栈中的第一个运算符“*”优先规则小,则将opndStack栈中的前两个数值按照optrStack栈中的第一个运算符进行计算,计算完成后,将opndStack栈中的前两个数值出栈,并将结果14进栈,同时将optrStack栈中的第一个运算符“*”出栈。exp数组中的字符“+”与optrStack栈中的第一个运算符“#”优先规则高,则“+”入栈,“5”入栈,结果如下图 exp数组中的字符“#”与optrStack栈中的第一个运算符“+”优先规则小,则将opndStack栈中的前两个数值按照optrStack栈中的第一个运算符进行计算,计算完成后,将opndStack栈中的前两个数值出栈,并将结果19进栈,结果如下图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报