我的任务是编写一个程序(不幸的是,在C)其内容表达的缀符号(用的变量,一元和二元经营者)和存储记忆,然后评估。此外,检查是否正确,应该进行。

例如:

3*(A+B)-(-2-78)*2+(0*A)

之后我得到了所有价值观,程序应当计算。

问题是:什么是最好的方式做到这一点?(优化和验证)

什么记号的选择,因为基地的树吗?

我应该代表表达的树吗?如果这样我就可以很容易地优化(只是下降的节点返回0或水木清华人).

干杯,

有帮助吗?

解决方案

链接的建议的意见过格雷格Hewgill上包含所有的信息,你会需要:

如果你坚持在写你自己,

  • 一个 递归裔分析器 可能是最简单的方式去做。
  • 否则你可能会使用的工具,就像野牛(由于你的工作在C)。 这个教程 是我见过的最好的工作与Flex和野牛(或Lex/Yacc)

你也可以搜索 "表达的评估" 上演示-他们有很多文章的主题。

我碰到的M4项目的评估程序表达前一段时间。你可以研究它的代码看看它是如何工作的。我认为 这个链接 在谷歌上Codesearch是的版本,我看到了。

其他提示

您的问题暗示了对您的解决方案的要求:

  不幸的是,C

所以这里的一些建议可能是不允许的。不过,我建议这是一个非常复杂的问题需要解决,而且你会想要找到一个合适的现有库,你可以链接到你的C代码中为你做这个很多 。这可能会减少使代码工作所需的时间和精力,并减少持续的维护工作。当然,你必须考虑许可,但如果没有一个好的解析/评估库“在那里”,我会感到惊讶。这可以做得很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top