⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 identifier.h

📁 这是一个能够自动生成文档的程序
💻 H
字号:
#ifndef __IDENTIFIER_H__
#define __IDENTIFIER_H__
#pragma once

#include "Page.h"
#include "TokenReader.h"
#include "CodeException.h"


//修饰符
#define TRIM_STATIC      0x0001
#define TRIM_VOLATILE    0x0002
#define TRIM_MUTABLE     0x0004
#define TRIM_INLINE      0x0008
#define TRIM_PRIVATE     0x0010
#define TRIM_PROTECTED   0x0020
#define TRIM_PUBLIC      0x0040
#define TRIM_CONST       0x0080
#define TRIM_VIRTUAL     0x0100
#define TRIM_PUREVIRTUAL 0x0200

#define ISTRIM(val, trim) ((val & TRIM_##trim) == TRIM_##trim)

#define SYM_UNKNOW       0x0000
#define SYM_FUNCTION     0x0001
#define SYM_VARIABLE     0x0002



//各种标识符的基类
class CIdentifier
{
public:
	//构造函数
	CIdentifier(CPage* ipPage=NULL, int iLine=1, int iColumn=1);
	//析构函数
	virtual ~CIdentifier();


public:
	//预解析非关键字开头的代码,即不能根据开头的关键字识别其类型的代码
	//oSymList 输出函数或变量的代码,但不保存函数的实现代码
	//oSymType 输出代码类型:变量或函数
	//oDefinition 输出函数是否带实现
	//如果是变量或函数,返回TRUE,否则返回FALSE
    static BOOL BeforeParseUnknowCode(CTokenList& ioList, POSITION& ioPos, 
        CTokenList& oDeclList, UINT& oSymType, BOOL& oDefinition);

	//将多个token连接到数据类型字符串中
	static void CatDataType(CString& oType, CToken& oToken);

	//判断此标识符是在某页中是否可见
	BOOL IsVisibleByPage(CPage* ipVisibler);
	//取得标识符所在的代码页对象指针
	CPage* GetPage() {return mpPage;};
	//取得标识符名称
	CString GetName() const {return mName;};
	//设置标识符名称
	void SetName(LPCTSTR iName) {mName=iName;};
	//设置是否已定义
	void SetDefined(BOOL iDefi) {mDefined=iDefi;};
	//判断是否已定义
	BOOL IsDefined() const {return mDefined;};
	//设置修饰符位域
	void SetTrim(UINT iTrim) {mTrim |= iTrim;};
    //取得标识符包括域标识的完整的名称,如Namespace::ClassName::FuncName
	void GetFullName(CString& oFullName);
	//设置当前所在的域
	void SetCurrScope(LPCTSTR iScope);
	//设置域标识
	void SetScope(LPCTSTR iScope);
	//反向加入域标识
	void SetScopeReverse(LPCTSTR iScope);
	//设置标识符的注释
	void SetComment(LPCTSTR iComment) {mComment=iComment;};
	//取得标识符的注释
	void GetComment(CString& oComment) {oComment=mComment;};

	//取得一个可能含有中文的字符串的开头一部分
	//如果使用CString::Left,可能会因为中文问题造成乱码
	static void GetStringLeft(CString& oDes, CString& oSrc, UINT iLen);

private:
	//判断一个字符串是否以一个单词结尾
	static BOOL IsWordFinish(CString& iStr);

protected:
	//标识符所在的代码页、行号、列号,对于既有声明又有定义或实现的标识符,
	//这里保存声明所在的代码页、行号、列号,定义或实现所在的代码页、行号、
	//页号,由子类自行保存。
    CPage*   mpPage; 
	int      mLine;
	int      mColumn;
	CString  mName;         
    BOOL     mDefined;    //是否已定义
	UINT     mTrim;       //记录修饰符
	CString  mComment;    //保存注释

    CString* mpCurrScope; //隐式域 如 namespace
	CString* mpScope;     //显式的域,如 CMyClass::Func

	UNIT_TEST(CIdentifier)
};

DECLARE_TEST_DUMP(CIdentifier)

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -