我正在编写一个程序来评估条件命题(〜或和 -> <->)。当用户输入命题变量和真值(true、false)以及命题时;程序将遍历输入并返回整个命题的真值。
- 例如:如果我设置p = true,q = true,r = false并输入:p 或 q 和 r。
无论如何,我可以先将其切成q和r,然后处理并将其放回结果(这是false),然后处理下一位(p 或 假)??。它必须不断地删除位(按照正确的优先顺序)并将它们放回去,直到我留下一个真或假。
我应该用什么来保存用户输入(数组、字符串)???
如有任何帮助,我们将不胜感激!谢谢。
最佳答案
像这样的任务通常分为两个阶段,词法分析和句法分析。
词法分析将输入分割成标记流。在您的情况下, token 将是运算符 ~
, or
, and
, ->
, <->
、变量和值 true
, false
。您没有提到它们,但我想您也想在您的语言中包含括号作为标记。您的语言非常简单,您可以自己编写词法分析器,但可以使用 flex 等工具。或ragel可能对你有帮助。
句法分析是您梳理输入的句法结构并执行您需要的任何操作的地方(评估您案例中的介词)。句法分析比词法分析更复杂。您可以为此任务编写一个递归下降解析器,也可以使用解析器生成器为您编写代码。传统的工具称为 bison ,但有点笨拙。我喜欢另一个简单的工具,称为 lemon parser generator尽管它比 C++ 更面向 C。
关于c++ - 如何在 C++ 中扫描用户输入并将其切成 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54839539/