?? cgen.h
字號:
#ifndef CGEN_H_
#define CGEN_H_
/**********************************************************
** 宏定義,從棧中彈出兩個操作數,用于雙目操作符的運算
**********************************************************/
#define READTWO\
AllGlobals.code.write("\npop\t",5);\
AllGlobals.code.write(register2,2);\
AllGlobals.code.write("\npop\t",5);\
AllGlobals.code.write(register1,2);
/************************************************************
** 宏定義,用于判斷while,for,if里面的條件表達式式
*************************************************************/
#define JUDGE_CONDITION(the_brother)\
if(strcmp(pa_Stmt->m_pchild[0]##the_brother##m_strIDname,">=")==0 ||\
strcmp(pa_Stmt->m_pchild[0]##the_brother##m_strIDname,"<=")==0){\
AllGlobals.code.write("\npop\tax",7);\
AllGlobals.code.write("\njle\t",5);}\
else if(strcmp(pa_Stmt->m_pchild[0]##the_brother##m_strIDname,">")==0 ||\
strcmp(pa_Stmt->m_pchild[0]##the_brother##m_strIDname,"<")==0){\
AllGlobals.code.write("\npop\tax",7);\
AllGlobals.code.write("\njl\t",4);}\
else if(strcmp(pa_Stmt->m_pchild[0]##the_brother##m_strIDname,"==")==0){\
AllGlobals.code.write("\npop\tax",7);\
AllGlobals.code.write("\ncmp\tax,0",9);\
AllGlobals.code.write("\nje\t",4);\
}\
else{\
AllGlobals.code.write("\npop\tax",7);\
AllGlobals.code.write("\ncmp\tax,0",9);\
AllGlobals.code.write("\njne\t",5);\
}
/*****************************************************************
**類名: Cgenerator
**功能描述:這是一個完整的代碼生成器,根據符號表與語法樹生成實際的
** 8088/8086匯編代碼。
*****************************************************************/
class Cgenerator{
private:
static int m_iunique; //輔助產生唯一的符號地址
static Canalyzer* m_panalyzer;
char register1[3]; //記錄寄存器的名稱
char register2[3];
private:
void Data_seg(void);
void codeGen(void);
void generate_data(const char *pa_suffix,CTreeNode* pa_Declare);
void Stack_seg(void);
void Code_seg(void);
void generate_func(CTreeNode* pa_Func);
void generate_params(CTreeNode* pa_param);
void generate_stmt(CTreeNode* pa_commpound);
void generator_exp(CTreeNode* pa_exp);
void generator_substmt(CTreeNode* pa_Stmt);
void generator_unique_addr(CTreeNode *pa_name);
void generate_show_func(void);
public:
Cgenerator();
~Cgenerator();
};
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -