java中具有右关联性的表达式评价

时间:2013-04-13 06:30:13

标签: java

我正在尝试解决一个问题,我必须解决一个给定的表达式,该表达式包含一个或多个初始化,在同一个字符串中没有运算符优先级(尽管有括号中的子表达式)。所有运营商都有正确的优先权,因此我必须从右到左对其进行评估。我很困惑如何处理给定的问题。这里给出了详细的问题:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=108

1 个答案:

答案 0 :(得分:0)

我会给你一些尝试的想法:

首先,您需要递归评估内部括号。您希望从大多数嵌套到最少嵌套的括号,因此请使用匹配括号的正则表达式,其中不包含)。将计算结果子串到括号表达式占用的字符串部分。

如果没有括号,那么现在需要评估运算符。问题需要正确的优先权的原因是迫使你思考如何回答它 - 你不能只是读取字符串并进行计算。你必须考虑整个字符串THEN开始进行计算,这意味着存储一些描述它的结构。您可以使用许多策略来执行此操作,例如:

- 您可以使用扫描程序或正则表达式对字符串进行标记化 - 不断尝试查看字符串中的下一个项目是否为数字或者是哪个运算符,并推送它是什么类型的标记及其值列表。然后,您可以使用某种case / switch结构从右到左评估列表,以确定要为每个运算符执行的操作(或者每个运算符与数字的作用相关联)。 =本身将处理变量名称键到值的映射,并在该变量的键下插入值,然后返回(放入列表中)它生成的值,因此它可以用于另一个赋值。似乎-可以通过其右边是否有空格来确定它是减法还是负数。

- 而不是标记化,你可以在整个字符串上使用正则表达式。但是标记化更加强大。我试图建立一个计算器,基于对整个字符串一遍又一遍地应用正则表达式,但是很难让所有规则都正确并且我不推荐它。

我之前写了一个评估计算器的表达式,所以如果遇到特定的问题,你可以问我一些问题。