当前位置: 首页 > 知识库问答 >
问题:

用于即时评估的调车场算法

乐正锦
2023-03-14

通常,计算中缀数学表达式的程序使用调车场算法的一些变体,首先将表达式转换为反向波兰符号,然后计算反向波兰符号以获得单个最终值。

我的问题是,有没有什么著名的算法可以绕过INFIX-

据推测,在编写编译器或解析器来翻译INFIX-

那么,有没有什么众所周知的算法可以在不首先转换为RPN的情况下解析中缀表达式?或者转换为RPN通常比任何其他方法更有效?

共有1个答案

芮博厚
2023-03-14

您可以很容易地修改分流码算法,以便在运行时立即计算表达式,而不是构建RPN表示。具体来说,每当您通常从堆栈中弹出一个运算符和两个操作数,而不是将这些令牌追加到输出时,只需计算表达式并将结果推回操作数堆栈。最后,在最后,通过弹出两个操作数、弹出一个操作数、计算结果并将其推回堆栈来计算运算符和操作数堆栈隐含的表达式。

例如,要计算3*4 2,请执行以下操作:

Process 3:
  Operators  
  Operands    3

Process *:
  Operators   *
  Operands    3

Process 4:
  Operators   *
  Operands    3 4

Process +:
  Operators   +
  Operands    12

Process 2:
  Operators   +
  Operands    12 2

End of input:
  Operators   
  Operands    14

希望这能有所帮助!

 类似资料:
  • 下面是我的代码: 我不断收到奇怪的错误,一个告诉我,嵌套if语句中的if(operators.peek().equals...位返回一个EmptyStackException。我在试图将弹出的数字(endNumber)转换为double时又收到了一个错误。我在将其转换为double时遇到了一个问题。

  • 我正在使用Spring WebFlow 2.5.0,但是我的SpEL表达式没有得到正确的计算。我想我一定是做了什么与我的WebFlow配置或SpEL错误,但我不确定哪个。 我的登录流中有以下决策状态。xml: 但是,即使我的方法返回一个Event.success(),我也从未转换到状态。测试结果似乎总是错误的。 是我的SpEL错了,还是我做评估/测试的方式错了?如何调试SpEL评估以查看发生了什么

  • 请帮我解决这个问题。

  • 问题内容: 我找不到规范的相关部分来回答这个问题。在Java中的条件运算符语句中,是否同时评估true和false参数? 所以下面的代码可以抛出NullPointerException 问题答案: 由于您需要该规范,因此在这里(摘自§15.25Conditional Operator?: ,这部分的最后一句话): 对于条件表达式的特定评估,不会评估未选择的操作数表达式。

  • 校验者: @想和太阳肩并肩 @樊雯 翻译者: @\SRY/ 学习预测函数的参数,并在相同数据集上进行测试是一种错误的做法: 一个仅给出测试用例标签的模型将会获得极高的分数,但对于尚未出现过的数据它则无法预测出任何有用的信息。 这种情况称为 overfitting(过拟合). 为了避免这种情况,在进行(监督)机器学习实验时,通常取出部分可利用数据作为 test set(测试数据集) X_test,

  • 我需要将变量(从响应中提取)从一个线程传递到另一个响应:“16540$Add373”我需要$RegEx:Ref Name:SFID RegEx:[$]模板:$1$MatchNo:1之前的数字 我已经使用beanshell断言将变量设置为jmeter属性 ${u setProperty(SFID1,${SFID})}; 在执行任务时,我得到了 断言失败消息:org。阿帕奇。乔芬。util。JMete