📄 identifier.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 + -