#include "stdafx.h" #include ".\scriptparser.h" CScriptParser::CScriptParser(void) { m_pFileUDT = NULL; m_fTokenNumber = 0.0f; memset( m_szTokenString, 0, TOKEN_STRING_SIZE ); m_CurrentToken = UDT_ERROR; } CScriptParser::~CScriptParser(void) { CloseFile(); } bool CScriptParser::SetFile( const char* pszFileName ) { if( (pszFileName == NULL) || (strcmp( pszFileName, "") == 0) ) return false; if(( m_pFileUDT = fopen( pszFileName, "r" ) ) == NULL ) return false; return true; } bool CScriptParser::CloseFile() { if( m_pFileUDT ) fclose( m_pFileUDT ); return true; } //ÇöÀç ÀÐ¾î µå¸° ÆÄÀÏÀÇ ÇѰ³ÀÇ ¾à¼ÓµÈ ±âÈ£°¡ ³ª¿Ã¶§ÀÇ °ª Àü´Þ UDTToken CScriptParser::GetToken() { if( !m_pFileUDT ) return UDT_ERROR; char ch; m_szTokenString[0] = '\0'; do { // ÇöÀç ÆÄÀÏÀÇ ³¡À̸é END ¸®ÅÏ if( (ch = (char)fgetc(m_pFileUDT) ) == EOF ) return END; // ¸¸ÀÏ // °ªÀ̸é '\n'ÀÌ ³ª¿Ã¶§ ±îÁö µ¹¾Æ¶ó. if( ch == '/' && ( ch = (char)fgetc(m_pFileUDT) ) == '/' ) { while( (ch = (char)fgetc(m_pFileUDT)) != '\n' ); } } while( isspace(ch) ); char* p, TempString[TOKEN_STRING_SIZE]; switch(ch) { case '#': p = m_szTokenString; while ( ((ch = getc(m_pFileUDT)) != EOF) && ( ch !='#' ) ) *p++ = ch; if( ch != '#' ) ungetc( ch, m_pFileUDT ); *p = 0; return m_CurrentToken = COMMAND; case ';': return m_CurrentToken = SEMICOLON; case ',': return m_CurrentToken = COMMA; case '{': return m_CurrentToken = LP; case '}': return m_CurrentToken = RP; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': case '-': ungetc( ch, m_pFileUDT ); p = TempString; while ( ( (ch = getc(m_pFileUDT) ) !=EOF) && (ch=='.' || isdigit(ch) || ch=='-') ) *p++ = ch; *p = 0; m_fTokenNumber = (float)atof(TempString); return m_CurrentToken = NUMBER; case '"': p = m_szTokenString; while( ((ch = getc(m_pFileUDT)) != EOF) && ( ch != '"' ) ) *p++ = ch; if( ch != '"' ) ungetc(ch, m_pFileUDT); *p = 0; return m_CurrentToken = NAME; default: if (isalpha(ch)) { p = m_szTokenString; *p++ = ch; while ( ( (ch = getc(m_pFileUDT) ) != EOF) && (ch=='.' || ch=='_' || isalnum(ch)) ) *p++ = ch; ungetc( ch, m_pFileUDT ); *p = 0; return m_CurrentToken = NAME; } return m_CurrentToken = UDT_ERROR; } } char* CScriptParser::GetTokenString() { if( m_CurrentToken != NAME && m_CurrentToken != NUMBER ) return NULL; return m_szTokenString; }