/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2006.09.21 * * ³» ¿ë : ÆÄ¼­ * Ãß°¡³»¿ë : * ÀÛ¾÷ÀÏ ÀÛ¾÷ÀÚ ÀÛ¾÷³»¿ë * * ÁÖÀÇ»çÇ× : ÅØ½ºÆ® ÆÄÀÏÀ» ÆÄ½ÌÇϱâ À§ÇØ ·º¼­¸¦ ÇÊ¿ä·Î ÇÑ´Ù. *===========================================================================*/ #pragma once #include "Token.h" class cLexer; class cLexerW; /// ÆÄ¼­ /// ÅØ½ºÆ® ÆÄÀÏÀ» ÆÄ½ÌÇϱâ À§ÇØ ·º¼­¸¦ ÇÊ¿ä·Î ÇÑ´Ù. class cParser { public: cParser(); cParser( cLexer* lexer, const cString& fileName ); virtual ~cParser(); /// ·º¼­ ¼³Á¤ void SetLexer( cLexer* lexer ); /// ÆÄÀÏ À̸§ ¼³Á¤ void SetFileName( const cString& fileName ); /// ¿¹»óÇÑ ÅäÅ«ÀÌ ¸Â´Â Áö¸¦ ¸®ÅÏ bool ExpectTokenString( const char* str ); bool ExpectTokenType( int type ); /// ¹®ÀÚ¿­ ÆÄ½Ì cString ParseString(); bool ParseString( cString* str ); /// Á¤¼ö ÆÄ½Ì int ParseInt(); bool ParseInt( int* out ); /// ½Ç¼ö ÆÄ½Ì float ParseFloat(); bool ParseFloat( float* out ); /// ·º¼­¸¦ ¸®ÅÏ cLexer* GetLexer() const; /// ÆÄÀÏ À̸§À» ¸®ÅÏ: ¿õÁÖ const char* GetFileName() const; /// ÁÙ ¹øÈ£¸¦ ¸®ÅÏ int GetLineNum() const; protected: /// ·º¼­ cLexer* mpLexer; /// ÆÄ½ÌÁßÀÎ ÆÄÀÏ À̸§ cString mFileName; /// ÅäÅ« cToken mToken; }; inline void cParser::SetLexer( cLexer* lexer ) { mpLexer = lexer; } inline void cParser::SetFileName( const cString& fileName ) { mFileName = fileName; } inline cLexer* cParser::GetLexer() const { return mpLexer; } inline int cParser::GetLineNum() const { return mToken.mLine; } inline const char* cParser::GetFileName() const { return mFileName.Cstr(); } //--------------------------------------------------------------- class cParserW { public: cParserW(); cParserW( cLexerW* lexer, const cStringW& fileName ); virtual ~cParserW(); /// ·º¼­ ¼³Á¤ void SetLexer( cLexerW* lexer ); /// ÆÄÀÏ À̸§ ¼³Á¤ void SetFileName( const cStringW& fileName ); /// ¿¹»óÇÑ ÅäÅ«ÀÌ ¸Â´Â Áö¸¦ ¸®ÅÏ bool ExpectTokenString( const wchar_t* str ); bool ExpectTokenType( int type ); /// ¹®ÀÚ¿­ ÆÄ½Ì cStringW ParseString(); bool ParseString( cStringW* str ); /// Á¤¼ö ÆÄ½Ì int ParseInt(); bool ParseInt( int* out ); /// ½Ç¼ö ÆÄ½Ì float ParseFloat(); bool ParseFloat( float* out ); /// ·º¼­¸¦ ¸®ÅÏ cLexerW* GetLexer() const; /// ÆÄÀÏ À̸§À» ¸®ÅÏ: ¿õÁÖ const wchar_t* GetFileName() const; /// ÁÙ ¹øÈ£¸¦ ¸®ÅÏ int GetLineNum() const; protected: /// ·º¼­ cLexerW* mpLexer; /// ÆÄ½ÌÁßÀÎ ÆÄÀÏ À̸§ cStringW mFileName; /// ÅäÅ« cTokenW mToken; }; inline void cParserW::SetLexer( cLexerW* lexer ) { mpLexer = lexer; } inline void cParserW::SetFileName( const cStringW& fileName ) { mFileName = fileName; } inline cLexerW* cParserW::GetLexer() const { return mpLexer; } inline int cParserW::GetLineNum() const { return mToken.mLine; } inline const wchar_t* cParserW::GetFileName() const { return mFileName.Cstr(); }