本项目是一个离散数学课程实验,目的是使用真值表法来计算主析取范式和主合取范式。
- 使用flex和bison进行语法和语义解析。
- 构建语义树并通过Analyzer转化为执行树。
- 枚举所有变量的0-1取值并计算真值。
- 输出真值表。
- 打印主析取范式与主合取范式。
- 确保您的系统上安装了
cmake
flex
和bison
。 - 使用以下命令编译项目,生成的可执行文件将在build目录下
cmake -Bbuild cmake --build build
- 运行程序并输入逻辑表达式。例如:
./FormulaEvaluator
main.cpp
: 主程序入口,负责处理IO、枚举变量取值、计算求值并求得主合取范式与主析取范式。parser/
: 解析器的flex文件与yacc文件,与语义树节点的定义。analyze/
: 包含Analyzer的实现,用于将语义树转化为执行树。evaluator/
: 包含算子的实现。
通过模块式地增加处理更多算符的代码,可以轻易地在本程序的功能上拓展出对更多算符的支持。
输入:
A | B & C
输出:
A B C Ans
0 F F F F
1 T F F T
2 F T F F
3 T T F T
4 F F T F
5 T F T T
6 F T T T
7 T T T T
主合取范式: (A | B | C) & (A | !B | C) & (A | B | !C)
主析取范式: (A & !B & !C) | (A & B & !C) | (A & !B & C) | (!A & B & C) | (A & B & C)