?? gencode.h
字號:
#ifndef _C_GEN_CODE_H_
#define _C_GEN_CODE_H_
#include "SymTab.h"
#include "GBStrTab.h"
#define MAX_CHAR_IN_LINE 255
#define GEN_END_EXPRESS(x) \
if ( x ) \
{ \
if ( IS_PUSHED(x) ) \
{ \
gen_pop_reg("ax"); \
} \
else if ( IS_ARRAY_HAS_INDEX(x) ) \
{ \
if ( IS_PUSHED((x)->args) ) \
{ \
gen_pop_reg("ax"); \
} \
del_symbol((x)->args); \
(x)->args = NULL; \
} \
}
void open_code2();
void close_code2();
void write_to_code2(char *p_code);
void write_to_code(char *p_code);
void write_to_data(char *p_code);
void write_to_decl(char *p_code);
void copy_code2_code();
void gen_func_head(symbol *func);
void gen_func_end(symbol *func);
void gen_cmp(char *p1, char *p2);
void gen_cmp_cl(char *p1, int num);
void gen_mov(char *p1, char *p2);
void gen_mov_cl(char *p1, int num);
void gen_lea(char *p1, char *p2);
void gen_add(char *p1, char *p2);
void gen_add_cl(char *p1, int num);
void gen_sub(char *p1, char *p2);
void gen_sub_cl(char *p1, int num);
void gen_xor(char *p1, char *p2);
void gen_or(char *p1, char *p2);
void gen_and(char *p1, char *p2);
void gen_shl(char *p1, char *p2);
void gen_shr(char *p1, char *p2);
void gen_neg(char *p);
void gen_inc(char *p);
void gen_dec(char *p);
void gen_call(char *name);
void gen_not(char *p);
void gen_mul(char *p);
void gen_div(char *p);
void gen_label(char *lb);
void gen_jump(char *jp, char *lb);
void gen_push_reg(char *reg);
void gen_pop_reg(char *reg);
// gen globe value
void gen_globe_var_list(symbol *p);
// gen string code
void gen_string_tab(const_string *head);
// gen data segment head
void gen_data_segment_head();
// gen data segment end
void gen_data_segment_end();
// gen code segment start & end
void gen_code_segment_head();
void gen_code_segment_end();
// is main function exist
int is_main_function_exist();
// get match regist xx, or xl
char *get_match_reg(symbol *p, char *reg);
// clear reg high position if needed
void clear_reg_high_if_needed(symbol *p,char *reg);
// get a not dup label for gen code
char *get_a_label();
// gen mov not pushed cl or var to reg
void gen_mov_nopush_to_reg(symbol *p, char *reg);
// mov value (pushed or no pushed) to reg
void gen_mov_value_to_reg(symbol *p,char *reg);
// get two operator , at least one is not cl
// return value is the attribute that be translate
symbol *gen_get_two_op_not_cl(symbol *p1, symbol *p2, char *reg1, char *reg2);
// gen code that mov reg to a var address
void gen_mov_reg_to_var(char *reg, symbol *p);
// gen array code
void gen_get_array_element(symbol *a);
// gen push argument code
void gen_push_argument(symbol *a);
// gen assign init
void gen_var_assign_init(symbol *v);
// gen extern file declaration
void gen_extern_func(symbol *func);
// remove all tmp file
void remove_all_tmp();
void InitGenCode();
void DestoryGenCode(char *out_name);
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -