?? complier.h
字號:
// Complier.h: interface for the CComplier class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_COMPLIER_H__65D87370_230D_4E8A_9998_85682EE0A8FF__INCLUDED_)
#define AFX_COMPLIER_H__65D87370_230D_4E8A_9998_85682EE0A8FF__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define BOOL int
#define TRUE 1
#define FALSE 0
#define MAX_LEX_LEN 20
#define MAX_NUMBER_LEN 8
#define QUAD_OPCODE_LEN 10
#define QUAD_OPCODE_TABLE_LEN 30
#define LEX_DUAD_TABLE_LEN 10000
#define ERROR_TABLE_LEN 100
#define ERROR_MESSAGE_LEN 100
#define ID_TABLE_LEN 1000
#define LEVEL_TABLE_LEN 20
#define TEMP_TABLE_LEN 100
#define QUAD_TABLE_LEN 3000
#define KEY_WORD_TABLE_LEN 50
#define SOURSE_BUFFER_LEN 30003
struct CifaResult
{
int type;//0:error,1:id,2:num,3-:keyword and operator,-1:end note
int value;//二元式中value值
char text[MAX_LEX_LEN];//單詞
int address;//源文件緩沖區中地址
};
struct idtype //標識符表
{
char name[MAX_LEX_LEN];//名字
int typ;//類型1:integer,2:real,3:program or procedure name
int kind;//屬性1:簡單變量,2:臨時變量,3:值參變量,4:變參變量
int addr;//地址
};
struct leveltype //層次表
{
char name[MAX_LEX_LEN];//名字
int outern;//外層
int lnum;//層次號
int parnum;//參數個數
int varnum;//變量個數
int pointer;//標識符表首址
int recl;//活動記錄長度
int temp;//
int lnp;//入口
};
struct temptype //
{
BOOL used;//
int typ;//
int taddr;//
};
struct argtype //
{
int fl;//類型1:常數2:指令入口3:臨時變量4:直接訪問變量5:間接訪問變量6+i:第i外層變量
int flvalue;//值 常數值|指令地址|相對地址
};
struct quadtype //四元式表
{
int op;//操作
argtype arg1;//操作數
argtype arg2;//操作數
argtype result;//結果
};
struct vartype //變量
{
int lasent;//標識符表長度指針
int lastbl;//層次表長度指針
int currbl;//當前層指針
int tempp;//
int nxq;//四元式表長度指針
};
struct yuyivaluetype
{
int Etyp;
int Evalue;
int TC;
int FC;
int Code;
int disp;
};
typedef char (* USER_TYPE_cha100)[ERROR_MESSAGE_LEN];
typedef char (* USER_TYPE_cha10)[QUAD_OPCODE_LEN];
struct InterfaceType
{
CifaResult * * LexicalDuad;//詞法分析二元式
quadtype * SemanticQuad;//語義分析四元式
char * SourseBuffer;//源程序緩沖區
USER_TYPE_cha100 ErrorMessageTable;//出錯信息表
USER_TYPE_cha10 QuadOpcodeTable;//四元式操作符編碼表
int ErrorNumber;//語法語義錯誤代碼
int ErrorAddress;//語法語義錯誤對應單詞的地址
};
class CComplier
{
public:
CComplier();
virtual ~CComplier();
InterfaceType * GetTable();
void YuYiFengXi();
void YuFaFengXi();
void CiFaFengXi();
protected:
InterfaceType m_Interface;
yuyivaluetype yuyivalue;
int lookupv2(char *,int &);
int merge(int,int,int);
int newtemp(int);
int lookupp(char *);
int lookupv(char *,int);
void backpatch(int,int,int,int);
void addid(char *,int,int,int);
vartype yuyivar;
void gen(char *,int,int,int,int,int,int);
char m_QuadOpCodeTable[QUAD_OPCODE_TABLE_LEN][QUAD_OPCODE_LEN];
idtype idtab[ID_TABLE_LEN];
leveltype leveltab[LEVEL_TABLE_LEN];
temptype temptab[TEMP_TABLE_LEN];
quadtype quad[QUAD_TABLE_LEN];
int m_nErrorAddress;
int m_nErrorNum;
CifaResult * GetNextSym();
CifaResult * GetSym();
void NextSym();
CifaResult * GetCurSym();
int m_pCurSym;
BOOL isdigit(char);
BOOL isalnum(char);
BOOL isalpha(char);
void Initial();
int p_GuanXi();
int p_GuanXiBiaoDaShi();
int p_BuErBiaoDaShi();
int p_YingZhi();
int p_Xiang();
int p_BiaoDaShi();
int p_ShiChanBiao();
int p_GuoChengYuJu();
int p_XunHuanYuJu();
int p_TiaoJianYuJu();
int p_FuZhiYuJu();
int p_FuHeYuJu();
int p_YuJu();
int p_YuJuChuan();
int p_XingChan();
int p_XingChanBuFeng();
int p_GuoChengShuoMing();
int p_JianBianShuoMing();
int p_ShuoMing();
int p_ShuoMingChuan();
int p_ChengXuTi();
int p_ChengXu();
int r_GuanXi();
int r_GuanXiBiaoDaShi();
int r_BuErBiaoDaShi();
int r_YingZhi();
int r_Xiang();
int r_BiaoDaShi();
int r_ShiChanBiao();
int r_GuoChengYuJu();
int r_XunHuanYuJu();
int r_TiaoJianYuJu();
int r_FuZhiYuJu();
int r_FuHeYuJu();
int r_YuJu();
int r_YuJuChuan();
int r_XingChan();
int r_XingChanBuFeng();
int r_GuoChengShuoMing();
int r_JianBianShuoMing();
int r_ShuoMing();
int r_ShuoMingChuan();
int r_ChengXuTi();
int r_ChengXu();
int FindInCifaTab(char *);
int FindInKeyWordTab(char *);
char m_tErrorMessage[ERROR_TABLE_LEN][ERROR_MESSAGE_LEN];
char m_tKeyWord[KEY_WORD_TABLE_LEN][MAX_LEX_LEN];
CifaResult * m_tCifa[LEX_DUAD_TABLE_LEN];
int m_ntCifaLen;
char GetNextCh();
char GetCh();
void NextCh();
char GetCurCh();
int m_pCurCh;
char m_aSourse[SOURSE_BUFFER_LEN];
};
#endif // !defined(AFX_COMPLIER_H__65D87370_230D_4E8A_9998_85682EE0A8FF__INCLUDED_)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -