#include "stdafx.h" using namespace ActiveBasic::Compiler; bool LexicalAnalyzer::CollectNamespaces( const char *source, NamespaceScopesCollection &namespaceScopesCollection ) { int i, i2; char temporary[1024]; bool isSuccessful = true; // 名前空間管理 NamespaceScopes namespaceScopes; for(i=0;;i++){ if(source[i]=='\0') break; if( source[i] == 1 && source[i+1] == ESC_NAMESPACE ){ for(i+=2,i2=0;;i2++,i++){ if( IsCommandDelimitation( source[i] ) ){ temporary[i2]=0; break; } temporary[i2]=source[i]; } namespaceScopes.push_back( temporary ); if( !namespaceScopesCollection.IsExist( namespaceScopes ) ){ namespaceScopesCollection.push_back( namespaceScopes ); } continue; } else if( source[i] == 1 && source[i+1] == ESC_ENDNAMESPACE ){ if( namespaceScopes.size() <= 0 ){ compiler.errorMessenger.Output( 12, "End Namespace", i ); isSuccessful = false; } else{ namespaceScopes.pop_back(); } i += 2; continue; } } if( namespaceScopes.size() > 0 ){ compiler.errorMessenger.Output( 63, NULL, cp ); isSuccessful = false; } return isSuccessful; } Symbol LexicalAnalyzer::FullNameToSymbol( const char *fullName ) { char areaName[VN_SIZE] = ""; //オブジェクト変数 char nestName[VN_SIZE] = ""; //入れ子メンバ bool isNest = SplitMemberName( fullName, areaName, nestName ); return Symbol( NamespaceScopes( areaName ), nestName ); } Symbol LexicalAnalyzer::FullNameToSymbol( const std::string &fullName ) { return FullNameToSymbol( fullName.c_str() ); }