initial commit
This commit is contained in:
120
projects/task3/ast.h
Executable file
120
projects/task3/ast.h
Executable file
@ -0,0 +1,120 @@
|
||||
typedef enum {false, true} bool;
|
||||
|
||||
enum const_type
|
||||
{
|
||||
Num = 0,
|
||||
// oper
|
||||
Add,
|
||||
Mul,
|
||||
// pred
|
||||
Eq,
|
||||
Le,
|
||||
// connect
|
||||
And,
|
||||
Or,
|
||||
Impl
|
||||
};
|
||||
typedef enum const_type const_type;
|
||||
|
||||
enum quant_type
|
||||
{
|
||||
Forall,
|
||||
Exists
|
||||
};
|
||||
typedef enum quant_type quant_type;
|
||||
|
||||
enum term_type
|
||||
{
|
||||
Var,
|
||||
Const,
|
||||
Apply,
|
||||
Quant
|
||||
};
|
||||
typedef enum term_type term_type;
|
||||
|
||||
struct term
|
||||
{
|
||||
term_type type;
|
||||
union {
|
||||
char *Var;
|
||||
struct
|
||||
{
|
||||
const_type type;
|
||||
int content;
|
||||
} Const;
|
||||
struct
|
||||
{
|
||||
struct term *left;
|
||||
struct term *right;
|
||||
} Apply;
|
||||
struct
|
||||
{
|
||||
quant_type type;
|
||||
char *var;
|
||||
struct term *body;
|
||||
} Quant;
|
||||
} content;
|
||||
};
|
||||
typedef struct term term;
|
||||
|
||||
struct term_list
|
||||
{
|
||||
term *element;
|
||||
struct term_list *next;
|
||||
};
|
||||
typedef struct term_list term_list;
|
||||
|
||||
typedef struct var_sub
|
||||
{
|
||||
char *var;
|
||||
term *sub_term;
|
||||
} var_sub;
|
||||
|
||||
typedef struct var_sub_list
|
||||
{
|
||||
var_sub *cur;
|
||||
struct var_sub_list *next;
|
||||
} var_sub_list;
|
||||
|
||||
typedef enum {bool_res, termlist} res_type;
|
||||
typedef struct{
|
||||
res_type type;
|
||||
union{
|
||||
bool ans;
|
||||
term_list* list;
|
||||
} d;
|
||||
} solve_res;
|
||||
|
||||
typedef struct{
|
||||
term *assum;
|
||||
term *concl;
|
||||
} ImplyProp;
|
||||
|
||||
/* BEGIN Given Functions */
|
||||
|
||||
// malloc 函数,内存均初始为全0
|
||||
term_list *malloc_term_list();
|
||||
solve_res *malloc_solve_res();
|
||||
|
||||
// 构造函数
|
||||
ImplyProp *createImplyProp(term *t1, term *t2);
|
||||
|
||||
// 深拷贝函数
|
||||
term *copy_term(term *t);
|
||||
term_list *copy_term_list(term_list *list);
|
||||
|
||||
// free 函数
|
||||
void free_str(char *s);
|
||||
void free_imply_prop(ImplyProp *p);
|
||||
void free_term(term *t);
|
||||
void free_term_list(term_list *list);
|
||||
|
||||
// string 相关函数
|
||||
char *strdup(const char *s);
|
||||
int strcmp(const char *s1, const char *s2);
|
||||
|
||||
/* END Given Functions */
|
||||
|
||||
term *subst_var(char *den, char *src, term *t);
|
||||
term* subst_term(term* den, char* src, term* t);
|
||||
bool alpha_equiv(term *t1, term *t2);
|
Reference in New Issue
Block a user