initial commit
This commit is contained in:
65
projects/task3/subst.c
Executable file
65
projects/task3/subst.c
Executable file
@ -0,0 +1,65 @@
|
||||
#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;
|
||||
}
|
Reference in New Issue
Block a user