トークン読み込み用クラス (大文字・小文字を意識しない 言語用)

これまでC# で作成してきた「SourceToHTML」を、C++Builder に焼きなおしてみます。

TokenReaderNoCase.h


//*******************************************************************************************************
// トークンごとに 文字列と その種類を返す ( 大文字・小文字を意識しない 言語用 )
//*******************************************************************************************************
#ifndef TokenReaderNoCaseH
#define TokenReaderNoCaseH
//---------------------------------------------------------------------------
#include "TokenReaderCommon.h"
//---------------------------------------------------------------------------
class TTokenReaderNoCase : public TTokenReaderCommon
{
private:
// 予約語 コレクションを設定
void __fastcall initKeyWordNoCase(AnsiString langType);

protected:
// 逐語的文字列か?
bool __fastcall IsLiteral();
// 状態を更新 (逐語的文字列)
void __fastcall getNextStateStrLit();
// 予約語ではないか?
WideString __fastcall getKeyWord();

public:
// 初期化
__fastcall TTokenReaderNoCase(TTextReader* reader, AnsiString langType);
};
#endif

TokenReaderNoCase.cpp


//*******************************************************************************************************
// トークンごとに 文字列と その種類を返す ( 大文字・小文字を意識しない 言語用 )
//*******************************************************************************************************
#pragma hdrstop
#include <vcl.h>
#include "TokenReaderNoCase.h"
//-------------------------------------------------------------------------------------------------------
#pragma package(smart_init)
//-------------------------------------------------------------------------------------------------------
// 初期化
//-------------------------------------------------------------------------------------------------------
__fastcall TTokenReaderNoCase::TTokenReaderNoCase(TTextReader* reader, AnsiString langType):TTokenReaderCommon(reader, langType)
{
//予約語 コレクションを設定
initKeyWordNoCase(langType);
}
//-------------------------------------------------------------------------------------------------------
// 予約語 コレクションを設定
//-------------------------------------------------------------------------------------------------------
void __fastcall TTokenReaderNoCase::initKeyWordNoCase(AnsiString langType)
{
_keyWords->CaseSensitive = false;
}
//-------------------------------------------------------------------------------------------------------
// 逐語的文字列か?
//-------------------------------------------------------------------------------------------------------
bool __fastcall TTokenReaderNoCase::IsLiteral()
{
return (_context->currChar == '\'');
}
//-------------------------------------------------------------------------------------------------------
// 状態を更新 (逐語的文字列)
//-------------------------------------------------------------------------------------------------------
void __fastcall TTokenReaderNoCase::getNextStateStrLit()
{
TTokenReaderCommon::getNextStateStrLit();

if (_context->currChar == '\'')
_context->State = "その他";
}
//-------------------------------------------------------------------------------------------------------
// 予約語ではないか?
//-------------------------------------------------------------------------------------------------------
WideString __fastcall TTokenReaderNoCase::getKeyWord()
{
//識別子が 予約語であれば、その文字列を返す
int idxKeyWord = _keyWords->IndexOf(_context->currToken->tokenString);
if (idxKeyWord >= 0)
return _keyWords->Strings[idxKeyWord];

return "";
}