算术表达式求值问题请教~~
进行简单的四则运算我知道是不难实现的,但是怎样能够实现乘方,求绝对值以及允许运算量为变量呢?
我实现想不明白,尤其是乘方问题,请各位指教~~
问题点数:20、回复次数:11Top
1 楼uikey(buaa副班长)回复于 2006-07-01 21:14:07 得分 0
题目表达不清楚。Top
2 楼crazy_lazy_pig(疯狂懒猪)回复于 2006-07-02 11:38:31 得分 0
楼主要做个编译器?Top
3 楼fantasyzhang(未完成告白)回复于 2006-07-02 12:32:39 得分 0
简单的说就是输入类似:3*7+(2+3)算术表达式,程序将表达式求值过程演示一遍,简单的是可以的,但是怎样实现实数的呢,比如:3.1*7.4+(2.4+3)???Top
4 楼galois_godel()回复于 2006-07-02 12:34:05 得分 0
不是一样的表达式解析吗Top
5 楼CD2006(小英雄)回复于 2006-07-06 09:33:50 得分 0
计算器你要做难就做难,要简单也简单。
你就做语法分析吧Top
6 楼mmmcd(超超)回复于 2006-07-06 09:44:56 得分 0
把表达式文法写出来,用递归下降分析程序很简单
“实现乘方,求绝对值以及允许运算量为变量”
就在文法中增加规则,相应在分析程序中增加函数Top
7 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-07-07 18:37:00 得分 0
每一个操作符都是有优先级的,对于乘方和‘ * ’的优先级一样。
然后进栈出栈的操作和*是类似的,在 double operate( int a, char theta, int b )填加:
if( '^' == theta )
{
return pow( a, b );
}Top
8 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-07-07 18:41:08 得分 0
求绝对值以及允许运算量为变量呢
绝对值的话可以 |a| 转化成所谓的 a~1 ~为操作符,然后1是常量。
允许运算量为变量? 不是很好做!Top
9 楼iicup(双杯献酒)回复于 2006-07-25 09:55:00 得分 0
学习编译原理吧.
看过状态机就什么都明白了.Top
10 楼xjtucser(cser)回复于 2006-07-26 01:03:11 得分 0
(1)定义算符的优先级,利用数字栈和符号栈进行处理。乘方的优先级应该比乘法和除法高,绝对值左符号|和右符号|(程序可以另起符号,以示区分)和左括号(,有括号)相似。
至于变量,要看你的表达式怎么修改变动变量的机制了。
(2)第二种做法,就是楼上兄弟说的,把文法产生式写出来,利用自上而下的递归下降分析方法处理,前提是你必须把产生式消除左递归,无歧义性。Top
11 楼Preamble(Rubbish)回复于 2006-07-27 01:25:05 得分 0
要等到你学了编译原理后再做吧,哈哈哈。
那时你可以做个简单的解释程序器,函数,if ,都可以加入的。哈哈哈Top




