[PATCH 3/5] d3dcompiler: Flesh out the lexer more.

Matteo Bruni mbruni at codeweavers.com
Mon Jun 4 10:58:22 CDT 2012


---
 dlls/d3dcompiler_43/hlsl.l |  128 ++++++++++++++++++++++++++++++++++++++++++++
 dlls/d3dcompiler_43/hlsl.y |  102 +++++++++++++++++++++++++++++++++++
 2 files changed, 230 insertions(+), 0 deletions(-)

diff --git a/dlls/d3dcompiler_43/hlsl.l b/dlls/d3dcompiler_43/hlsl.l
index 439f384..0a18326 100644
--- a/dlls/d3dcompiler_43/hlsl.l
+++ b/dlls/d3dcompiler_43/hlsl.l
@@ -43,6 +43,7 @@ RESERVED4               typename|union|unsigned|using|virtual
 
 WS                      [ \t]
 NEWLINE                 (\n)|(\r\n)
+DOUBLESLASHCOMMENT      "//"[^\n]*
 STRING                  \"[^\"]*\"
 
 ANY                     (.)
@@ -65,6 +66,133 @@ ANY                     (.)
                             set_parse_status(&hlsl_ctx.status, PARSE_ERR);
                         }
 
+BlendState              {return KW_BLENDSTATE;          }
+break                   {return KW_BREAK;               }
+Buffer                  {return KW_BUFFER;              }
+cbuffer                 {return KW_CBUFFER;             }
+compile                 {return KW_COMPILE;             }
+const                   {return KW_CONST;               }
+continue                {return KW_CONTINUE;            }
+DepthStencilState       {return KW_DEPTHSTENCILSTATE;   }
+DepthStencilView        {return KW_DEPTHSTENCILVIEW;    }
+discard                 {return KW_DISCARD;             }
+do                      {return KW_DO;                  }
+double                  {return KW_DOUBLE;              }
+else                    {return KW_ELSE;                }
+extern                  {return KW_EXTERN;              }
+false                   {return KW_FALSE;               }
+for                     {return KW_FOR;                 }
+GeometryShader          {return KW_GEOMETRYSHADER;      }
+groupshared             {return KW_GROUPSHARED;         }
+if                      {return KW_IF;                  }
+in                      {return KW_IN;                  }
+inline                  {return KW_INLINE;              }
+inout                   {return KW_INOUT;               }
+matrix                  {return KW_MATRIX;              }
+namespace               {return KW_NAMESPACE;           }
+nointerpolation         {return KW_NOINTERPOLATION;     }
+out                     {return KW_OUT;                 }
+pass                    {return KW_PASS;                }
+PixelShader             {return KW_PIXELSHADER;         }
+precise                 {return KW_PRECISE;             }
+RasterizerState         {return KW_RASTERIZERSTATE;     }
+RenderTargetView        {return KW_RENDERTARGETVIEW;    }
+return                  {return KW_RETURN;              }
+register                {return KW_REGISTER;            }
+sampler                 {return KW_SAMPLER;             }
+sampler1D               {return KW_SAMPLER1D;           }
+sampler2D               {return KW_SAMPLER2D;           }
+sampler3D               {return KW_SAMPLER3D;           }
+samplerCUBE             {return KW_SAMPLERCUBE;         }
+sampler_state           {return KW_SAMPLER_STATE;       }
+SamplerComparisonState  {return KW_SAMPLERCOMPARISONSTATE;}
+shared                  {return KW_SHARED;              }
+stateblock              {return KW_STATEBLOCK;          }
+stateblock_state        {return KW_STATEBLOCK_STATE;    }
+static                  {return KW_STATIC;              }
+string                  {return KW_STRING;              }
+struct                  {return KW_STRUCT;              }
+switch                  {return KW_SWITCH;              }
+tbuffer                 {return KW_TBUFFER;             }
+technique               {return KW_TECHNIQUE;           }
+technique10             {return KW_TECHNIQUE10;         }
+texture                 {return KW_TEXTURE;             }
+texture1D               {return KW_TEXTURE1D;           }
+Texture1DArray          {return KW_TEXTURE1DARRAY;      }
+texture2D               {return KW_TEXTURE2D;           }
+Texture2DArray          {return KW_TEXTURE2DARRAY;      }
+Texture2DMS             {return KW_TEXTURE2DMS;         }
+Texture2DMSArray        {return KW_TEXTURE2DMSARRAY;    }
+texture3D               {return KW_TEXTURE3D;           }
+Texture3DArray          {return KW_TEXTURE3DARRAY;      }
+textureCUBE             {return KW_TEXTURECUBE;         }
+true                    {return KW_TRUE;                }
+typedef                 {return KW_TYPEDEF;             }
+uniform                 {return KW_UNIFORM;             }
+vector                  {return KW_VECTOR;              }
+VertexShader            {return KW_VERTEXSHADER;        }
+void                    {return KW_VOID;                }
+volatile                {return KW_VOLATILE;            }
+while                   {return KW_WHILE;               }
+
+\+\+                    {return OP_INC;                 }
+\-\-                    {return OP_DEC;                 }
+&&                      {return OP_AND;                 }
+\|\|                    {return OP_OR;                  }
+==                      {return OP_EQ;                  }
+\<\<                    {return OP_LEFTSHIFT;           }
+\<\<=                   {return OP_LEFTSHIFTASSIGN;     }
+\>\>                    {return OP_RIGHTSHIFT;          }
+\>\>=                   {return OP_RIGHTSHIFTASSIGN;    }
+\.\.\.                  {return OP_ELLIPSIS;            }
+\<=                     {return OP_LE;                  }
+\>=                     {return OP_GE;                  }
+\<                      {return OP_LT;                  }
+\>                      {return OP_GT;                  }
+!=                      {return OP_NE;                  }
+\+=                     {return OP_ADDASSIGN;           }
+\-=                     {return OP_SUBASSIGN;           }
+\*=                     {return OP_MULASSIGN;           }
+\/=                     {return OP_DIVASSIGN;           }
+%=                      {return OP_MODASSIGN;           }
+&=                      {return OP_ANDASSIGN;           }
+\|=                     {return OP_ORASSIGN;            }
+^=                      {return OP_XORASSIGN;           }
+##                      {return OP_UNKNOWN1;            }
+#@                      {return OP_UNKNOWN2;            }
+::                      {return OP_UNKNOWN3;            }
+\-\>                    {return OP_UNKNOWN4;            }
+
+column_major            {return KW_COLUMN_MAJOR;        }
+row_major               {return KW_ROW_MAJOR;           }
+
+[+-]?[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[h|H|f|F]? {
+                            hlsl_lval.floatval = atof(yytext);
+                            return C_FLOAT;
+                        }
+[+-]?[0-9]+\.([eE][+-]?[0-9]+)?[h|H|f|F]? {
+                            hlsl_lval.floatval = atof(yytext);
+                            return C_FLOAT;
+                        }
+[+-]?[0-9]+([eE][+-]?[0-9]+)?[h|H|f|F] {
+                            hlsl_lval.floatval = atof(yytext);
+                            return C_FLOAT;
+                        }
+0x[0-9a-fA-F]+          {
+                            sscanf(yytext, "0x%x", &hlsl_lval.intval);
+                            return C_INTEGER;
+                        }
+0[0-7]+                 {
+                            sscanf(yytext, "0%o", &hlsl_lval.intval);
+                            return C_INTEGER;
+                        }
+\-?[0-9]+               {
+                            hlsl_lval.intval = (atoi(yytext));
+                            return C_INTEGER;
+                        }
+
+{DOUBLESLASHCOMMENT}    {}
+
 {WS}+                   {}
 {NEWLINE}               {
                             hlsl_ctx.line_no++;
diff --git a/dlls/d3dcompiler_43/hlsl.y b/dlls/d3dcompiler_43/hlsl.y
index 5691848..8dcd0d8 100644
--- a/dlls/d3dcompiler_43/hlsl.y
+++ b/dlls/d3dcompiler_43/hlsl.y
@@ -55,11 +55,113 @@ static void hlsl_error(const char *s)
 {
     char *name;
     INT intval;
+    FLOAT floatval;
 }
 
+%token KW_BLENDSTATE
+%token KW_BREAK
+%token KW_BUFFER
+%token KW_CBUFFER
+%token KW_COLUMN_MAJOR
+%token KW_COMPILE
+%token KW_CONST
+%token KW_CONTINUE
+%token KW_DEPTHSTENCILSTATE
+%token KW_DEPTHSTENCILVIEW
+%token KW_DISCARD
+%token KW_DO
+%token KW_DOUBLE
+%token KW_ELSE
+%token KW_EXTERN
+%token KW_FALSE
+%token KW_FOR
+%token KW_GEOMETRYSHADER
+%token KW_GROUPSHARED
+%token KW_IF
+%token KW_IN
+%token KW_INLINE
+%token KW_INOUT
+%token KW_MATRIX
+%token KW_NAMESPACE
+%token KW_NOINTERPOLATION
+%token KW_OUT
+%token KW_PASS
+%token KW_PIXELSHADER
+%token KW_PRECISE
+%token KW_RASTERIZERSTATE
+%token KW_RENDERTARGETVIEW
+%token KW_RETURN
+%token KW_REGISTER
+%token KW_ROW_MAJOR
+%token KW_SAMPLER
+%token KW_SAMPLER1D
+%token KW_SAMPLER2D
+%token KW_SAMPLER3D
+%token KW_SAMPLERCUBE
+%token KW_SAMPLER_STATE
+%token KW_SAMPLERCOMPARISONSTATE
+%token KW_SHARED
+%token KW_STATEBLOCK
+%token KW_STATEBLOCK_STATE
+%token KW_STATIC
+%token KW_STRING
+%token KW_STRUCT
+%token KW_SWITCH
+%token KW_TBUFFER
+%token KW_TECHNIQUE
+%token KW_TECHNIQUE10
+%token KW_TEXTURE
+%token KW_TEXTURE1D
+%token KW_TEXTURE1DARRAY
+%token KW_TEXTURE2D
+%token KW_TEXTURE2DARRAY
+%token KW_TEXTURE2DMS
+%token KW_TEXTURE2DMSARRAY
+%token KW_TEXTURE3D
+%token KW_TEXTURE3DARRAY
+%token KW_TEXTURECUBE
+%token KW_TRUE
+%token KW_TYPEDEF
+%token KW_UNIFORM
+%token KW_VECTOR
+%token KW_VERTEXSHADER
+%token KW_VOID
+%token KW_VOLATILE
+%token KW_WHILE
+
+%token OP_INC
+%token OP_DEC
+%token OP_AND
+%token OP_OR
+%token OP_EQ
+%token OP_LEFTSHIFT
+%token OP_LEFTSHIFTASSIGN
+%token OP_RIGHTSHIFT
+%token OP_RIGHTSHIFTASSIGN
+%token OP_ELLIPSIS
+%token OP_LE
+%token OP_GE
+%token OP_LT
+%token OP_GT
+%token OP_NE
+%token OP_ADDASSIGN
+%token OP_SUBASSIGN
+%token OP_MULASSIGN
+%token OP_DIVASSIGN
+%token OP_MODASSIGN
+%token OP_ANDASSIGN
+%token OP_ORASSIGN
+%token OP_XORASSIGN
+%token OP_UNKNOWN1
+%token OP_UNKNOWN2
+%token OP_UNKNOWN3
+%token OP_UNKNOWN4
+
 %token <intval> PRE_LINE
 
 %token <name> STRING
+%token <floatval> C_FLOAT
+%token <intval> C_INTEGER
 %%
 
 hlsl_prog:                /* empty */
-- 
1.7.3.4




More information about the wine-patches mailing list