1
0
forked from GitHub/gf-core

started the linearizer

This commit is contained in:
krangelov
2021-11-26 18:44:17 +01:00
parent 3134a89307
commit ae08d42d6e
7 changed files with 184 additions and 1 deletions

View File

@@ -0,0 +1,60 @@
#ifndef LINEARIZER_H
#define LINEARIZER_H
class PGF_INTERNAL_DECL PgfLinearizer : public PgfUnmarshaller {
ref<PgfConcr> concr;
PgfMarshaller *m;
struct TreeNode {
TreeNode *next;
TreeNode *next_arg;
TreeNode *args;
ref<PgfConcrLin> lin;
TreeNode(PgfLinearizer *linearizer, ref<PgfConcrLin> lin) {
this->next = linearizer->root;
this->next_arg = NULL;
this->args = linearizer->args;
this->lin = lin;
if (linearizer->first == NULL)
linearizer->first = this;
linearizer->root = this;
}
};
TreeNode *root;
TreeNode *first;
TreeNode *args;
public:
PgfLinearizer(ref<PgfConcr> concr, PgfMarshaller *m) {
this->concr = concr;
this->m = m;
this->root = NULL;
this->first = NULL;
this->args = NULL;
};
~PgfLinearizer();
virtual PgfExpr eabs(PgfBindType btype, PgfText *name, PgfExpr body);
virtual PgfExpr eapp(PgfExpr fun, PgfExpr arg);
virtual PgfExpr elit(PgfLiteral lit);
virtual PgfExpr emeta(PgfMetaId meta);
virtual PgfExpr efun(PgfText *name);
virtual PgfExpr evar(int index);
virtual PgfExpr etyped(PgfExpr expr, PgfType typ);
virtual PgfExpr eimplarg(PgfExpr expr);
virtual PgfLiteral lint(size_t size, uintmax_t *v);
virtual PgfLiteral lflt(double v);
virtual PgfLiteral lstr(PgfText *v);
virtual PgfType dtyp(size_t n_hypos, PgfTypeHypo *hypos,
PgfText *cat,
size_t n_exprs, PgfExpr *exprs);
virtual void free_ref(object x);
};
#endif