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

📄 tokenreader.h

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

#define MAX_SHORT 65535

#include "Token.h"
#include "afxtempl.h"
typedef CList<CToken*, CToken*>   CTokenList;
typedef CList<CTokenList*, CTokenList*>   CTokenListList;

DECLARE_TEST_DUMP(CTokenList)

typedef int (CToken::*PFReadToken)(LPCTSTR);

//记号读取器,将源代码转换为记号序列
class CTokenReader  
{
public:
	//构造函数
	CTokenReader();
	//析构函数
	virtual ~CTokenReader();

public:
	//初始化
	static void Init();
	//设置要转换为序号序列的源代码
	void SetCode(LPCTSTR ipCode) 
	{ASSERT(ipCode != NULL); mpCode = ipCode; Init();};
	//读取下一个Token
	CToken* NextToken();
	//将代码读取到TokenList中
	void ReadTokenList(CTokenList& oList, LPCTSTR ipCode);
	//删除TokenList中的对象
	static void ClearTokenList(CTokenList& iList);
	//在完成预处理后剔除无效的token如换行符
	static void DeleteInvalidToken(CTokenList& iList);
	//本函数主要用于读取函数或宏的参数
	//将TokenList转换为字符串,遇到type为iEndType的Token时结束,并返回TRUE,字符串不包含该Token
	//但iSkipBeginType和iSkipEndType之内的type为iEndType的Token则不结束
	//当出现不匹配的)时则结束,并返回FALSE, 表示读取完毕
    static BOOL TokenListToString(CString& oStr, CTokenList& ioList, 
		POSITION& ioPos, UINT iEndType=TT_UNDEFINED,
		UINT iSkipBeginType=TT_UNDEFINED, UINT iSkipEndType=TT_UNDEFINED);
	//将TokenList转换成C/C++字符串,如"需替负为\"
	static BOOL TokenListToCString(CString& oStr, CTokenList& ioList, 
		POSITION& ioPos, UINT iEndType=TT_UNDEFINED,
		UINT iSkipBeginType=TT_UNDEFINED, UINT iSkipEndType=TT_UNDEFINED);


private:
	//读取一个token前的预处理,忽略空格及其他无效字符
	//oColumns为跳过的字符数
	BOOL BeforeNextToken(UINT& oColumns);

	//读取一个非符号Token,如单词,数字,注释,字符串
	CToken* ReadCodeToken(UINT iType, PFReadToken pf, int iOffset, BOOL iForeSpace);
	//读取一个符号Token,如->,iLen为符号长度
	CToken* ReadOperatorToken(UINT iType, int iLen, BOOL iForeSpace);

	//判断记号类别
    int GetSymbolType(char ch1, char ch2='\0')
	{
		if(ch2 == '\0')
			return mSymbols[ch1];

        int index = ch1;
		index  <<= 8;
		index += ch2;
        return mSymbols[index];
	}

private:
	LPCTSTR mpCode;        //以0结尾的源代码

     //保存分界符,两个字节或一个字节
	 //两个字节的分界符,其值为左字节的值左移八位加历字节的值
	static UINT mSymbols[MAX_SHORT];  
    //int  mLine;
	//int  mColumn;

    UNIT_TEST(CTokenReader)
};

DECLARE_TEST_DUMP(CTokenReader)

#endif

⌨️ 快捷键说明

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