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_)