#include #pragma once class EnumInfo; class EnumInfoCollection; namespace ActiveBasic{ namespace Compiler{ class LexicalAnalyzer { public: // 名前空間を収集 static bool CollectNamespaces( const char *source, NamespaceScopesCollection &namespaceScopesCollection ); // フルネーム識別子をシンボルに変換する static Symbol FullNameToSymbol( const char *fullName ); static Symbol FullNameToSymbol( const std::string &fullName ); // 列挙型を収集 static void CollectEnumMembers( EnumInfo &enumInfo, const char *buffer, int nowLine ); static void CollectEnums( const char *source, EnumInfoCollection &enums ); static std::string GenerateEnumsSourceCode( const EnumInfoCollection &enums ); // クラスの名前情報を収集する static void CollectClassesForNameOnly( const char *source, Classes &classes ); // TypeDefを収集する static void AddTypeDef( TypeDefCollection &typeDefs, const NamespaceScopes &namespaceScopes, const boost::iterator_range &expression, int nowLine ); static void CollectTypeDefs( const char *source, TypeDefCollection &typeDefs ); // 定数を収集する static void AddConstEnum( Consts &consts, const NamespaceScopes &namespaceScopes, const char *buffer ); static void CollectConsts( const char *source, Consts &consts, ConstMacros &constMacros ); static bool ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, std::string& dest ); static bool ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, char *dest, std::size_t destSize ); template static bool ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, char (&dest)[N] ) { return ConstMacroToExpression(constMacro, parameterStr, dest, N); } // クラスを収集する static Member *CreateMember( const CClass &_class, Prototype::Accessibility accessibility, bool isConst, bool isRef, char *buffer, int nowLine ); static void AddMethod(CClass *pobj_c, UserProc *pUserProc, Prototype::Accessibility accessibility, BOOL bStatic, bool isConst, bool isAbstract, bool isVirtual, bool isOverride, bool isEnableOverrideCheck, const char *interfaceName, bool isAutoGeneration, int nowLine); static bool Inherits( CClass &_class, const char *inheritNames, int nowLine ); static void Implements( CClass &_class, Interface *pInterface ); static bool Implements( CClass &_class, const char *interfaceNames, int nowLine ); static void LookaheadClass( const std::string &className, Classes &classes ); static bool LoopRefCheck( const CClass &objClass ); static void CollectClasses( const char *source, Classes &classes ); // テンプレート展開 static Type LexicalAnalyzer::TemplateExpand_ResolveType( const Type &baseType, const Types &actualTypes ); static void TemplateExpand_ResolveMethod( const CMethod *pBaseMethod, const Types &actualTypes, CClass *pNewClass ); static const CClass *TemplateExpand( CClass &_class, const Types &actualTypes ); // グローバルプロシージャを収集する static bool ExtractParameterVarNames( const char *sourceOfParams, Jenga::Common::Strings ¶mVarNames, int nowLine ); static bool AnalyzeParameter( Parameters ¶ms, const Jenga::Common::Strings ¶meterStrings, int nowLine ); static bool SetParamsAndReturnTypeForUserProc( UserProc &userProc, const char *sourceOfParams, int nowLine, bool isStatic ); static bool SetParamsAndReturnType( Procedure *pProc, const char *sourceOfParams, bool isSupportEllipse, int nowLine ); static UserProc* ParseUserProc( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, char *buffer,int nowLine,bool isVirtual,CClass *pobj_c, bool isStatic, char *interfaceName = NULL ); static DllProc *ParseDllProc(const NamespaceScopes &namespaceScopes, char *buffer,int nowLine); static void CollectProcedures( const char *source, UserProcs &userProcs, DllProcs &dllProcs ); // デリゲートを収集する static void CollectDelegates( const char *source, Delegates &delegates ); static std::string GenerateDelegatesSourceCode( const Delegates &delegates ); static void RefleshDelegateParameterAndReturnType( Delegate &dg ); static void RefleshDelegatesParameterAndReturnType( Delegates &delegates ); }; }}