00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _RM_UTILITIES_GLSLPARSER_H_
00014 #define _RM_UTILITIES_GLSLPARSER_H_
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 class RMUTIL_API IRmUtilGLSLParser
00026 {
00027 public :
00028
00029
00030
00031 enum TokenID
00032 {
00033
00034 TOKEN_END,
00035
00036
00037 TOKEN_NUM_INTEGER,
00038 TOKEN_NUM_FLOAT,
00039
00040
00041 TOKEN_IDENTIFIER,
00042
00043
00044 TOKEN_STRING,
00045
00046
00047 TOKEN_OP_SEMICOLON,
00048 TOKEN_OP_COMMA,
00049 TOKEN_OP_BACKSLASH,
00050 TOKEN_OP_SMALLER,
00051 TOKEN_OP_GREATER,
00052 TOKEN_OP_QUESTION,
00053
00054 TOKEN_OP_MUL,
00055 TOKEN_OP_DIV,
00056 TOKEN_OP_EQUAL,
00057 TOKEN_OP_PLUS,
00058 TOKEN_OP_MINUS,
00059 TOKEN_OP_MULEQUAL,
00060 TOKEN_OP_PLUSEQUAL,
00061 TOKEN_OP_MINUSEQUAL,
00062 TOKEN_OP_DIVEQUAL,
00063
00064 TOKEN_OP_BRACKET_OPEN,
00065 TOKEN_OP_BRACKET_CLOSE,
00066 TOKEN_OP_SQBRACKET_OPEN,
00067 TOKEN_OP_SQBRACKET_CLOSE,
00068 TOKEN_OP_CURLYBRACKET_OPEN,
00069 TOKEN_OP_CURLYBRACKET_CLOSE,
00070
00071 TOKEN_OP_QUATATION,
00072 TOKEN_OP_COLON,
00073
00074 TOKEN_OP_AND,
00075 TOKEN_OP_ANDAND,
00076
00077 TOKEN_OP_SHIFTLEFT,
00078 TOKEN_OP_SHIFTLEFTEQUAL,
00079 TOKEN_OP_SHIFTRIGHT,
00080 TOKEN_OP_SHIFTRIGHTEQUAL,
00081
00082 TOKEN_OP_PERIOD,
00083
00084
00085 TOKEN_KW_IF,
00086 TOKEN_KW_ELSEIF,
00087 TOKEN_KW_ELSE,
00088 TOKEN_KW_FOR,
00089 TOKEN_KW_WHILE,
00090 TOKEN_KW_VS,
00091 TOKEN_KW_PS,
00092 TOKEN_KW_RETURN,
00093 TOKEN_KW_STRUCT,
00094
00095
00096 TOKEN_DT_VOID,
00097 TOKEN_DT_BOOL,
00098 TOKEN_DT_BOOL2,
00099 TOKEN_DT_BOOL3,
00100 TOKEN_DT_BOOL4,
00101 TOKEN_DT_INT,
00102 TOKEN_DT_INT2,
00103 TOKEN_DT_INT3,
00104 TOKEN_DT_INT4,
00105 TOKEN_DT_FLOAT,
00106 TOKEN_DT_FLOAT2,
00107 TOKEN_DT_FLOAT3,
00108 TOKEN_DT_FLOAT4,
00109 TOKEN_DT_MAT2x2,
00110 TOKEN_DT_MAT3x3,
00111 TOKEN_DT_MAT4x4,
00112 };
00113
00114
00115
00116
00117 interface IFunction;
00118 interface IStructType;
00119
00120
00121
00122
00123 interface RMUTIL_API IDataType
00124 {
00125
00126 virtual const RmStringT& GetTypeName() const = 0;
00127
00128
00129 virtual TokenID GetTypeID() const = 0;
00130 };
00131
00132
00133
00134
00135 interface RMUTIL_API IVariable
00136 {
00137
00138
00139 virtual int GetLocation() const = 0;
00140
00141
00142 virtual const IDataType* GetDataType() const = 0;
00143
00144
00145 virtual const RmStringT& GetName() const = 0;
00146
00147
00148 virtual IFunction* GetParentFunction() = 0;
00149 virtual const IFunction* GetParentFunction() const = 0;
00150
00151 virtual IStructType* GetParentStruct() = 0;
00152 virtual const IStructType* GetParentStruct() const = 0;
00153
00154
00155 virtual const RmStringT& GetSemantec() const = 0;
00156 };
00157
00158
00159
00160
00161 interface RMUTIL_API IStructType : public IDataType
00162 {
00163
00164 virtual int GetNumMembers() const = 0;
00165
00166
00167 virtual IVariable* GetMember( int index ) = 0;
00168 virtual const IVariable* GetMember( int index ) const = 0;
00169
00170 virtual IVariable* FindMember( const RM_TCHAR *szName ) = 0;
00171 virtual const IVariable* FindMember( const RM_TCHAR *szName ) const = 0;
00172
00173
00174 virtual int GetLocation() const = 0;
00175 };
00176
00177
00178
00179
00180 interface RMUTIL_API IFunction
00181 {
00182
00183
00184 virtual int GetLocation() const = 0;
00185 virtual int GetEndLocation() const = 0;
00186
00187
00188 virtual const RmStringT& GetName() const = 0;
00189
00190
00191 virtual const IDataType* GetReturnType() const = 0;
00192
00193
00194 virtual const RmStringT& GetSemantec() const = 0;
00195
00196
00197 virtual int GetNumParameters() const = 0;
00198 virtual IVariable* GetParameter( int index ) = 0;
00199 virtual const IVariable* GetParameter( int index ) const = 0;
00200
00201 virtual IVariable* FindParameter( const RM_TCHAR *szName ) = 0;
00202 virtual const IVariable* FindParameter( const RM_TCHAR *szName ) const = 0;
00203
00204
00205 virtual int GetNumVariables() const = 0;
00206 virtual IVariable* GetVariable( int index ) = 0;
00207 virtual const IVariable* GetVariable( int index ) const = 0;
00208
00209 virtual IVariable* FindVariable( const RM_TCHAR *szName ) = 0;
00210 virtual const IVariable* FindVariable( const RM_TCHAR *szName ) const = 0;
00211 };
00212
00213
00214
00215
00216 interface RMUTIL_API IToken
00217 {
00218 virtual TokenID GetTokenType() const = 0;
00219
00220 virtual const RmStringT& GetString() const = 0;
00221
00222 virtual int GetInteger() const = 0;
00223 virtual double GetFloat() const = 0;
00224
00225 virtual int GetLocation() const = 0;
00226 virtual int GetTokenPos() const = 0;
00227
00228 virtual bool IsOperator() const = 0;
00229 virtual bool IsKeyword() const = 0;
00230 virtual bool IsIdentifier() const = 0;
00231 virtual bool IsString() const = 0;
00232 virtual bool IsEndToken() const = 0;
00233
00234 virtual bool IsNumber() const = 0;
00235 virtual bool IsInteger() const = 0;
00236 virtual bool IsFloat() const = 0;
00237
00238 virtual bool IsDataType() const = 0;
00239 };
00240
00241 public :
00242
00243
00244
00245 static IRmUtilGLSLParser* CreateGLSLParser();
00246 static void DestroyGLSLParser( IRmUtilGLSLParser* &pParser );
00247
00248
00249
00250
00251 virtual void Parse( const RM_TCHAR *pCode ) = 0;
00252
00253
00254
00255
00256 virtual int GetNumDataTypes() const = 0;
00257 virtual IDataType* GetDataType( int index ) = 0;
00258 virtual const IDataType* GetDataType( int index ) const = 0;
00259
00260 virtual IDataType* FindDataType( const RM_TCHAR *szName ) = 0;
00261 virtual const IDataType* FindDataType( const RM_TCHAR *szName ) const = 0;
00262
00263
00264
00265
00266 virtual int GetNumVariables() const = 0;
00267 virtual IVariable* GetVariable( int index ) = 0;
00268 virtual const IVariable* GetVariable( int index ) const = 0;
00269
00270 virtual IVariable* FindVariable( const RM_TCHAR *szName ) = 0;
00271 virtual const IVariable* FindVariable( const RM_TCHAR *szName ) const = 0;
00272
00273
00274
00275
00276
00277
00278
00279 virtual IVariable* FindVariable( int textLocation, const RM_TCHAR *szName ) = 0;
00280 virtual const IVariable* FindVariable( int textLocation, const RM_TCHAR *szName ) const = 0;
00281
00282
00283
00284
00285 virtual int GetNumFunctions() const = 0;
00286 virtual IFunction* GetFunction( int index ) = 0;
00287 virtual const IFunction* GetFunction( int index ) const = 0;
00288
00289 virtual IFunction* FindFunction( const RM_TCHAR *szName ) = 0;
00290 virtual const IFunction* FindFunction( const RM_TCHAR *szName ) const = 0;
00291
00292
00293 virtual IFunction* IsInsideFunction( int offset ) = 0;
00294 virtual const IFunction* IsInsideFunction( int offset ) const = 0;
00295
00296
00297
00298
00299 virtual void OutputParserResult() = 0;
00300 };
00301
00302
00303 #endif