如何在C ++或C中将字符串转换为条件表达式

时间:2013-08-06 12:59:52

标签: c++ c

我有string

string expression=((true AND true)OR false); 

如何将此string转换为条件语句,以便我可以在if语句中使用它,即

if((true AND true)OR false))

与JavaScript中的eval一样 - C ++或C中是否有任何API?

4 个答案:

答案 0 :(得分:5)

您可以使用第三方脚本库(如LUA(http://www.lua.org/)来执行此操作,或者您可以编写自己的表达式解析器(这非常重要)。

答案 1 :(得分:3)

从根本上说,C / C ++代码必须在运行之前进行编译,这限制了您以其他语言的方式动态运行代码。

您可以轻松获得的最接近的行为是将字符串解析为一些内部表示,并让您的代码响应该表示。例如使用提升精神:

http://boost-spirit.com/home/

e.g。这个答案可以满足你的要求,并且具有提升精神。但正如您所看到的,需要付出相当多的努力:

Boolean expression (grammar) parser in c++

答案 2 :(得分:3)

#include <stdio.h>
#include <stdlib.h>

int eval(const char *boolean_expression){
    FILE *fp = fopen("temp.c", "w");
    int ret;
    fprintf(fp, 
        "#include <stdbool.h>\n"
        "#include <iso646.h>\n"
        "int main(void){\n"
        "return (int)%s;}", boolean_expression);
    fflush(fp);
    fclose(fp);
    system("gcc temp.c -o temp");
    remove("temp.c");
    ret=system("temp.exe");
    remove("temp.exe");
    return ret;
}

int main(void){
    const char *expression="((true and true) or false)";
    int condition = eval(expression);

    if(condition)
        printf("YES\n");
    else
        printf("NO!\n");
    return 0;
}

答案 3 :(得分:0)

C和C ++没有eval类型的功能 - 这是因为语言是编译的,如果你想要“编译更多”,它需要整个编译器成为运行时的一部分代码“ - 不要介意引用例如现有变量的困难。

对于这种类型的表达式,编写一些解析和计算表达式的代码并不是非常困难 - 它需要一个堆栈来处理括号和一些简单的运算符,但这并不是很难做到。

显然,集成现有的脚本语言也会有效。