From 02145f06ac007d730bc16930185fe18fa3e76c68 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Tue, 29 Jun 2021 15:51:04 +0000 Subject: Add a term parser. --- misc.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 misc.c (limited to 'misc.c') diff --git a/misc.c b/misc.c new file mode 100644 index 0000000..dcd5e17 --- /dev/null +++ b/misc.c @@ -0,0 +1,72 @@ +#include +#include + +#include "dat.h" +#include "fns.h" + +Term * +appendterm(Term *a, Term *b) +{ + if(a == nil) + return b; + + Term *tmp; + for(tmp = a; tmp->next != nil; tmp = tmp->next); + tmp->next = b; + return a; +} + +int +termslength(Term *list) +{ + int len; + for(len = 0; list != nil; len++, list = list->next); + return len; +} + +Term * +mkterm(int tag) +{ + Term *t = malloc(sizeof(Term)); + t->tag = tag; + t->next = nil; + t->children = nil; + t->text = nil; + return t; +} + +Term * +mkatom(Rune *name) +{ + Term *t = mkterm(AtomTerm); + t->text = name; + return t; +} + +Term * +mkvariable(Rune *name) +{ + Term *t = mkterm(VariableTerm); + t->text = name; + return t; +} + +Term * +mkcompound(Rune *name, int arity, Term *args) +{ + Term *t = mkterm(CompoundTerm); + t->text = name; + t->arity = arity; + t->children = args; + return t; +} + +Term * +mknumber(int type, vlong ival, double dval) +{ + Term *t = mkterm(NumberTerm); + t->numbertype = type; + t->ival = ival; + t->dval = dval; + return t; +} -- cgit v1.2.3