我是初学者C程序员,我正在尝试创建一个程序,要求用户提供布尔函数,然后打印真值表。
用户将输入指定为布尔表达式,如下所示:
!b && (a || d)
我怎么能要求用户输入布尔表达式,然后在代码中使用它?
答案 0 :(得分:1)
正如评论所提到的,这通常是一个多步骤的过程。我已经建立了自己的truth table generator,它与你提出的建议一致。执行此操作的一般过程如下所示:
扫描:您从用户那里获得的输入是一个原始字符串,它只是一系列字符。你最终需要从那个字符串到一些内部表示,说明字符串"的含义。"通常,执行此操作的第一步是将输入分开,以便将输入视为一系列单独的逻辑单元。例如,您可以将输入a && !b || (c && d)
分为序列[a]
,[&&]
,[!]
,[b]
,[||]
,{{1} },[(]
,[c]
,[&&]
,[d]
。这样,每个单独的单元(通常称为令牌或 lexeme )表示有意义的内容,并且您不再处理字符串处理问题。
<强>解析即可。下一步是拿出你的代币流,弄清楚表达式是什么意思。&#34;这称为解析。对于您要描述的应用程序,我建议您查看Dijkstra的分流码算法,该算法以表示数学运算的一系列标记开始,并从中重构运算符优先级。此步骤的首选输出是表示公式结构的树结构,通常称为抽象语法树(AST)或表达式树。
< / LI><强>评价即可。此时,您现在拥有了AST,它显示了表达式的层次结构。现在,您需要生成真值表。您可以通过遍历树来提取变量列表,然后浏览哪些变量为true且哪些变量为false的所有可能组合。对于它们中的每一个,您可以遍历树以确定在这种情况下表达式的计算结果。
如果您对实际情况看起来很好奇,我在上面链接的真值表工具的source code可以在这里找到并分解为这些步骤。您可以看到扫描,解析和AST逻辑,以了解事物的样子。