"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSGraphicsLib/Src/ShaderLanguage/LSGShaderLanguageParser.h

00001 
00017 #ifndef __LSG_SHADERLANGUAGEPARSER_H__
00018 #define __LSG_SHADERLANGUAGEPARSER_H__
00019 
00020 #include "../LSGGraphicsLib.h"
00021 #include "Algorithm/LSTLAlgorithm.h"
00022 #include "LSGShaderScopeStack.h"
00023 #include "LSGShaderSyntaxNodes.h"
00024 #include "String/LSTLString.h"
00025 #include "Vector/LSTLVector.h"
00026 
00027 namespace lsg {
00028 
00029         class CShaderLexer;
00030 
00038         class CShaderLanguageParser {
00039         public :
00040                 // == Enumerations.
00044                 enum LSG_SHADER_TYPES {
00045                         LSG_ST_INVALID                                                  = -1,
00046                         LSG_ST_VERTEX,
00047                         LSG_ST_PIXEL,
00048 
00049                         LSG_ST_TOTAL,                                                   // Shader types must be from 0 to X, as the enumerated values are
00050                                                                                                         //      used as indices in some places.
00051                 };
00052 
00056                 enum LSG_STRUCT_BASE {
00057                         LSG_SB_START                                                    = 10000
00058                 };
00059 
00060 
00061                 // == Various constructors.
00062                 LSE_CALLCTOR                                                            CShaderLanguageParser( LSG_SHADER_TYPES _stType, CShaderLexer * _plLexer );
00063                 
00064                 
00065                 // == Types.
00069                 typedef struct LSG_IDENTIFIER {
00070                         // == Enumerations.
00071                         enum LSG_IDENTIFIER_TYPE {
00072                                 LSG_IT_UNDEFINED,
00073                                 LSG_IT_INTEGRAL,
00074                                 LSG_IT_FLOATING,
00075                                 LSG_IT_VECTOR,
00076                                 LSG_IT_MATRIX,
00077                                 LSG_IT_STRING,
00078                         };
00079 
00080                         
00081                         // == Members.
00085                         LSUINT32                                                                ui32Name;
00086 
00090                         LSUINT8                                                                 ui8Type;
00091                 } * LPLSG_IDENTIFIER, * const LPCLSG_IDENTIFIER;
00092 
00096                 typedef union LSG_SCALAR {
00100                         LSUINT64                                                                ui64Value;
00101 
00105                         LSINT64                                                                 i64Value;
00106 
00110                         LSDOUBLE                                                                dValue;
00111                 } * LPLSG_SCALAR, * const LPCLSG_SCALAR;
00112 
00116                 typedef struct LSG_STRUCT_MEMBER {
00120                         CString                                                                 sName;
00121 
00125                         LSUINT64                                                                ui64Type;
00126 
00130                         LSUINT32                                                                ui32Array;
00131 
00132 
00133                         // == Operators.
00140                         LSG_STRUCT_MEMBER & LSE_CALL                    operator = ( const LSG_STRUCT_MEMBER &_smSource );
00141                 } * LPLSG_STRUCT_MEMBER, * const LPCLSG_STRUCT_MEMBER;
00142 
00146                 typedef struct LSG_STRUCT {
00150                         CString                                                                 sName;
00151 
00155                         CVector<LSG_STRUCT_MEMBER>                              vMembers;
00156 
00157 
00158                         // == Operators.
00165                         LSG_STRUCT & LSE_CALL                                   operator = ( const LSG_STRUCT &_sSource );
00166 
00173                         LSBOOL LSE_CALL                                                 operator < ( const LSG_STRUCT &_sSource );
00174                 } * LPLSG_STRUCT, * const LPCLSG_STRUCT;
00175 
00179                 typedef CMap<CString, LSG_STRUCT>                       LSG_STRUCT_ARRAY, * LPLSG_STRUCT_ARRAY, * const LPCLSG_STRUCT_ARRAY;
00180 
00184                 typedef struct LSG_STRUCT_DECLARATOR {
00188                         LSUINT32                                                                ui32Name;
00189 
00193                         LSUINT32                                                                ui32Array;
00194                 } * LPLSG_STRUCT_DECLARATOR, * const LPCLSG_STRUCT_DECLARATOR;
00195 
00199                 typedef struct LSG_ENGINE_MACRO {
00203                         const LSCHAR *                                                  pcName;
00204 
00208                         LSUINT32                                                                ui32Value;
00209                 } * LPLSG_ENGINE_MACRO, * const LPCLSG_ENGINE_MACRO;
00210 
00211 
00212                 // == Functions.
00218                 LSG_SHADER_TYPES LSE_CALL                                       GetShaderType() const;
00219 
00229                 LSUINT32 LSE_CALL                                                       CreateString( const LSCHAR * _pcText, LSBOOL _bHasQuotes = true );
00230 
00239                 LSBOOL LSE_CALL                                                         CreateDecimal( const LSCHAR * _pcText, YYSTYPE::LSG_NODE_DATA &_ndNode );
00240 
00249                 LSBOOL LSE_CALL                                                         CreateFloatingPoint( const LSCHAR * _pcText, YYSTYPE::LSG_NODE_DATA &_ndNode );
00250 
00258                 LSBOOL LSE_CALL                                                         CreateBool( LSBOOL _bValue, YYSTYPE::LSG_NODE_DATA &_ndNode );
00259 
00267                 LSBOOL LSE_CALL                                                         CreateIdentifier( const LSCHAR * _pcText, YYSTYPE::LSG_NODE_DATA &_ndNode );
00268 
00277                 LSBOOL LSE_CALL                                                         CreateArrayAccess( const YYSTYPE::LSG_NODE_DATA &_ndBase,
00278                         const YYSTYPE::LSG_NODE_DATA &_ndIndex, YYSTYPE::LSG_NODE_DATA &_ndNode );
00279 
00288                 LSBOOL LSE_CALL                                                         CreatePostfixOrPrefixIncOrDec( const YYSTYPE::LSG_NODE_DATA &_ndOp,
00289                         LSG_NODE _nType, YYSTYPE::LSG_NODE_DATA &_ndNode );
00290 
00299                 LSBOOL LSE_CALL                                                         CreateUnaryOp( LSUINT32 _ui32Op, const YYSTYPE::LSG_NODE_DATA &_ndBase,
00300                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00301 
00310                 LSBOOL LSE_CALL                                                         CreateCast( LSUINT64 _ui64Type, const YYSTYPE::LSG_NODE_DATA &_ndBase,
00311                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00312 
00323                 LSBOOL LSE_CALL                                                         CreateMath( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00324                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00325                         LSUINT32 _ui32Op, YYSTYPE::LSG_NODE_DATA &_ndNode );
00326 
00336                 LSBOOL LSE_CALL                                                         CreateTertiary( const YYSTYPE::LSG_NODE_DATA &_ndCond,
00337                         const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00338                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00339                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00340 
00350                 LSBOOL LSE_CALL                                                         CreateAssignment( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00351                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00352                         LSUINT32 _ui32Op,
00353                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00354 
00363                 LSBOOL LSE_CALL                                                         CreateComma( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00364                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00365                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00366 
00375                 LSBOOL LSE_CALL                                                         CreateIntrinsic( LSUINT32 _ui32Intrinsic,
00376                         const YYSTYPE::LSG_NODE_DATA &_ndExp,
00377                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00378 
00387                 LSBOOL LSE_CALL                                                         CreateArgExpList( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00388                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00389                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00390 
00399                 LSBOOL LSE_CALL                                                         CreateFunctionCall( const YYSTYPE::LSG_NODE_DATA &_ndFunction,
00400                         LSUINT32 _ui32ArgList,
00401                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00402 
00411                 LSBOOL LSE_CALL                                                         CreateFieldSelect( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00412                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00413                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00414 
00423                 LSBOOL LSE_CALL                                                         CreateConstructor( LSUINT64 _ui64Type,
00424                         LSUINT32 _ui32Args,
00425                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00426 
00434                 LSBOOL LSE_CALL                                                         CreateExpressionStatement( LSUINT32 _ui32Index,
00435                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00436 
00444                 LSBOOL LSE_CALL                                                         CreateDeclarationStatement( const YYSTYPE::LSG_NODE_DATA &_ndDecl,
00445                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00446 
00455                 LSBOOL LSE_CALL                                                         CreateSemantic( const LSCHAR * _pcText,
00456                         LSUINT32 _ui32Type,
00457                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00458 
00467                 LSBOOL LSE_CALL                                                         CreateTypeSpecifier( LSUINT64 _ui64Qualifiers,
00468                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00469 
00478                 LSBOOL LSE_CALL                                                         CreateFullySpecifiedType( LSUINT64 _ui64Qualifiers,
00479                         const YYSTYPE::LSG_NODE_DATA &_ndSpec,
00480                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00481 
00493                 LSBOOL LSE_CALL                                                         CreateSingleDeclaration( LSUINT32 _ui32Name,
00494                         const YYSTYPE::LSG_NODE_DATA &_ndTypeNode,
00495                         LSUINT32 _ui32ConstNodeIndex,
00496                         LSUINT32 _ui32SemanticNodeIndex,
00497                         LSUINT32 _ui32InitializerNodeIndex,
00498                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00499 
00508                 LSBOOL LSE_CALL                                                         CreateInitializerList( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00509                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00510                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00511 
00519                 LSBOOL LSE_CALL                                                         CreateInitializerListWrap( const YYSTYPE::LSG_NODE_DATA &_ndList,
00520                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00521 
00530                 LSBOOL LSE_CALL                                                         CreateStatementList( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00531                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00532                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00533 
00541                 LSBOOL LSE_CALL                                                         CreateNewScopedStatement( const YYSTYPE::LSG_NODE_DATA &_ndStatement,
00542                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00543 
00550                 LSBOOL LSE_CALL                                                         CreateBlankStatement( YYSTYPE::LSG_NODE_DATA &_ndNode );
00551 
00561                 LSBOOL LSE_CALL                                                         CreateStructDeclarator( const YYSTYPE::LSG_NODE_DATA &_ndName,
00562                         LSUINT32 _ui32ArrayNodeIndex,
00563                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00564 
00573                 LSBOOL LSE_CALL                                                         CreateStructDeclaratorList( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00574                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00575                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00576 
00586                 LSBOOL LSE_CALL                                                         CreateStructDeclaration( LSUINT64 _ui64Qualifiers, 
00587                         const YYSTYPE::LSG_NODE_DATA &_ndType,
00588                         const YYSTYPE::LSG_NODE_DATA &_ndDecl,
00589                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00590 
00599                 LSBOOL LSE_CALL                                                         CreateStructDeclarationList( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00600                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00601                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00602 
00612                 LSBOOL LSE_CALL                                                         CreateStruct( LSUINT32 _ui32IdentifierIndex,
00613                         const YYSTYPE::LSG_NODE_DATA &_ndDecl,
00614                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00615 
00626                 LSBOOL LSE_CALL                                                         CreateParameterDeclarator( const YYSTYPE::LSG_NODE_DATA &_ndType,
00627                         const YYSTYPE::LSG_NODE_DATA &_ndName,
00628                         LSUINT32 _ui32ArrayNodeIndex,
00629                         LSUINT32 _ui32SemanticNodeIndex,
00630                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00631 
00640                 LSBOOL LSE_CALL                                                         CreateParameterDeclaration( LSUINT64 _ui64TypeInfo,
00641                         const YYSTYPE::LSG_NODE_DATA &_ndDecl,
00642                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00643 
00652                 LSBOOL LSE_CALL                                                         CreateParameterDeclarationList( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00653                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00654                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00655 
00665                 LSBOOL LSE_CALL                                                         CreateFunctionDeclaration( const YYSTYPE::LSG_NODE_DATA &_ndType,
00666                         const YYSTYPE::LSG_NODE_DATA &_ndName,
00667                         LSUINT32 _ui32Parms,
00668                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00669 
00678                 LSBOOL LSE_CALL                                                         CreateFunctionDefinition( const YYSTYPE::LSG_NODE_DATA &_ndHeader,
00679                         const YYSTYPE::LSG_NODE_DATA &_ndBody,
00680                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00681 
00691                 LSBOOL LSE_CALL                                                         CreateSelectionStatement( const YYSTYPE::LSG_NODE_DATA &_ndExp,
00692                         const YYSTYPE::LSG_NODE_DATA &_ndBody,
00693                         LSUINT32 _ui32ElseBody,
00694                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00695 
00703                 LSBOOL LSE_CALL                                                         CreateForInitDeclStatement( const YYSTYPE::LSG_NODE_DATA &_ndExp,
00704                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00705 
00714                 LSBOOL LSE_CALL                                                         CreateWhileLoop( const YYSTYPE::LSG_NODE_DATA &_ndExp,
00715                         const YYSTYPE::LSG_NODE_DATA &_ndBody,
00716                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00717 
00726                 LSBOOL LSE_CALL                                                         CreateDoWhileLoop( const YYSTYPE::LSG_NODE_DATA &_ndExp,
00727                         const YYSTYPE::LSG_NODE_DATA &_ndBody,
00728                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00729 
00740                 LSBOOL LSE_CALL                                                         CreateForLoop( const YYSTYPE::LSG_NODE_DATA &_ndInitExp,
00741                         const YYSTYPE::LSG_NODE_DATA &_ndExp,
00742                         LSUINT32 _ui32ItIndex,
00743                         const YYSTYPE::LSG_NODE_DATA &_ndBody,
00744                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00745 
00754                 LSBOOL LSE_CALL                                                         CreateJump( LSG_NODE _nType, LSUINT32 _ui32NodeIndex,
00755                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00756 
00765                 LSBOOL LSE_CALL                                                         CreateExternalDeclarationList( const YYSTYPE::LSG_NODE_DATA &_ndLeft,
00766                         const YYSTYPE::LSG_NODE_DATA &_ndRight,
00767                         YYSTYPE::LSG_NODE_DATA &_ndNode );
00768 
00775                 LSUINT32 LSE_CALL                                                       FindIdentifier( const LSCHAR * _pcName ) const;
00776 
00783                 LSBOOL LSE_CALL                                                         IsToken( const LSCHAR * _pcText ) const;
00784 
00791                 const LSG_SHADER_SYNTAX_NODES::LSG_NODE_DATA & LSE_CALL
00792                                                                                                         GetNode( LSUINT32 _ui32Index ) const;
00793 
00799                 LSUINT32 LSE_CALL                                                       TotalNodes() const;
00800 
00806                 LSUINT32 LSE_CALL                                                       TotalIdentifiers() const;
00807 
00814                 const LSG_IDENTIFIER & LSE_CALL                         GetIdentifier( LSUINT32 _ui32Index ) const;
00815 
00821                 LSUINT32 LSE_CALL                                                       TotalStrings() const;
00822 
00829                 const CString & LSE_CALL                                        GetString( LSUINT32 _ui32Index ) const;
00830 
00838                 LSG_NUM_CONSTANTS LSE_CALL                                      GetNodeValue( const YYSTYPE::LSG_NODE_DATA &_ndNode, LSG_SCALAR &_sValue ) const;
00839 
00846                 LSBOOL LSE_CALL                                                         IsInteger( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00847 
00859                 LSUINT32 LSE_CALL                                                       CountArgs( LSUINT32 _ui32ArgListIndex, LSUINT32 _ui32MaxArgs, LSUINT32 * _pui32Nodes ) const;
00860 
00869                 LSUINT32 LSE_CALL                                                       CountParms( LSUINT32 _ui32ArgListIndex, CVectorPoD<LSUINT32, LSUINT32> * _pvRet = NULL );
00870 
00878                 LSUINT32 LSE_CALL                                                       CountStructMembers( LSUINT32 _ui32MemberListIndex, CVectorPoD<LSUINT32, LSUINT32> * _pvRet = NULL );
00879 
00887                 LSBOOL LSE_CALL                                                         GetStructDeclarators( LSUINT32 _ui32Index, CVectorPoD<LSG_STRUCT_DECLARATOR> &_vRet ) const;
00888 
00895                 LSUINT64 LSE_CALL                                                       GetTypeQualifier( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00896 
00903                 LSUINT64 LSE_CALL                                                       GetType( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00904 
00911                 const CString & LSE_CALL                                        GetName( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00912 
00919                 LSUINT32 LSE_CALL                                                       GetNameIndex( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00920 
00928                 LSUINT64 LSE_CALL                                                       GetSemantic( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00929 
00936                 LSUINT64 LSE_CALL                                                       GetTypeQualifiersOnParm( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00937 
00944                 LSUINT64 LSE_CALL                                                       GetTypeOnParm( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00945 
00952                 const CString & LSE_CALL                                        GetNameOfParm( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00953 
00960                 LSUINT32 LSE_CALL                                                       GetNameIndexOfParm( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00961 
00968                 LSUINT32 LSE_CALL                                                       GetArrayIndexOfParm( const YYSTYPE::LSG_NODE_DATA &_ndNode ) const;
00969 
00976                 LSBOOL LSE_CALL                                                         RegisterStructType( const LSCHAR * _pcText );
00977 
00984                 LSUINT32 LSE_CALL                                                       GetStructTypeId( const LSCHAR * _pcText ) const;
00985 
00992                 CString LSE_CALL                                                        GetStructById( LSUINT32 _ui32Id ) const;
00993 
01001                 LSUINT32 LSE_CALL                                                       GetSize( LSUINT64 _ui64Type ) const;
01002 
01003 
01010                 static LSBOOL LSE_CALL                                          IsInteger( LSUINT64 _ui64Type );
01011 
01019                 static LSUINT32 LSE_CALL                                        GetArrayUnit( LSUINT64 _ui64Type, LSUINT32 _ui32Unit );
01020 
01027                 static LSUINT32 LSE_CALL                                        GetType( LSUINT64 _ui64Type );
01028 
01037                 static LSUINT64 LSE_CALL                                        CombineTypesAndArrays( LSUINT64 _ui64Type, LSUINT32 _ui32Array0, LSUINT32 _ui32Array1 );
01038 
01045                 static LSG_NUM_CONSTANTS LSE_CALL                       TypeToConstantType( LSUINT64 _ui64Type );
01046 
01053                 static LSUINT64 LSE_CALL                                        ConstantTypeToType( LSG_NUM_CONSTANTS _ncType );
01054 
01061                 static CString LSE_CALL                                         BasicTypeToString( LSUINT64 _ui64Type );
01062 
01072                 static LSG_SCALAR LSE_CALL                                      CastScalar( const LSG_SCALAR &_sScalar, LSUINT64 _ui64OriginalType, LSUINT64 _ui64NewType, LSBOOL &_bRes );
01073 
01081                 static LSG_NUM_CONSTANTS LSE_CALL                       GetHighType( LSG_NUM_CONSTANTS _ncLeft, LSG_NUM_CONSTANTS _ncRight );
01082 
01090                 static LSBOOL LSE_CALL                                          IsEitherMatrix( LSUINT64 _ui64Left, LSUINT64 _ui64Right );
01091 
01099                 static LSBOOL LSE_CALL                                          BothAreMatrices( LSUINT64 _ui64Left, LSUINT64 _ui64Right );
01100 
01108                 static LSBOOL LSE_CALL                                          IsEitherVector( LSUINT64 _ui64Left, LSUINT64 _ui64Right );
01109 
01117                 static LSBOOL LSE_CALL                                          BothAreVectors( LSUINT64 _ui64Left, LSUINT64 _ui64Right );
01118 
01126                 static LSBOOL LSE_CALL                                          IsEitherScalar( LSUINT64 _ui64Left, LSUINT64 _ui64Right );
01127 
01135                 static LSBOOL LSE_CALL                                          BothAreScalars( LSUINT64 _ui64Left, LSUINT64 _ui64Right );
01136 
01144                 static LSBOOL LSE_CALL                                          IsEitherStruct( LSUINT64 _ui64Left, LSUINT64 _ui64Right );
01145 
01153                 static LSBOOL LSE_CALL                                          BothAreStructs( LSUINT64 _ui64Left, LSUINT64 _ui64Right );
01154 
01163                 static LSVOID LSE_CALL                                          GetMatrixSize( LSUINT64 _ui64Left, LSUINT64 _ui64Right,
01164                         LSUINT32 &_ui32Columns, LSUINT32 &_ui32Rows );
01165 
01173                 static LSVOID LSE_CALL                                          GetVectorSize( LSUINT64 _ui64Left, LSUINT64 _ui64Right,
01174                         LSUINT32 &_ui32Ret );
01175 
01176 
01177         protected :
01178                 // == Members.
01182                 CVector<CString, LSUINT32, 512UL>                       m_vStringPool;
01183 
01187                 CVectorPoD<LSG_SHADER_SYNTAX_NODES::LSG_NODE_DATA, LSUINT32, 512UL * 10UL>
01188                                                                                                         m_vNodes;
01189 
01193                 CVectorPoD<LSG_IDENTIFIER, LSUINT32, 512UL>     m_vIdentifiers;
01194 
01198                 CVectorPoD<LSUINT32, LSUINT32, 512UL>           m_vSortedTokens;
01199 
01204                 CShaderScopeStack                                                       m_sssScopes;
01205 
01209                 LSG_SHADER_TYPES                                                        m_stShaderType;
01210 
01215                 CMap<CString, LSUINT32>                                         m_mUserTypes;
01216 
01220                 LSUINT32                                                                        m_ui32TypeId;
01221 
01225                 LSG_STRUCT_ARRAY                                                        m_saStructures;
01226 
01230                 CShaderLexer *                                                          m_plLexer;
01231 
01232 
01233                 // == Functions.
01240                 LSBOOL LSE_CALL                                                         AddNode( LSG_SHADER_SYNTAX_NODES::LSG_NODE_DATA &_ndNode );
01241 
01249                 LSUINT32 LSE_CALL                                                       AddIdentifier( const LSCHAR * _pcText );
01250 
01258                 LSBOOL LSE_CALL                                                         FindToken( const LSCHAR * _pcName, LSUINT32 &_ui32Index ) const;
01259 
01260         private :
01261         };
01262 
01263 }       // namespace lsg
01264 
01265 #endif  // __LSG_SHADERLANGUAGEPARSER_H__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator