c++ - 如何在 C++ 中扫描用户输入并将其切成 block ?

标签 c++ user-input truthtable

我正在编写一个程序来评估条件命题(〜或和 -> <->)。当用户输入命题变量真值(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/

相关文章:

c++ - 静态(可能是 constexpr)数据成员 l​​ambda

c++ - 模板定义语法

c++ - 在 for 循环中使用自定义类对象访问类的 std::vector

java - 来自扫描仪的 hasNextInt() 行为异常

java - 从用户坐标中找到最近点

javascript - 生成所有可能的真/假组合

c++ - 删除数组或释放内存,C++ 错误

react-native - react 原生文本输入,按下时更改光标位置

c# - 如何避免在 C# 中出现不可能的 bool 状态?

logic - 测试逻辑表达式的工具