diff options
author | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-06-29 15:51:04 +0000 |
---|---|---|
committer | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-06-29 15:51:04 +0000 |
commit | 02145f06ac007d730bc16930185fe18fa3e76c68 (patch) | |
tree | d71744b876974a4fd3062daf9dc334a984782f80 /misc.c | |
parent | 0b36426d023e45d6acbc7672c7083a91d10913a8 (diff) |
Add a term parser.
Diffstat (limited to 'misc.c')
-rw-r--r-- | misc.c | 72 |
1 files changed, 72 insertions, 0 deletions
@@ -0,0 +1,72 @@ +#include <u.h> +#include <libc.h> + +#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; +} |