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

📄 idenitem.h

📁 这是一个能够自动生成文档的程序
💻 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 + -