如何扫描用户输入并将其切成 C++ 中的块?
How to scan through user input and cut it into chunks in c++?
我正在编写一个程序来评估条件命题 (~ or and -> <->)。当用户输入命题变量和真值(真,假),和命题;该程序将通过输入和 return 整个命题的真值。
- 例如:如果我设置 p = true, q = true, r = false 并输入:p 或 q 和 r.
反正我可以先把它切割成 q 和 r,然后处理并把它放回结果(这是 false ), 然后处理下一位 (p or false) ??.它必须不断地删除位(按照正确的优先顺序)并将它们放回去直到我离开是一个 true 或 false.
我应该用什么来保存用户输入(数组、字符串)???
如有任何帮助,我们将不胜感激!谢谢。
像这样的任务通常分为两个阶段,词法分析和句法分析。
词法分析将输入拆分为 标记流 。在您的情况下,标记将是运算符 ~
、or
、and
、->
、<->
、变量和值 true
、false
。你没有提到它们,但我想你也想在你的语言中包含括号作为标记。您的语言足够简单,您可以自己编写词法分析器,但诸如 flex or ragel 之类的工具可能会帮助您。
同义分析是梳理输入的句法结构并执行所需的任何操作(评估案例中的介词)的地方。句法分析比词法分析更复杂。您可以为此任务编写 递归下降解析器,或者您可以使用解析器生成器为您编写代码。用于此的传统工具称为 bison, but it's a bit clunky. I like another simple tool called the lemon parser generator,尽管它比 C++ 更面向 C。
我正在编写一个程序来评估条件命题 (~ or and -> <->)。当用户输入命题变量和真值(真,假),和命题;该程序将通过输入和 return 整个命题的真值。
- 例如:如果我设置 p = true, q = true, r = false 并输入:p 或 q 和 r.
反正我可以先把它切割成 q 和 r,然后处理并把它放回结果(这是 false ), 然后处理下一位 (p or false) ??.它必须不断地删除位(按照正确的优先顺序)并将它们放回去直到我离开是一个 true 或 false.
我应该用什么来保存用户输入(数组、字符串)???
如有任何帮助,我们将不胜感激!谢谢。
像这样的任务通常分为两个阶段,词法分析和句法分析。
词法分析将输入拆分为 标记流 。在您的情况下,标记将是运算符 ~
、or
、and
、->
、<->
、变量和值 true
、false
。你没有提到它们,但我想你也想在你的语言中包含括号作为标记。您的语言足够简单,您可以自己编写词法分析器,但诸如 flex or ragel 之类的工具可能会帮助您。
同义分析是梳理输入的句法结构并执行所需的任何操作(评估案例中的介词)的地方。句法分析比词法分析更复杂。您可以为此任务编写 递归下降解析器,或者您可以使用解析器生成器为您编写代码。用于此的传统工具称为 bison, but it's a bit clunky. I like another simple tool called the lemon parser generator,尽管它比 C++ 更面向 C。