通过解析文件构建逻辑语句

Construct logic statements through parsing a file

本文关键字:语句 构建 文件      更新时间:2023-10-16

我已经提出了读取包含逻辑语句的输入文件的问题,并且需要构造真实表以确定询问是否匹配确定的任何/所有模型。我可能期望阅读的一些数据的一个示例是:

(p & z => x) => ((p | d) & z)

请不要在示例中陷入太多的束缚,是否真的有意义,我只是为了展示我可能展示的不同作品而做出的。多个这样的陈述可以用分号分开。

我已经在没有任何戏剧的情况下整理了半圆柱分裂,现在有一个包含每个单独语句的字符串向量,其中每个字符串如上所述。现在,如果没有括号的参与,我相信确定陈述将是相当直接的,但是随着它们的参与,我现在需要在他人面前计算不同的部分。例如:

(p | d) = result,然后 (result & x)

我已经看到人们讨论使用堆栈来确定开放式括号是否正确关闭的概念,但是我认为这不适合我的情况,因为这不允许我确定内部的陈述是什么括号。

我当前的想法是使用堆栈想法,并尝试确定语句的"深度"(本质上是嵌套的距离),然后用每个语句标记这个数字,但我相信这听起来像是一个不高的解决方案。有人有什么提示我应该如何构建算法以正确解决问题吗?

您需要构建一个表达式树,其中变量为叶子。

您的表达将变成:

        =>
       / 
      /   
     /     
    =>      &
   /      / 
  &   X   |   Z
 /      / 
p   z   P   D

构建了这种表示形式后,评估就很简单。

另一种结果,结果相同的方法是将您的表达方式减少到RPN之类的东西(您可以在其中使用堆栈构想):

P, Z, &, X, =>, P, D, |, Z, &, =>

如评论中所建议的,您可以使用分流码算法进行。