?? cppparser.h
字號:
#ifndef __CPPPARSER_H__
#define __CPPPARSER_H__
#pragma once
#include <afxtempl.h>
#include "Pages.h"
#include "TokenReader.h"
#include "Identifiers.h"
#include "CPGlobals.h"
//C/C++代碼解析器
class CCppParser
{
public:
//構造函數
CCppParser();
//析構函數
virtual ~CCppParser();
public:
//解析一個文件的代碼
BOOL ParseFile(LPCTSTR iPathName);
//解析一個代碼頁的代碼
BOOL ParsePage(CPage* ipPage);
private:
//解析代碼字符串
BOOL ParseCode(char* ipCode);
//預處理
BOOL Preprocessor(CTokenList& ioList);
//將源代碼轉換成記號序列
void ReadTokenList(CTokenList& oList, LPCTSTR ipCode);
//清除記號序列對象
void ClearTokenList(CTokenList& iList);
//解析預編譯代碼
BOOL ParsePreprocessor(CTokenList& ioList, POSITION& ioPos);
//解析#if
void ParsePreprocessorIf(CTokenList& ioList, POSITION& ioPos);
//解析#ifdef
void ParsePreprocessorIfdef(CTokenList& ioList, POSITION& ioPos, BOOL iNot=FALSE);
//解析#define
void ParsePreprocessorDefine(CTokenList& ioList, POSITION& ioPos);
//解析#undef
void ParsePreprocessorUndefine(CTokenList& ioList, POSITION& ioPos);
//解析#include
void ParsePreprocessorInclude(CTokenList& ioList, POSITION& ioPos);
//解析一個單詞或以一個單開始的代碼
void ParseWord(CTokenList& ioList, POSITION& ioPos, POSITION& iCurrPos, LPCTSTR iWord);
//解析namespace定義
void ParseNameSpace(CTokenList& ioList, POSITION& ioPos);
//解析模板聲明
void ParseTemplate(CTokenList& ioList, POSITION& ioPos);
//解析全局函數或變量
void ParseGlobalFuncOrVar(CTokenList& ioList, POSITION& ioPos);
//清除所有內容
void ClearContent();
//設置忽略標記,為TRRE時跳過當前代碼
void SetSkip(BOOL iSkip=TRUE){mSkip = iSkip;};
//重置忽略標記
void ResetSkip() {mSkip = !mSkip;};
//判斷是否處于忽略標記
BOOL IsSkip() const {return mSkip;};
//設置忽略標記的層次: #ifdef ... #ifdef
void SetSkipCount(int iCount) {mSkipCount+=iCount;};
//取得忽略標記的層次
int GetSkipCount() const {return mSkipCount;};
//忽略當前行的內容,即把ioPos移到指到下一行開始Token
void GotoNextLine(CTokenList& ioList, POSITION& ioPos, CToken* ipCurrToken);
//判斷字符是否可作為單詞的開始
inline BOOL IsBeginOfWord(char ch);
//判斷字符是否可作為單詞的一部分
inline BOOL IsWordPart(char ch);
//判斷字符是否可作為數字的開始
inline BOOL IsDigit(char ch);
private:
//為TRUE時,跳過讀到的內容,用于記錄編譯開關的狀態
BOOL mSkip;
//當mSkip為TRUE時,記錄內嵌的#if/#endif對的匹配情況
int mSkipCount;
UNIT_TEST(CCppParser);
};
#include "CppParser.inl"
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -