⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ass2.h

📁 离散数学中---------一阶谓词演算源代码
💻 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 + -