编译原理之表达式求值

编译原理之表达式求值

ID:37718776

大小:16.22 KB

页数:6页

时间:2019-05-29

编译原理之表达式求值_第1页
编译原理之表达式求值_第2页
编译原理之表达式求值_第3页
编译原理之表达式求值_第4页
编译原理之表达式求值_第5页
资源描述:

《编译原理之表达式求值》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理之表达式求值中缀表达式a+b*(c+d)-e前续表达式(波兰)-e+a*b+cd后续表达式(逆波兰)abcd+*e-+中缀转后缀1.构建二叉树->后续遍历2.堆栈方法:中缀表达式到逆波兰表达式的转换及求值     (ChinaDHF)最近要写一个工资管理软件,不可避免的要用到公式的定义及求值等问题。对于数学表达式的计算,虽然也有直接对表达式进行扫描并按照优先级逐步计算的方法,但感觉还是不如将中缀表达式转换为逆波兰表达式更容易处理。    使用逆波兰表达式,则有以下几件工作需要去做:    1.对中缀表达式进行语法分析,或称合法性检查。 

2、   2.将中缀表达式转换为逆波兰表达式。    3.计算逆波兰表达得到我们想要的值。以下是我为实现该功能而写的一个简单的类:usingSystem;usingSystem.Text;usingSystem.Collections;usingSystem.Text.RegularExpressions;namespaceSeaking{    publicclassRpnExpression    {        检查中缀表达式的合法性#region检查中缀表达式的合法性        ///

        ///检查中缀表

3、达式是否合法。        ///

        ///        ///        publicstaticboolIsRight(stringexp)        {            stringpMatch=@"([^(^)]+)";//匹配最“内”层括号及表达式            stringnumberMatch=@"d+(.d+)?";//匹配数字            stringexMa

4、tch=@"^0([-+*/]0)*$";//匹配无括号的、用0替换所有的数字后的表达式            exp=Regex.Replace(exp,numberMatch,"0");//为简化检测,用0替换所有的数字            while(Regex.IsMatch(exp,pMatch))            {                foreach(MatchmatchinRegex.Matches(exp,pMatch))                {                    stringt

5、mp=match.Value;                    tmp=tmp.Substring(1,tmp.Length-2);//去掉"("和")"                    if(!Regex.IsMatch(tmp,exMatch))returnfalse;                }                exp=Regex.Replace(exp,pMatch,"0");//将最内层的括号及括号内表达式直接用一个0代替            }            returnRegex.IsMa

6、tch(exp,exMatch);        }        #endregion        生成逆波兰表达式#region生成逆波兰表达式        ///

        ///获取逆波兰表达式。        ///        ///        ///        publicstaticstringRpnExp(stringexp)        {            if(!IsRig

7、ht(exp))thrownewApplicationException("非法的中缀表达式。");            StackskOp=newStack();//定义操作符堆栈            StringBuilderrpn=newStringBuilder();//逆波兰表达式            char[]charExp=exp.ToCharArray();//将中缀表达式转换为char数组            stringdigit=string.Empty;//数字字符串            for(inti=0

8、;i

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

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

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