/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2007.02.21 * ³» ¿ë : ¾îÈÖ ºÐ¼®±â * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once class cToken; class cMemFileToRead; class cTokenW; class cMemFileToReadW; /// Ãʰ£´Ü ¾îÈÖ ºÐ¼®±â /// ÅØ½ºÆ® ÆÄÀÏÀ» À§ÇÑ ¾îÈÖ ºÐ¼®±âÀÌ´Ù. class cLexer { public: cLexer(); cLexer( cMemFileToRead* pfile ); cLexer( const char* pbuffer, unsigned int size ); virtual ~cLexer(); /// ¼Ò½º ¼³Á¤ virtual void SetSource( cMemFileToRead* pfile ); virtual void SetSource( const char* pbuffer, unsigned int size ); /// ´ÙÀ½ ÅäÅ« ¸®ÅÏ /// ÀÎÀÚ·Î ³Ñ±ä ÅäÅ«¿¡ °ª( ŸÀÔ, ÁÙ¹øÈ£ µî )À» ¼³Á¤Çϰí, ÅäÅ«ÀÇ Å¸ÀÔÀ» ¸®ÅÏÇÑ´Ù. virtual int GetNextToken( cToken* ptoken ); /// ´ÙÀ½ ÅäÅ« ¹®ÀÚ¿­ ¸®ÅÏ /// ¿¹¾à¾î °Ë»ç´Â »ý·«ÇÏ°í ¹Ù·Î ¹®ÀÚ¿­¸¸ ¸®ÅÏÇÑ´Ù. virtual int GetNextString( cToken* ptoken ); /// Ű¿öµåÀÇ ÅäÅ« ŸÀÔÀ» ¸®ÅÏ /// Ű¿öµå°¡ ¾Æ´Ï¸é TOKEN_VAR¸¦ ¸®ÅÏÇÑ´Ù. virtual int GetTokenType( const cString& keyword ); /// Á¾·á ¿©ºÎ¸¦ ¸®ÅÏ virtual bool IsEnd(); protected: /// ÇÑ ±ÛÀÚ¸¦ ¸®ÅÏÇÏ°í ´ÙÀ½ À§Ä¡·Î À̵¿ char GetNextChar(); /// ÇÑ ±ÛÀÚ¸¦ ¹°¸² void UngetNextChar(); /// Ű¿öµå¿¡ ÅäÅ« ŸÀÔÀ» ¿¬°á void BindKeyword( const cString& keyword, int tokenType ); protected: /// ¹öÆÛ Æ÷ÀÎÅÍ const char* mpBuffer; /// ¹öÆÛ ±æÀÌ unsigned int mBufferLen; /// ¹®ÀÚ¸¦ ÀÐÀ» À§Ä¡ unsigned int mPos; /// ÁÙ ¹øÈ£ int mLine; /// Ű¿öµå ¸Ê typedef tHashMap cKeywordMap; cKeywordMap mKeywordMap; }; //--------------------------------------------------------------------- class cLexerW { public: cLexerW(); cLexerW( cMemFileToReadW* pfile ); cLexerW( const wchar_t* pbuffer, unsigned int size ); virtual ~cLexerW(); /// ¼Ò½º ¼³Á¤ virtual void SetSource( cMemFileToReadW* pfile ); virtual void SetSource( const wchar_t* pbuffer, unsigned int size ); /// ´ÙÀ½ ÅäÅ« ¸®ÅÏ /// ÀÎÀÚ·Î ³Ñ±ä ÅäÅ«¿¡ °ª( ŸÀÔ, ÁÙ¹øÈ£ µî )À» ¼³Á¤Çϰí, ÅäÅ«ÀÇ Å¸ÀÔÀ» ¸®ÅÏÇÑ´Ù. virtual int GetNextToken( cTokenW* ptoken ); /// ´ÙÀ½ ÅäÅ« ¹®ÀÚ¿­ ¸®ÅÏ /// ¿¹¾à¾î °Ë»ç´Â »ý·«ÇÏ°í ¹Ù·Î ¹®ÀÚ¿­¸¸ ¸®ÅÏÇÑ´Ù. virtual int GetNextString( cTokenW* ptoken ); /// Ű¿öµåÀÇ ÅäÅ« ŸÀÔÀ» ¸®ÅÏ /// Ű¿öµå°¡ ¾Æ´Ï¸é TOKEN_VAR¸¦ ¸®ÅÏÇÑ´Ù. virtual int GetTokenType( const cStringW& keyword ); /// Á¾·á ¿©ºÎ¸¦ ¸®ÅÏ virtual bool IsEnd(); protected: /// ÇÑ ±ÛÀÚ¸¦ ¸®ÅÏÇÏ°í ´ÙÀ½ À§Ä¡·Î À̵¿ wchar_t GetNextChar(); /// ÇÑ ±ÛÀÚ¸¦ ¹°¸² void UngetNextChar(); /// Ű¿öµå¿¡ ÅäÅ« ŸÀÔÀ» ¿¬°á void BindKeyword( const cStringW& keyword, int tokenType ); protected: /// ¹öÆÛ Æ÷ÀÎÅÍ const wchar_t* mpBuffer; /// ¹öÆÛ ±æÀÌ unsigned int mBufferLen; /// ¹®ÀÚ¸¦ ÀÐÀ» À§Ä¡ unsigned int mPos; /// ÁÙ ¹øÈ£ int mLine; /// Ű¿öµå ¸Ê typedef tHashMap cKeywordMap; cKeywordMap mKeywordMap; };