mirror of
https://github.com/iritmaximus/ttk91-compiler.git
synced 2026-10-12 19:13:40 +03:00
implemented functions for better ast creation after parsing
This commit is contained in:
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user