implemented functions for better ast creation after parsing

This commit is contained in:
Aaro Koivukangas
2024-08-16 13:25:49 +02:00
parent cf27629b5b
commit 9452ebfdb1
14 changed files with 159 additions and 48 deletions
+9
View File
@@ -25,5 +25,14 @@ struct expr {
};
struct expr * expr_create(expr_t kind, struct label *l, struct oper *o, struct ttk_register *f_arg, struct value *s_arg, struct comment *c, struct expr *n);
void expr_copy(struct expr *orig, struct expr *copy);
struct expr *expr_create_instruction(struct oper *o, struct ttk_register *ttk_reg, struct value *v);
struct expr *expr_create_instruction_one_arg(struct oper *o, struct value *v);
struct expr *expr_create_labeled_instruction(struct label *l, struct oper *o, struct ttk_register *ttk_reg, struct value *v);
struct expr *expr_create_labeled_instruction_one_arg(struct label *l, struct oper *o, struct value *v);
struct expr *expr_create_compiler_instruction(struct label *l, struct oper *o, struct value *v);
struct expr *expr_create_compiler_instruction_raw_label_oper_value(char* label, char *o, int value);
struct expr *expr_create_comment(struct comment *c);
#endif
+5 -2
View File
@@ -10,10 +10,13 @@ typedef enum {
struct label {
label_t kind;
const char *name;
char *name;
int value;
};
struct label * label_create(label_t kind, char *name, int value);
struct label * label_create(label_t kind, char* name, int value);
struct label * label_create_const(char* name);
struct label * label_create_const_sys(char* name);
struct label * label_create_tag(char* name);
#endif
+9 -1
View File
@@ -9,7 +9,8 @@ typedef enum {
OPER_LOGIC,
OPER_BRANCH,
OPER_STACK,
OPER_SYS
OPER_SYS,
OPER_COMPILER
} oper_t;
struct oper {
@@ -18,5 +19,12 @@ struct oper {
};
struct oper * oper_create(oper_t kind, char* oper_name);
struct oper * oper_create_data(char* oper_name);
struct oper * oper_create_arithmetic(char* oper_name);
struct oper * oper_create_logic(char* oper_name);
struct oper * oper_create_branch(char* oper_name);
struct oper * oper_create_stack(char* oper_name);
struct oper * oper_create_sys(char* oper_name);
struct oper * oper_create_compiler(char* oper_name);
#endif
+2
View File
@@ -14,5 +14,7 @@ struct ttk_register {
struct ttk_register * ttk_register_create(ttk_register_t kind, char* id, int value);
int parse_register_num(char *name, ttk_register_t kind);
struct ttk_register * ttk_register_create_register(char* name);
struct ttk_register * ttk_register_create_stack_register(char* name);
#endif
+11
View File
@@ -37,6 +37,17 @@ struct pure_value {
};
struct value * value_create(addr_mode_t addr_m, index_t i_m, struct pure_value *value, struct ttk_register *i_reg);
struct value * value_create_direct_value(struct pure_value *p_v);
struct value * value_create_direct_indexed(struct pure_value *p_v, struct ttk_register *ttk_reg);
struct value * value_create_address_mode_indexed(char addr_mode, struct pure_value *p_v, struct ttk_register *ttk_reg);
struct value * value_create_address_mode(char addr_mode, struct pure_value *p_v);
struct value * value_create_direct_register(struct ttk_register *ttk_reg);
struct pure_value * pure_value_create_ttk_register(struct ttk_register *ttk_reg);
struct pure_value * pure_value_create_value(int value);
struct pure_value * pure_value_create_label(struct label *l);
struct pure_value * pure_value_create(value_t kind, struct ttk_register *ttk_reg, int num, struct label *l);
addr_mode_t parse_addr_mode(char addr_mode);