📄 logic.h
字号:
#ifndef _LOGIC_HPP_
#define _LOGIC_HPP_
#include <iostream>
#include "logic_node.h"
#define MAX 10000 //最大简单合取范式
using std::cout;
using std::cin;
using std::endl;
//声明逻辑类
class LogicTree
{
public:
LogicTree();
~LogicTree(){ delTree( tree ); }
int isLeftBracket( char a )const{ return a == '('; }
int isRightBracket( char a )const{ return a == ')'; }
int isCharacter( char )const; //判断是否为操作数
int isOperator( char )const; //判断是否为运算符
int doResult( link )const; //计算逻辑表达式的值
int isRight( char * ); //判断扬输入的表达式是否合法
int priority( char )const; //判断保修运算的优先级
void negateTree( link ); //把在特号外的否定移入特号内
void delTree( link ); //删除整棵树
void printTree(); //打印表达式
void print( link );
void setTree( link _tree ){ tree = _tree; }
void changeNode_2( link ); //计算表达式中的蕴含运算符
void changeAllNode( link , link ); //说教表达式中的合取运算符
void record_string2( link ); //记录表达式中的蕴含运算符
void record_string3( link );
void clean( link ); //刷新娄组value[MAX]
void arrange( link ); //改变子树成最后一层为操作数且右结点只有操作数运算符结点 //
void arrangeTree( link );
void add( link ); //合取一个该谙单合取表达式中没有操作数以及它的否定
void add_1( link , link , int );
void newBracket( link ); //将所有运算符结点的成员变量bracket设为0
void paiXu( int & ); //对简单合取范式内的操作数排序
void F5(); //处理在简单合取式中出现多次的操作数
void changeTree( link ); //将输入的表达式转换成主析取范式
link newTree(); //建立主析取范式的二叉树
link getTree()const { return tree; }
link changeNode_1( link ); //化简两个子表达式的合取运算
link copy( link ); //复制二叉树
link buildTree( char * ); //建立二叉树
private:
int num; //在建立二叉树是用于记录已读到的字符串位置
int goon; //判断是否再次执行合取运算
int num1; //在记录表达式中字符果用天标记数组value[54]位置
int index_1; //标记string_1的位置
int index_2; //标记string_2的位置
char value[54]; //记录表达式中的字符种类
char value_1[54]; //记录对应子树中含有的字符种类
link string1[MAX]; //记录表达式中蕴含运算符
link string2[MAX]; //记录转换面析取范式后的保个简单合取式的顶结点
link string3[MAX]; //记录有一个子结点为合取运算符的运算符
link tree; //指向二叉树的头结点
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -