📄 idenitem.h
字号:
#ifndef __IDENITEM_H__
#define __IDENITEM_H__
#pragma once
enum
{
ID_UNDEFINED, //类别不明
ID_MACRO, //宏
ID_BUILTIN, //内置数据类型
ID_TYPE, //包括类,结构,接口
ID_ENUM, //枚举
ID_TYPETRIM, //数据类型修饰符如const,unsigned,volatile
ID_ACCESSTRIM, //访问修饰符,包括:private,protected,public
ID_FUNCTION, //函数
ID_VARIABLE, //变量
ID_CONST, //常量,指由enum定义的常量,如果属于类的,命名为类名@常量名
ID_KEYWORD, //其他关键字
};
enum {
ID_NOTFOND, //标识符未定义
ID_UNVISIBLE, //已定义,但不可见
ID_UNACCESS, //已定义,可见,但不可访问,如私有成员
ID_QUOTABLE, //可引用的,已定义,可见,可访问
};
enum KEYWORD
{
KEY_NOT, //非关键字
KEY___INT8, KEY___INT16, KEY___INT32, KEY___INT64, KEY_BOOL, KEY_CHAR,
KEY_SHORT, KEY_INT, KEY_LONG, KEY_FLOAT, KEY_DOUBLE, KEY_VOID,
KEY_DATATYPE, //前面为基本数据类型
KEY_DEFINE, KEY_ELSE, KEY_ELIF, KEY_ENDIF, KEY_ERROR, KEY_IF,
KEY_IFDEF, KEY_IFNDEF, KEY_INCLUDE, KEY_PRAGMA, KEY_UNDEF, KEY___ASM,
KEY___BASED, KEY___CDECL, KEY___DECLSPEC, KEY___EXCEPT, KEY___FASTCALL,
KEY___FINALLY, KEY___INLINE, KEY__LEAVE, KEY___MULTIPLE_INHERITANCE,
KEY___PASCAL, KEY___SINGLE_INHERITANCE, KEY___STDCALL, KEY___TRY, KEY___UUIDOF,
KEY___VIRTUAL_INHERITANCE, KEY__ASM, KEY__CDECL, KEY__FASTCALL, KEY__PASCAL,
KEY__STDCALL, KEY_AUTO, KEY_BREAK, KEY_CASE, KEY_CATCH, KEY_CLASS, KEY_CONST,
KEY_CONST_CAST, KEY_CONTINUE, KEY_DEFAULT, KEY_DELETE, KEY_DO, KEY_DYNAMIC_CAST,
KEY_ENUM, KEY_EXPLICIT, KEY_EXTERN, KEY_FALSE, KEY_FOR, KEY_FRIEND, KEY_GOTO,
KEY_INLINE, KEY_INTERFACE, KEY_MUTABLE, KEY_NAMESPACE, KEY_NEW, KEY_OPERATOR,
KEY_PASCAL, KEY_PRIVATE, KEY_PROTECTED, KEY_PUBLIC, KEY_REGISTER, KEY_REINTERPRET_CAST,
KEY_RETURN, KEY_SIGNED, KEY_SIZEOF, KEY_STATIC, KEY_STATIC_CAST, KEY_STRUCT,
KEY_SWITCH, KEY_TEMPLATE, KEY_THIS, KEY_THROW, KEY_TRUE, KEY_TRY, KEY_TYPEDEF,
KEY_TYPEID, KEY_TYPENAME, KEY_UNION, KEY_UNSIGNED, KEY_USING, KEY_VIRTUAL,
KEY_VOLATILE, KEY_WHILE, KEY_WMAIN, KEY_XALLOC, KEY_ELSEIF, KEY_AFX_MSG,
KEY_CODE_SEG, KEY_DEFINED, KEY_DLLEXPORT, KEY_DLLIMPORT, KEY_MAIN, KEY_NAKED,
KEY_OFF, KEY_ON, KEY_ONCE, KEY_PACK, KEY_POP, KEY_PUSH, KEY_THREAD, KEY_UUID,
KEY__DECLSPEC,
KEY_COUNT //关键字个数
};
extern LPCTSTR gKeywords[];
#include "Identifier.h"
#include "Variable.h"
#include "Type.h"
#include "ExFunction.h"
//标识符项对象
class CIdenItem
{
public:
//构造函数
CIdenItem();
//析构函数
virtual ~CIdenItem();
//是否访问修饰符
BOOL IsAccessTrim(){return (keyIndex == KEY_PUBLIC ||
keyIndex == KEY_PROTECTED || keyIndex == KEY_PRIVATE); };
//判断标识符是否是一个数据类型
BOOL IsDataType() {
//基本数据类型
if(keyIndex > KEY_NOT && keyIndex < KEY_DATATYPE)
return TRUE;
//自定义数据类型
return (type == ID_TYPE || type == ID_ENUM);
}
//判断标识符是否是一个除基本数据类型以外的关键字
BOOL IsNotDataTypeKey(){
return keyIndex > KEY_DATATYPE;
}
//取得标识符类别
CString GetDataType(){
ASSERT(IsDataType());
//基本数据类型
if(keyIndex > KEY_NOT && keyIndex < KEY_DATATYPE)
return gKeywords[keyIndex];
//自定义数据类型
ASSERT(pIden != NULL);
ASSERT(type == ID_TYPE || type == ID_ENUM);
return pIden->GetName();
}
//取得名字
CString GetName(){
if(keyIndex > KEY_NOT && keyIndex < KEY_COUNT)
return gKeywords[keyIndex];
//自定义数据类型
ASSERT(pIden != NULL);
if(pIden != NULL)
return pIden->GetName();
return CString("");
}
UINT type; //类别
KEYWORD keyIndex; //如果是关键字,保存关键字编号,否则为KEY_NOT
CIdentifier* pIden; //标识符对象指针
};
#endif // !defined(AFX_IDENITEM_H__27F8772A_32AE_4209_A6DC_D80F66B0E100__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -