如何扫描用户输入并将其切成 C++ 中的块?

How to scan through user input and cut it into chunks in c++?

我正在编写一个程序来评估条件命题 (~ or and -> <->)。当用户输入命题变量真值(真,假),和命题;该程序将通过输入和 return 整个命题的真值。

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

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

同义分析是梳理输入的句法结构并执行所需的任何操作(评估案例中的介词)的地方。句法分析比词法分析更复杂。您可以为此任务编写 递归下降解析器,或者您可以使用解析器生成器为您编写代码。用于此的传统工具称为 bison, but it's a bit clunky. I like another simple tool called the lemon parser generator,尽管它比 C++ 更面向 C。