📄 ass2.h
字号:
#include <string>
#include <stack>
#include <list>
#include <vector>
using namespace std;
#define OPERNUM 5
#define UNOPER 1
#define BINOPER 2
#define MIN_OPER_LENGTH 1
#define MAX_OPER_LENGTH 3
typedef struct _GrammarProposition
{
struct _GrammarProposition* lChild;
struct _GrammarProposition* rChild;
int attribution;
string strKey;
}GrammarProposition,*LGrammarProposition;
const string strOperator[OPERNUM] =
{
"~","&","|","=>","<=>"
};
const bool ifTruthTable[] = {true,true,false,true}; //"=>"的真值表
const bool iffTruthTable[] = {true,false,false,true};//"<=>"的的真值表
//判断是否是操作符
static bool IsOperator(string strOper,int& operType,int& pos)
{
for(int i = 0;i < OPERNUM;i++)
{
if ( strOper == strOperator[i])
{
operType = (i == 0?UNOPER:BINOPER);
pos += strOperator[i].size();
return true;
}
}
return false;
}
//还应该增加一个保存所有变量的池,变量池
//还应该有保存一个简化后的后序表达式
class PropositionVistor;
class Proposition
{
public:
Proposition* parse(const string&);
virtual std::string getPostfix() ;
virtual void accept(PropositionVistor& ) const ;
virtual bool equivalent(const Proposition& ) const;
virtual bool implied_by(const vector<const Proposition*>) const;
vector<string> getVariant() const;
GrammarProposition* grammarTree;//语法树
virtual ~Proposition();
Proposition();
Proposition(const string& );
protected:
vector<string> varPool;//变量池
void postfixTraverse(LGrammarProposition T,string& postfixString);//后序访问
void DestroyTree(LGrammarProposition T);
void TrimVarPool();//去掉相同变量的程序
};
/*
class Var:public Proposition
{
public:
Var();
void accept(PropositionVistor& prop) const { prop.visit(this) };
protected:
private:
};
class UnaryExp:public Proposition
{
public:
UnaryExp();
void accept(PropositionVistor& prop) const { prop.visit(this) };
protected:
private:
};
class BinaryExp:public Proposition
{
public:
BinaryExp();
void accept(PropositionVistor& prop) const { prop.visit(this) };
protected:
private:
};*/
class PropositionVistor
{
public:
virtual void visit(const Proposition&){};
};
class PrefixVistor: public PropositionVistor
{
public:
void visit(const Proposition& prop);
void prefixTraverse(LGrammarProposition T,string& prefixString);//前序访问
};
class InfixVistor: public PropositionVistor
{
public:
void visit(const Proposition& prop);
void infixTraverse(LGrammarProposition T,string& infixString);//中序访问
};
class TruthtableVistor: public PropositionVistor
{
public:
void visit(const Proposition& prop);
vector<bool> getTruthTable() const;
private:
vector<bool> assignPool;//变量赋值之后的存储
vector<bool> truthTable;//真值表
int serchVariant(string str,const Proposition& prop);//返回所要查找的变量的位置
bool ComputeTruthTable(LGrammarProposition T,const Proposition& prop);//构建真值表的一项
void buildTruthTable(const Proposition& prop);//根据变量池来构建真值表
};
class CnfcheckVistor: public PropositionVistor
{
public:
bool getResult(){return false;};
};
class DnfcheckVistor: public PropositionVistor
{
public:
bool getResult(){return false;};
};
class CnfVistor: public PropositionVistor
{
public:
Proposition* getResult(){return NULL;};
};
class DnfVistor: public PropositionVistor
{
public:
Proposition* getResult(){return NULL;};
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -