C 如何基于用户输入构建真值表

C 如何基于用户输入构建真值表,c,C,我是一名初级C程序员,我正在尝试制作一个程序,要求用户输入布尔函数,然后打印真值表 用户将输入指定为如下布尔表达式: !b && (a || d) 我怎样才能要求用户输入布尔表达式,然后在以后的代码中使用它?正如注释所述,这通常是一个多步骤的过程。我已经按照你的建议建立了自己的系统。执行此操作的一般过程如下所示: 扫描:用户输入的是一个原始字符串,它只是一系列字符。您最终需要从该字符串转换为某种内部表示,以说明该字符串的“含义”。通常,执行此操作的第一步是将输入分开,以便将输

我是一名初级C程序员,我正在尝试制作一个程序,要求用户输入布尔函数,然后打印真值表

用户将输入指定为如下布尔表达式:

!b && (a || d)

我怎样才能要求用户输入布尔表达式,然后在以后的代码中使用它?

正如注释所述,这通常是一个多步骤的过程。我已经按照你的建议建立了自己的系统。执行此操作的一般过程如下所示:

  • 扫描:用户输入的是一个原始字符串,它只是一系列字符。您最终需要从该字符串转换为某种内部表示,以说明该字符串的“含义”。通常,执行此操作的第一步是将输入分开,以便将输入视为单个逻辑单元的序列。例如,您可能会中断输入
    a&&!b | | |(c&&d)
    顺序为
    [a]
    [&&]
    [!]
    [b]
    [| |]
    [(]
    [&]
    [d]
    。这样,每个单独的单元(通常称为令牌或词素)都代表一些有意义的东西,您不再需要处理字符串处理问题

  • 解析。下一步是获取您的令牌流,并找出表达式“含义”是什么。这称为解析。对于您所描述的应用程序,我建议您看看Dijkstra的调车场算法,该算法从一系列表示数学运算的令牌开始,并从中重建运算符优先级。此步骤的首选输出是表示公式结构的树结构,通常称为抽象语法树(AST)或表达式树

  • 评估。现在,您有了AST,它显示了表达式的层次结构。现在,您需要生成真值表。您可以通过遍历树来提取变量列表,然后遍历所有可能的组合,其中哪些变量为真,哪些变量为假。对于每一个表达式,您都可以遍历树以确定在这种情况下表达式的计算结果


如果你想知道这在实践中是什么样子的,我上面链接的真理表工具在这里是可用的,并分解为以下步骤。您可以查看扫描、解析和AST逻辑,以了解事物的外观。

您的意思是什么?请提供一个例子这个问题不是很清楚。我建议您从描述输入和期望的输出开始,例如,您希望用户键入什么文本?这似乎是一种宽泛的方式。请花些时间阅读,特别是命名和。也请和。最后,请学习如何创建。欢迎使用SO。请花一分钟时间阅读并通过添加到目前为止您开始的工作来展示一些研究成果。您是否考虑向用户询问函数的代码(头和体)?在这种情况下,您似乎必须在运行时编译或解析它。这将是一个具有挑战性的目标,即使对有经验的程序员来说也是如此。所以我相信你一定有别的意思,所以请详细说明。很多,好的。我认为我的编程技能还不足以完成这种程序。无论如何,谢谢你的回答@yacc作为一个教授很多新程序员的人,我认为怀疑这样的事情不太具有挑战性并不是不合理的。我认为这是其中的一个领域,令人惊讶的是它有多么棘手,涉及到多少步骤。