📄 compiler1.h
字号:
#if !defined(AFX_COMPILER_H__9E236A77_B434_4D97_AF7E_38B4F107BF3A__INCLUDED_)
#define AFX_COMPILER_H__9E236A77_B434_4D97_AF7E_38B4F107BF3A__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 CCompiler
{
public:
InterfaceType * GetTable();
void YuYiFengXi();
void YuFaFengXi();
void CiFaFengXi();
CCompiler();
virtual ~CCompiler();
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_COMPILER_H__9E236A77_B434_4D97_AF7E_38B4F107BF3A__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -