通过解析文件构建逻辑语句
Construct logic statements through parsing a file
我已经提出了读取包含逻辑语句的输入文件的问题,并且需要构造真实表以确定询问是否匹配确定的任何/所有模型。我可能期望阅读的一些数据的一个示例是:
(p & z => x)
=> ((p | d) & z)
请不要在示例中陷入太多的束缚,是否真的有意义,我只是为了展示我可能展示的不同作品而做出的。多个这样的陈述可以用分号分开。
我已经在没有任何戏剧的情况下整理了半圆柱分裂,现在有一个包含每个单独语句的字符串向量,其中每个字符串如上所述。现在,如果没有括号的参与,我相信确定陈述将是相当直接的,但是随着它们的参与,我现在需要在他人面前计算不同的部分。例如:
(p | d) = result
,然后 (result & x)
我已经看到人们讨论使用堆栈来确定开放式括号是否正确关闭的概念,但是我认为这不适合我的情况,因为这不允许我确定内部的陈述是什么括号。
我当前的想法是使用堆栈想法,并尝试确定语句的"深度"(本质上是嵌套的距离),然后用每个语句标记这个数字,但我相信这听起来像是一个不高的解决方案。有人有什么提示我应该如何构建算法以正确解决问题吗?
您需要构建一个表达式树,其中变量为叶子。
您的表达将变成:
=>
/
/
/
=> &
/ /
& X | Z
/ /
p z P D
构建了这种表示形式后,评估就很简单。
另一种结果,结果相同的方法是将您的表达方式减少到RPN之类的东西(您可以在其中使用堆栈构想):
P, Z, &, X, =>, P, D, |, Z, &, =>
如评论中所建议的,您可以使用分流码算法进行。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 是否可以使用if constexpr删除控制流语句
- 通过解析文件构建逻辑语句
- range -for语句不能使用数组函数参数构建范围表达式
- 使用make构建时,在c++文件中泛化include语句