【问题标题】:How to scan through user input and cut it into chunks in c++?如何扫描用户输入并将其切成c ++中的块?
【发布时间】:2019-07-17 06:47:37
【问题描述】:

我正在编写一个程序来评估条件命题(~ or and -> )。当用户输入命题变量真值(真、假),以及命题;程序将遍历输入并返回整个命题的真值。

  • 例如:如果我设置 p = true, q = true, r = false 并输入: p 或 q 和 r
  • 是不是我可以先把它分成q和r,然后处理并放回result(即false),然后处理下一位( p 或 false) ??。而且它必须不断地剪掉一些位(按照正确的优先顺序)并将它们放回去直到我离开是一个单一的true or false

    • 我应该用什么来保存用户输入(数组、字符串)???

    • 任何帮助将不胜感激!谢谢。

【问题讨论】:

  • 您将用户输入保存在一个字符串中(应该很明显,这就是用户输入的内容)。但是当您 parse 该字符串时,您可能希望将输入转换为其他数据结构。表示输入的语法结构(包括优先级)的数据结构称为抽象语法树(AST),因此您可能需要研究它。不确定是否需要完整的 AST 这么简单,但这是您在编写代码时会决定的。您可能还想研究可以帮助您解决此问题的许多可用解析工具中的任何一种。
  • 我认为我们不需要 AST 概念来解决这个问题,因为它太复杂了,而且它只是我离散结构课程的入门实验室。我将查找并研究更多有关解析工具的信息。顺便谢谢你的建议!!

标签: c++ user-input truthtable


【解决方案1】:

这样的任务通常分为两个阶段,词法分析和句法分析。

词法分析将输入拆分为标记流。在您的情况下,令牌将是运算符~orand-><->、变量和值truefalse。你没有提到它们,但我想你也想在你的语言中包含括号作为标记。您的语言非常简单,您可以自己编写词法分析器,但 flexragel 等工具可能会对您有所帮助。

句法分析是您梳理输入的句法结构并执行您需要的任何操作(根据您的情况评估介词)。句法分析比词法分析更复杂。您可以为此任务编写一个递归下降解析器,或者您可以使用解析器生成器为您编写代码。用于此的传统工具称为bison,但它有点笨拙。我喜欢另一个名为 lemon parser generator 的简单工具,尽管它比 C++ 更面向 C。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多