📄 compiler.h
字号:
// Compiler.h: interface for the CCompiler class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_COMPILER_H__8DF05B9A_573C_452E_97B8_C6984ACBC9B1__INCLUDED_)
#define AFX_COMPILER_H__8DF05B9A_573C_452E_97B8_C6984ACBC9B1__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "DualityModel.h"
#include "SymbolRecord.h"
#include "QuadRuple.h"
#include <vector>
using namespace std;
#define PROGRAM 0
#define BEGIN 1
#define END 2
#define VAR 3
#define IF 4
#define THEN 5
#define ELSE 6
#define WHILE 7
#define DO 8
#define INTEGER 9
#define REAL 10
#define ID 11
#define INTNUM 12
#define REALNUM 13
#define ASSIGN 14
#define PLUS 15
#define TIMES 16
#define OR 17
#define AND 18
#define NOT 19
#define EQ 20
#define LT 21
#define LE 22
#define GT 23
#define GE 24
#define NE 25
#define SEMI 26
#define LPAREN 27
#define RPAREN 28
#define COMMA 29
#define COLON 30
#define LCUT 31
#define RCUT 32
#define SUB 33
#define JMP 34
#define JNZ 35
/*以下宏定义为错误处理服务*/
#define Nonlicetchar 1
#define Nonlicetword 2
#define ProgramExpect 3
#define BeginExpect 4
#define EndExpect 5
#define VarExcept 6
#define LeadTypeExcept 7
#define LeadSExcept 8
#define LeadAExcept 9
#define LeadAEExcept 10
#define LeadTExcept 11
#define LeadFExcept 12
#define LeadBEExcept 13
#define LeadBTExcept 14
#define LeadBFExcept 15
#define OperandExcept 16
#define OperatorExcept 17
#define ComparisonOpExcept 18
#define ThenExcept 19
#define IDExcept 20
#define DoExcept 21
#define ASSIGNExcept 22
#define SEMIExcept 23
#define LPARENExcept 24
#define RPARENExcept 25
#define COMMAExcept 26
#define COLONExcept 27
#define RCUTExcept 28
#define UndeclaredId 29
#define IdRedefinition 31
#define COLONMiss 32
#define ExtraWordAfterEnd 33
#define TypeUnsuited 30
#define SEMIMiss 34
#define ExtraSEMI 35
/*错误类型宏定义完毕*/
typedef struct
{
CString KeyWord ;
int id ;
}keyword;
typedef struct
{
int Position ; //方便找到出错单词,或者字符
int ErrorType ; //
int OccurLine ; //
}m_eError;
typedef struct
{
int TC ;
int FC ;
}BoolTable;
typedef struct //设置成结构体,为了提高程序的可读性
{
int Chain ;
}Statement;
class CCompiler
{
public:
void SkipToSEMI();
void Backward();
BOOL Is(int type);
int Merge(int p1,int p2);
void BackPatch(int p,int t);
int VariableLegal(CString token,int type);
int LookUpRecord(CString Name);
int NewTemp();
int Gen(int op, int arg1, int arg2, int result);
int Entry(CString Name);
void FillSymbolRecord(int type);
void A();
void ROP();
BoolTable BF();
BoolTable BT();
int F();
int T();
void TAIL();
BoolTable BE();
int AE();
Statement S();
BOOL Match(int type);
void Advance();
Statement STL();
void TYPE();
void VARST();
void VARS();
void MPROGRAM();
void YuFa();
void Error(int position, int errortype,int line);
int LookUp(CString str);
void Initiate_Keywords_Table();
void CiFa();
void SetSourceStr(CString str);
CCompiler();
vector<CString> Nonlicetwords;//非法单词表
vector<DualityModel> m_dModel; //二元式存储结构
vector<QuadRuple> m_fourModel;//四元式存储结构
vector<m_eError> m_eErrorTable;//错误信息表
vector<SymbolRecord> m_SymbolRecord;//符号表
vector<CString> m_Variable; //所有声明的变量名表
virtual ~CCompiler();
DualityModel m_DualityModel;
QuadRuple m_QuadRuple;
CString IDAssgin; //赋值语句中将被赋值的变量
int IDAssginPosition; //如是合法变量,指示在符号表中的位置
CString m_sSourceStr ;
int m_error ;
BoolTable m_bool; //布尔表达式TC和FC结构体
keyword my_KeyWords[11]; //关键字表
m_eError error ; //0代表无错,1代表词法错,2代表语法错
CString CurToken; //当前分析的单词串
int CurStep; //指示当前分析的单词
int CurLine; //指示当前分析单词所在行
int tempnum; //临时变量个数
int NXQ; //下一个将要产生的四元式编号
int Nonlicetwordnum; //非法单词序号
int CurType; //当前数值类型
};
#endif // !defined(AFX_COMPILER_H__8DF05B9A_573C_452E_97B8_C6984ACBC9B1__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -