broken code, but added attempt at writing grammar

This commit is contained in:
Ellen Arvidsson 2025-04-14 17:40:22 +02:00
parent fb95e5d026
commit 20e3757f44
18 changed files with 1145 additions and 142 deletions

View file

@ -1,9 +1,11 @@
#include <sys/queue.h>
#include <stdlib.h>
#include "spho/ctx.h"
#include "spho/scope.h"
#include "spho/tp.h"
struct spho_nom *
spho_nom_add(struct spho_ctx *ctx, char *nom, size_t nomlen)
{
}
//struct spho_tp *
//spho_tp_create_disj(struct spho_ctx *, struct spho_tp *, struct spho_tp *,
@ -11,3 +13,178 @@ spho_nom_add(struct spho_ctx *ctx, char *nom, size_t nomlen)
//{
//
//}
struct spho_tp *
spho_tp_alloc(struct spho_scope *sc, int form)
{
struct spho_tp *tp;
SPHO_PRECOND(SPHO_TP_FORM_IS_VALID(form));
if ((tp = calloc(1, sizeof(struct spho_tp))) == NULL) {
SPHO_SC_ERR(sc, SPHO_ERR_SYS);
return (NULL);
}
tp->sc = sc;
tp->form = form;
return (tp);
}
int
spho_tp_init_disj(struct spho_tp *tp, struct spho_tp *a, struct spho_tp *b)
{
if (tp->form != SPHO_TP_FORM_DISJ) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.binop.left = a;
tp->data.binop.right = b;
return (0);
}
int
spho_tp_init_conj(struct spho_tp *tp, struct spho_tp *a, struct spho_tp *b)
{
if (tp->form != SPHO_TP_FORM_CONJ) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.binop.left = a;
tp->data.binop.right = b;
return (0);
}
int
spho_tp_init_impl(struct spho_tp *tp, struct spho_tp *a, struct spho_tp *b)
{
if (tp->form != SPHO_TP_FORM_IMPL) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.binop.left = a;
tp->data.binop.right = b;
return (0);
}
int
spho_tp_init_arrow(struct spho_tp *tp, struct spho_tp *a, struct spho_tp *b)
{
if (tp->form != SPHO_TP_FORM_ARROW) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.binop.left = a;
tp->data.binop.right = b;
return (0);
}
int
spho_tp_init_box(struct spho_tp *tp, struct spho_tp *inr)
{
if (tp->form != SPHO_TP_FORM_BOX) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.box.inr = inr;
return (0);
}
int
spho_tp_init_forall(struct spho_tp *tp, struct spho_var *var,
struct spho_tp *inr)
{
if (tp->form != SPHO_TP_FORM_FORALL) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.fa.var = var;
tp->data.fa.inr = inr;
return (0);
}
int
spho_tp_init_bappl(struct spho_tp *tp, struct spho_bind *bind,
struct spho_tp_l *args)
{
struct spho_tp *arg;
if (tp->form != SPHO_TP_FORM_BAPPL) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.bappl.bind = bind;
tp->data.bappl.args = args;
return (0);
}
int
spho_tp_init_false(struct spho_tp *tp)
{
if (tp->form != SPHO_TP_FORM_FALSE) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.konst.k = SPHO_K_FALSE;
return (0);
}
int
spho_tp_init_true(struct spho_tp *tp)
{
if (tp->form != SPHO_TP_FORM_TRUE) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.konst.k = SPHO_K_TRUE;
return (0);
}
int
spho_tp_init_var(struct spho_tp *tp, struct spho_var *var)
{
if (tp->form != SPHO_TP_FORM_VAR) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.var.v = var;
return (0);
}
int
spho_tp_init_rec(struct spho_tp *tp, struct spho_rec *rec)
{
if (tp->form != SPHO_TP_FORM_REC) {
SPHO_TP_ERR(tp, SPHO_ERR_ARGINVAL);
return (-1);
}
tp->data.rec.r = rec;
return (0);
}