编写表达式:Infix,Postfix和Prefix

时间:2009-10-22 08:15:20

标签: c binary-tree prefix notation infix-notation

我的任务是编写一个应用程序(不幸地在C上),它以中缀表示法(带变量,一元和二元运算符)读取表达式并将其存储在内存中,然后对其进行评估。此外,应该检查是否正确。

例如:

  

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

获得所有值后,程序应该计算它。

问题是: 这样做的最佳方法是什么?(通过优化和验证)

选择什么表示法作为树的基础?

我应该将表达式表示为树吗?如果是这样,我可以很容易地优化它(只需删除返回0或其他的节点)。

干杯,

2 个答案:

答案 0 :(得分:2)

Greg Hewgill在评论中建议的链接包含您需要的所有信息:

如果你坚持自己写,

  • recursive descent parser可能是手工完成的最简单方法。
  • 否则你可以使用像Bison这样的工具(因为你在C中工作)。 This tutorial是我见过的与Flex和Bison(或Lex / Yacc)合作的最好的

您还可以在Codeproject上搜索"expression evaluator" - 他们有很多关于该主题的文章。

我前段时间遇到了M4程序的表达式评估程序。您可以研究其代码以了解其工作原理。我认为Google Codesearch上的this link是我看到的版本。

答案 1 :(得分:0)

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

  不幸的是,C

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