diff options
author | Julian T <julian@jtle.dk> | 2019-10-31 20:44:39 +0100 |
---|---|---|
committer | Julian T <julian@jtle.dk> | 2019-10-31 20:44:39 +0100 |
commit | a9e9b8c82cb67be9f0fa19c698fbf6f030dc88bb (patch) | |
tree | e276c5fd6ed3ce92eb153aad87a92b6a986d8069 /sem1/osc/miniproject/cnasm/ast.h | |
parent | 96b0849a5ff3f510377499a353ae73239416c489 (diff) |
Added assignment for nasm preassembler thing
Diffstat (limited to 'sem1/osc/miniproject/cnasm/ast.h')
-rw-r--r-- | sem1/osc/miniproject/cnasm/ast.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/sem1/osc/miniproject/cnasm/ast.h b/sem1/osc/miniproject/cnasm/ast.h new file mode 100644 index 0000000..61a8f4f --- /dev/null +++ b/sem1/osc/miniproject/cnasm/ast.h @@ -0,0 +1,53 @@ +#ifndef AST_HEADER +#define AST_HEADER + +#include <stdbool.h> +#include <stdint.h> + +#define CEQ 0x10 +#define CNEQ CEQ ^ 0x80 +#define CGT 0x20 +#define CLT 0x30 +#define CLEQ CGT ^ 0x80 +#define CGEQ CLT ^ 0x80 + +enum ntype { TSTM_LIST, TIF, TFOR, TIDENT, TWHILE}; + +typedef struct cond { + uint8_t cmp; + char *a; + char *b; +} cond_t; + +typedef struct ast_node { + enum ntype t; + // Dependent on type + union { + struct { + cond_t *condition; + struct ast_node *iftrue; + struct ast_node *iffalse; + } flowctrl; + struct { + cond_t *condition; + char *pre; + char *inc; + struct ast_node *stuff; + } forloop; + char *ident; + struct { + struct ast_node *children[2]; + } list; + }; +} ast_node_t; + +ast_node_t *insert_ctrl(enum ntype t, cond_t *c, ast_node_t *iftrue, ast_node_t *iffalse); +ast_node_t *insert_stm(ast_node_t *stm, ast_node_t *stm_list); +ast_node_t *insert_ident(char *ident); +ast_node_t *insert_for(char *pre, cond_t *c, char *inc, ast_node_t *stuff); + +cond_t *insert_cond(uint8_t cmp, char *a, char *b); + +void node_print(ast_node_t *node); + +#endif |