www.pudn.com > CLanCompiler.rar > Compiler.h
// Compiler.h: interface for the CCompiler class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_COMPILER_H__F944C094_EB01_4C31_96CF_6A84A6676B3A__INCLUDED_)
#define AFX_COMPILER_H__F944C094_EB01_4C31_96CF_6A84A6676B3A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#pragma pack(push,1)
#define HEADANDEND 1 //程序头部或者尾部出现错误
#define HAVENOBODY 2 //只含有程序头部和尾部,而不含有程序体
#define CONSTANDVARERR 3 //常量或者变量在程序定义中出现错误
#define NAMEERR 4 //常量或者变量名在定义中出现错误
#define NUMBER 5 //整形数字串在定义中出现错误
#define NEEDVAR 6 //在程序中必须定义变量
#define PRINTFERR 7 //printf函数出现错误
#define SCANFERR 8 //scanf函数出现错误
#define STATEMENTERR 9 // 赋值语句出现错误
#define IFERR 10 //if语句出现错误
#define WHILEERR 11 //while语句出现错误
#define SE_FE_NOCODE 12 //没有代码
#define SE_ILLEGALCHAR 13 //不合法字符
#endif // _MSC_VER > 1000
//单词属性
enum LEXPROPERTY{KeyWord,Id,Const,OprSym,BndSym,IllegalChar};//关键字,变量,常量,运算符,界符,非法字符
#pragma pack(push,1)
//由词和属性构成的属性对
struct LEXPROPERTYVS
{
LEXPROPERTY lpProperty;//该字符串的属性
char *szStr; //字符串
};
//语法错误对应的结构体
struct SYNTAXERR
{
int iLine; //本来打算纪录错误的行数,结果没有实现
int iSyntaxErrCode;//语法错误代码
};
#include
#include
using namespace std;
//联系树节点和符号表的结构
struct TREENODE_LPV
{
HTREEITEM hTreeItem;
LEXPROPERTYVS lpv;
};
class CCompiler
{
public:
CCompiler();
virtual ~CCompiler();
bool flagErrSta;
bool flagErrNum;
bool flagVar;
bool flagChar; //不合法字符
public:
void OutErrToFile();
void Compile(char *szFile);//编译,公共接口
vector m_vectorSymbol;//符号表
vector m_vectorSyntaxErr; //语法错误代码
protected:
bool LexAnalysis(char *szstr); //词法分析
bool IsOprSym(char *szStr); //是否为运算符
bool IsBndSym(char *szStr); //是否为界符
bool IsKeyWord(char *szStr); //是否为关键字
bool IsInSymbolTab(char *szStr); //是否已在符号表中
char* JumpNoMatterChar(char *szStr);//跳过空格,回车,换行符,Tab
void Analysis();//语法分析
void Analysis_Prog();
void Analysis_Number();
void Analysis_Id();
void Analysis_Block();
void Analysis_Statement();
void Analysis_Const();
bool Analysis_Var();
protected:
void Analysis_while();
void Analysis_scanf();
void Analysis_if_eslse();
void Analysis_printf();
int m_iVecterSize;//符号表大小
int m_iCurPointer; //符号表中当前指针
CString s;
};
#endif // !defined(AFX_COMPILER_H__F944C094_EB01_4C31_96CF_6A84A6676B3A__INCLUDED_)