Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- victor@skynet:~/Desktop$ ghci
- GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
- Loading package ghc-prim ... linking ... done.
- Loading package integer-gmp ... linking ... done.
- Loading package base ... linking ... done.
- Prelude> :a AST_C_Target.hs
- [1 of 2] Compiling AST ( AST.hs, interpreted )
- [2 of 2] Compiling AST_C_Target ( AST_C_Target.hs, interpreted )
- Ok, modules loaded: AST_C_Target, AST.
- *AST_C_Target> translateProgram myProg
- */
- #ifndef EXP_TEST_H
- #define EXP_TEST_H
- #include "test.h"
- typedef struct Exp_st Exp;
- typedef struct VarDecl_st VarDecl;
- /* E N U M S */
- enum ExpKind_t {
- EXP_BUILTIN,
- EXP_APP,
- EXP_BINOP};
- /* D E C L A R A T I O N S */
- struct Exp_st {
- enum ExpKind_t kind;
- int line;
- union {
- struct {
- int op;
- Exp* lh;
- Exp* rh;
- } binop;
- Symbol* builtin;
- struct {
- Symbol* f;
- Exp* arg;
- } app;
- } u;
- };
- Exp* exp_binop_new(int line, int op, Exp* lh, Exp* rh);
- Exp* exp_builtin_new(int line, Symbol* builtin);
- Exp* exp_app_new(int line, Symbol* f, Exp* arg);
- struct VarDecl_st {
- int line;
- Symbol* name;
- };
- VarDecl* vardecl_new(int line, Symbol* name);
- #endif
- /* I M P L E M E N T A T I O N */
- #include "exp_test.h"
- #define ALLOC(type) (type*)my_allocator(sizeof(type))
- Exp* exp_binop_new(int line, int op, Exp* lh, Exp* rh)
- {
- Exp* __a = ALLOC(Exp);
- __a->kind = EXP_BINOP;
- __a->line = line;
- __a->u.binop.op = op;
- __a->u.binop.lh = lh;
- __a->u.binop.rh = rh;
- return __a;
- }
- Exp* exp_builtin_new(int line, Symbol* builtin)
- {
- Exp* __a = ALLOC(Exp);
- __a->kind = EXP_BUILTIN;
- __a->line = line;
- __a->u.builtin = builtin;
- return __a;
- }
- Exp* exp_app_new(int line, Symbol* f, Exp* arg)
- {
- Exp* __a = ALLOC(Exp);
- __a->kind = EXP_APP;
- __a->line = line;
- __a->u.app.f = f;
- __a->u.app.arg = arg;
- return __a;
- }
- VarDecl* vardecl_new(int line, Symbol* name)
- {
- VarDecl* __a = ALLOC(VarDecl);
- __a->line = line;
- __a->name = name;
- return __a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement