gpt4 book ai didi

c++ - 是否可以将结构与条件语句完全相同的字符串转换为可以读取和操作的语句?

转载 作者:太空狗 更新时间:2023-10-29 20:50:14 26 4
gpt4 key购买 nike

我和其他一些人的任务是为我们的第一年项目创建一个真值表生成器。我们已经完成了绝大部分工作,除了一些事情,其中​​最重要的是实际将语句(例如:p V q)转换为 bool 真值的函数。

是否可以将具有适当 C++ 参数语法的字符串语句(例如“(p || !q)”(p 和 q 是具有各自值的预定义变量)直接转换为条件?

我们已经考虑了很多条件语句的路径,这些路径基于我们可以通过字符串分析找到的内容,并根据结果对变量进行操作,但我想知道是否有更有效的方法来实际编写代码。该代码旨在为真值表语句获取几乎所有输入,将其转换为适当的 c++ 语法,并将语句分成组件。话虽这么说,如果我们要通过查找某些元素并使用 if-then 或 switch 语句对它们进行操作来做到这一点,则有很多选择可以考虑。如果有更有效的途径,我愿意接受建议,并欢迎对我们的流程提出任何批评。

作为视觉演示,这就是我们的想法:

bool p=1, q=0;
string test= "(!p || q)"; // would supposedly return 0 if analyzed as a conditional statement

cout << endl << "Truth Table Generator Test" << endl;
cout << "p = " << p << endl << "q = " << q << endl;
cout << test << " = " << truthVal(test) // Used to signify the conversion from string to condition

预期输出:


Truth Table Generator Test
p = 1
q = 0
(!p || q) = 0

最佳答案

像这样调用时在 C++ 中是不可能的:

cout << test << " = " << truthVal(test) 

然而,稍微重新排列一下,就有可能:

bool p=1, q=0;
char test[]= "(!p || q)"; // would supposedly return 0 if analyzed as a conditional statement

cout << endl << "Truth Table Generator Test" << endl;
cout << "p = " << p << endl << "q = " << q << endl;
cout << test << " = " << truthVal(test, 'p', p, 'q', q)

这之所以成为可能,是因为有 2 个关键变化。 test 现在是一个常量字符数组。因此,它可以用模板元编程来解析。请注意,不同的 test 数组可以产生独特的函数实例化。例如,这是在 Boost 的 printf 库中完成的。由于模板元编程是图灵完备的,因此可以实现一个解释器来测试 p 和 q,或者在运行时测试任何额外数量的变量。您还需要定义一个约定,将传递的变量与 char 数组中的变量链接起来。我在这里通过将变量名称作为 char 提供来完成此操作,但也可以通过其他方式完成。您甚至可以对传递的变量进行类型检查。但是您无法访问未在函数调用中传递的变量。本质上,您正在实现一个编译时解释器。

但是,模板元编程是一项重大任务。但可行。

关于c++ - 是否可以将结构与条件语句完全相同的字符串转换为可以读取和操作的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55777994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com