10

我想在 C++ 中评估一个表达式。为了评估它,我希望将表达式转换为前缀格式。

这是一个例子

 wstring expression = "Feature1 And Feature2";

以下是可能的方法。

 expression = "Feature1 And (Feature2 Or Feature3)";

 expression = "Not Feature1 Or Feature3";

这里And , Or , Not是保留字,括号 (" ( ", ) ) 用于范围

Not具有更高的优先级

并将下一个优先级设置为 Not

Or设置为 And 的下一个优先级

空白用于分隔符。表达式没有其他元素,如TABNEWLINE

不需要算术表达式。我可以进行评估,但有人可以帮我将字符串转换为前缀表示法吗?

4

3 回答 3

3

您需要预先构建语法。那么为什么要手动进行所有解析。而是使用像Boost-Spirit这样的解析器构建器库。或 lex/yacc 或 flex/bison。

然后使用解析器生成器生成的AST以您认为合适的任何方式输出数据。例如前缀或后缀的中缀,...等。

于 2010-04-01T04:49:21.433 回答
1

我猜你的意图是评估条件。因此你不需要一个成熟的解析器。

首先,您不需要在这里使用字符串。1. 将“Feature 1”转换为 Id(表示特征的整数)

因此,声明"Feature1 And (Feature2 Or Feature3)";(1 & (2 | 3) 这里开始......您可以使用标准中缀进行前缀转换并评估前缀表示法。

这是将中缀转换为前缀的算法 http://www.c4swimmers.esmartguy.com/in2pre.htm http://www.programmersheaven.com/2/Art_Expressions_p1

于 2010-04-01T05:07:23.457 回答
-1

使用像 Lex/Yacc 对这样的解析器生成器。

于 2010-04-01T04:47:02.960 回答