书写表达式:中缀、后缀和前缀

Posted

技术标签:

【中文标题】书写表达式:中缀、后缀和前缀【英文标题】:Writing expressions: Infix, Postfix and Prefix 【发布时间】:2009-10-22 08:15:19 【问题描述】:

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

例如:

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

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

问题是: 最好的方法是什么?(优化和验证)

选择什么符号作为树的基础?

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

干杯,

【问题讨论】:

这个问题的优秀答案可以在:***.com/questions/28256/… 我不知道为什么用 C 写会很不幸。我更喜欢这种语言。 权威编译器/解释器问题:***.com/questions/1669/learning-to-write-a-compiler mrduclaw,我会说这很不幸,因为 OP 对语言不熟悉。对我来说这听起来并不特别讨厌。 也许是 lex/yacc/bison 【参考方案1】:

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

如果你坚持自己写,

recursive descent parser 可能是最简单的手动操作方法。 否则,您可以使用 Bison 之类的工具(因为您使用的是 C 语言)。 This tutorial 是我见过的最好的与 Flex 和 Bison(或 Lex/Yacc)合作的人

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

我前段时间遇到了 M4 程序的表情评估器。你可以研究它的代码,看看它是如何工作的。我认为 Google Codesearch 上的 this link 是我看到的版本。

【讨论】:

【参考方案2】:

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

不幸的是在C上

所以这里的一些建议可能是不允许的。不过,我建议这是一个相当复杂的问题,您最好更多尝试找到一个合适的现有库,您可以将其链接到您的 C 代码中为您执行此操作.这可能会减少使代码正常工作所需的时间和精力,并减少正在进行的维护工作。当然,您必须考虑许可问题,但如果“外面”没有一个很好的解析/评估库可以很好地解决这个问题,我会感到惊讶。

【讨论】:

以上是关于书写表达式:中缀、后缀和前缀的主要内容,如果未能解决你的问题,请参考以下文章

前缀、中缀、后缀表达式是怎样的?(程序设计)

前缀中缀后缀表达式

什么是前缀表达式,中缀表达式,后缀表达式

前缀表达式中缀表达式和后缀表达式

前缀中缀后缀表达式

前缀中缀后缀表达式