3

我正在做一个基于中缀布尔逻辑表达式构建真值表的小项目。例子:

A ∧ (B ∨ C)

我能够将其转换为后缀:

ABC∨∧

因此能够将表达式构造成二叉树(可以将树转换回中缀,获取后缀或前缀):

ABC∨∧的语法树:

ABC∨∧的语法树

digraph graphname {
    node1 [label="∧"];
    node2 [label="A"];
    node3 [label="∨"];
    node6 [label="B"];
    node7 [label="C"];
    node1 -> node2;
    node1 -> node3;
    node3 -> node6;
    node3 -> node7;
}

问题

我的问题是在构建真值表时,如何找出完成真值表所需的其余列标题?

目前我能够生成符号的所有排列:

| A | B | C |
| - | - | - |
| F | F | F |
| F | F | T |
| F | T | F |
| F | T | T |
| T | F | F |
| T | F | T |
| T | T | F |
| T | T | T |

基本上为了获得这些标题,我只是Set<Character>根据输入创建一个不同的字母字符。

然而,这并不是一个完整的真值表A ∧ (B ∨ C)。对于完整的真值表,我需要添加列(B ∨ C)A ∧ (B ∨ C) 因此完整的真值表将如下所示:

| A | B | C | (B ∨ C) | A ∧ (B ∨ C) |
| - | - | - | ------- | ----------- |
| F | F | F |         |             |
| F | F | T |         |             |
| F | T | F |         |             |
| F | T | T |         |             |
| T | F | F |         |             |
| T | F | T |         |             |
| T | T | F |         |             |
| T | T | T |         |             |

那么,我将如何以编程方式生成所需的附加标题(即带有逻辑连接词的标题),使我能够生成其语义含义?

一些树遍历算法会这样做吗?还是只使用输入的中缀/后缀版本?

一些 Java 代码会有所帮助,但一种方法/算法就足够了 :)

谢谢!

4

0 回答 0