Files
MiniGmp-Verification/projects/task3/subst.c
2025-05-21 16:56:46 +08:00

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;
}