C ++中缀为逻辑条件的前缀转换

时间:2010-04-01 04:41:54

标签: c++ expression prefix infix-notation

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

这是一个例子

 wstring expression = "Feature1 And Feature2";

以下是可行的方法。

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

 expression = "Not Feature1 Or Feature3";

此处 是保留字和括号(“”,)用于范围

具有更高的优先级

的下一个优先级设置为“无

设置为And

的下一个优先级

WHITE SPACE 用于分隔符。表达式没有其他元素,例如 TAB NEWLINE

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

我想你的目的是评估条件。因此你不需要一个完整的解析器。

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

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

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

答案 2 :(得分:-1)

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