65 lines
1.5 KiB
C
Executable File
65 lines
1.5 KiB
C
Executable File
#include "ast.h"
|
|
|
|
term *subst_var(char *den, char *src, term *t)
|
|
{
|
|
switch (t->type)
|
|
{
|
|
case Var: {
|
|
if (!strcmp(t->content.Var, src))
|
|
{
|
|
free_str(t->content.Var);
|
|
t->content.Var = strdup(den);
|
|
}
|
|
break;
|
|
}
|
|
case Const:{
|
|
break;
|
|
}
|
|
case Apply: {
|
|
t->content.Apply.left = subst_var(den, src, t->content.Apply.left);
|
|
t->content.Apply.right = subst_var(den, src, t->content.Apply.right);
|
|
break;
|
|
}
|
|
case Quant: {
|
|
if (strcmp(t->content.Quant.var, src))
|
|
{
|
|
t->content.Quant.body = subst_var(den, src, t->content.Quant.body);
|
|
}
|
|
break;
|
|
}
|
|
default:{
|
|
break;
|
|
}
|
|
}
|
|
return t;
|
|
}
|
|
|
|
term* subst_term(term* den, char* src, term* t){
|
|
switch(t->type){
|
|
case Var:{
|
|
if(!strcmp(t->content.Var, src)){
|
|
free_term(t);
|
|
t = copy_term(den);
|
|
}
|
|
break;
|
|
}
|
|
case Const:{
|
|
break;
|
|
}
|
|
case Apply:{
|
|
t->content.Apply.left = subst_term(den, src, t->content.Apply.left);
|
|
t->content.Apply.right = subst_term(den, src, t->content.Apply.right);
|
|
break;
|
|
}
|
|
case Quant:{
|
|
if(strcmp(t->content.Quant.var,src)){
|
|
t->content.Quant.body = subst_term(den, src, t->content.Quant.body);
|
|
}
|
|
break;
|
|
}
|
|
default:{
|
|
break;
|
|
}
|
|
}
|
|
return t;
|
|
} |