|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311 |
- %{
- //
- // Lol Engine
- //
- // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net>
- // This program is free software; you can redistribute it and/or
- // modify it under the terms of the Do What The Fuck You Want To
- // Public License, Version 2, as published by Sam Hocevar. See
- // http://www.wtfpl.net/ for more details.
- //
-
- #if defined HAVE_CONFIG_H
- # include "config.h"
- #endif
-
- #include "core.h"
-
- #include <string>
-
- %}
-
- %require "2.3"
- %debug
- %defines
- %skeleton "lalr1.cc"
- %name-prefix="lol"
- %define parser_class_name "LolFxParser"
- %locations
- %parse-param { class LolFxCompiler& mc }
- %error-verbose
-
- /* The classic Bison union trick */
- %union
- {
- int ival;
- unsigned uval;
- float fval;
- char *sval;
- }
-
- /* %type <sval> lolfx_shader_name */
-
- /*
- * GLSL and HLSL generic tokens
- */
-
- %token <ival> BOOLCONSTANT
- %token <ival> INTCONSTANT
- %token <uval> UINTCONSTANT
- %token <fval> FLOATCONSTANT
- %token <sval> FIELDSELECTION
- %token <sval> IDENTIFIER
- %token <sval> TYPENAME
-
- /*
- * GLSL keywords
- * FIXME: unsorted
- */
-
- %token GT_SUBROUTINE GT_PATCH GT_SAMPLE GT_FLAT GT_SMOOTH GT_LAYOUT
- %token GT_INVARIANT GT_HIGHP GT_MEDIUMP GT_LOWP GT_PRECISION
-
- /*
- * Deprecated GLSL keywords
- */
-
- %token GT_ATTRIBUTE GT_VARYING
-
- /*
- * GLSL types
- */
-
- %token GT_VEC2 GT_VEC3 GT_VEC4
- %token GT_BVEC2 GT_BVEC3 GT_BVEC4
- %token GT_DVEC2 GT_DVEC3 GT_DVEC4
- %token GT_IVEC2 GT_IVEC3 GT_IVEC4
- %token GT_UVEC2 GT_UVEC3 GT_UVEC4
-
- %token GT_MAT2 GT_MAT2X2 GT_MAT2X3 GT_MAT2X4
- %token GT_MAT3 GT_MAT3X2 GT_MAT3X3 GT_MAT3X4
- %token GT_MAT4 GT_MAT4X2 GT_MAT4X3 GT_MAT4X4
- %token GT_DMAT2 GT_DMAT2X2 GT_DMAT2X3 GT_DMAT2X4
- %token GT_DMAT3 GT_DMAT3X2 GT_DMAT3X3 GT_DMAT3X4
- %token GT_DMAT4 GT_DMAT4X2 GT_DMAT4X3 GT_DMAT4X4
-
- %token GT_SAMPLER1DSHADOW GT_SAMPLER1DARRAY GT_SAMPLER1DARRAYSHADOW
- %token GT_SAMPLER2DSHADOW GT_SAMPLER2DARRAY GT_SAMPLER2DARRAYSHADOW
- %token GT_SAMPLER2DRECT GT_SAMPLER2DRECTSHADOW
- %token GT_SAMPLER2DMS GT_SAMPLER2DMSARRAY
- %token GT_SAMPLERCUBESHADOW GT_SAMPLERCUBEARRAY GT_SAMPLERCUBEARRAYSHADOW
- %token GT_SAMPLERBUFFER
-
- %token GT_ISAMPLER1D GT_ISAMPLER1DARRAY
- %token GT_ISAMPLER2D GT_ISAMPLER2DARRAY
- %token GT_ISAMPLER2DRECT
- %token GT_ISAMPLER2DMS GT_ISAMPLER2DMSARRAY
- %token GT_ISAMPLER3D
- %token GT_ISAMPLERCUBE GT_ISAMPLERCUBEARRAY
- %token GT_ISAMPLERBUFFER
-
- %token GT_USAMPLER1D GT_USAMPLER1DARRAY
- %token GT_USAMPLER2D GT_USAMPLER2DARRAY
- %token GT_USAMPLER2DRECT
- %token GT_USAMPLER2DMS GT_USAMPLER2DMSARRAY
- %token GT_USAMPLER3D
- %token GT_USAMPLERCUBE GT_USAMPLERCUBEARRAY
- %token GT_USAMPLERBUFFER
-
- /*
- * GLSL keywords that are also in HLSL
- */
-
- %token GHT_BOOL GHT_BREAK GHT_CASE GHT_CENTROID GHT_CONST GHT_CONTINUE
- %token GHT_DEFAULT GHT_DISCARD GHT_DO GHT_DOUBLE GHT_ELSE GHT_FLOAT GHT_FOR
- %token GHT_IF GHT_IN GHT_INOUT GHT_INT GHT_NOPERSPECTIVE GHT_OUT GHT_RETURN
- %token GHT_SAMPLER1D GHT_SAMPLER2D GHT_SAMPLER3D GHT_SAMPLERCUBE GHT_STRUCT
- %token GHT_SWITCH GHT_UINT GHT_UNIFORM GHT_VOID GHT_WHILE
-
- /*
- * HLSL keywords that are also in GLSL
- */
-
- %token HGT_BOOL HGT_BREAK HGT_CASE HGT_CENTROID HGT_CONST HGT_CONTINUE
- %token HGT_DEFAULT HGT_DISCARD HGT_DO HGT_DOUBLE HGT_ELSE HGT_FLOAT HGT_FOR
- %token HGT_IF HGT_IN HGT_INOUT HGT_INT HGT_NOPERSPECTIVE HGT_OUT HGT_RETURN
- %token HGT_SAMPLER1D HGT_SAMPLER2D HGT_SAMPLER3D HGT_SAMPLERCUBE HGT_STRUCT
- %token HGT_SWITCH HGT_UINT HGT_UNIFORM HGT_VOID HGT_WHILE
-
- /*
- * HLSL keywords
- */
-
- %token HT_APPENDSTRUCTUREDBUFFER HT_ASM HT_ASM_FRAGMENT HT_BLENDSTATE
- %token HT_BUFFER HT_BYTEADDRESSBUFFER HT_CBUFFER
- %token HT_COLUMN_MAJOR HT_COMPILE HT_COMPILE_FRAGMENT HT_COMPILESHADER
- %token HT_COMPUTESHADER HT_CONSUMESTRUCTUREDBUFFER
- %token HT_DEPTHSTENCILSTATE HT_DEPTHSTENCILVIEW
- %token HT_DOMAINSHADER HT_DWORD HT_EXTERN HT_FALSE
- %token HT_FXGROUP HT_GEOMETRYSHADER HT_GROUPSHARED HT_HALF HT_HULLSHADER
- %token HT_INLINE HT_INPUTPATCH HT_INTERFACE HT_LINE
- %token HT_LINEADJ HT_LINEAR HT_LINESTREAM HT_MATRIX HT_NAMESPACE
- %token HT_NOINTERPOLATION HT_NULL HT_OUTPUTPATCH
- %token HT_PACKOFFSET HT_PASS HT_PIXELFRAGMENT HT_PIXELSHADER HT_POINT
- %token HT_POINTSTREAM HT_PRECISE HT_RASTERIZERSTATE HT_RENDERTARGETVIEW
- %token HT_REGISTER HT_ROW_MAJOR HT_RWBUFFER HT_RWBYTEADDRESSBUFFER
- %token HT_RWSTRUCTUREDBUFFER HT_RWTEXTURE1D HT_RWTEXTURE1DARRAY HT_RWTEXTURE2D
- %token HT_RWTEXTURE2DARRAY HT_RWTEXTURE3D HT_SAMPLER
- %token HT_SAMPLER_STATE HT_SAMPLERSTATE
- %token HT_SAMPLERCOMPARISONSTATE HT_SHARED HT_SNORM HT_STATEBLOCK
- %token HT_STATEBLOCK_STATE HT_STATIC HT_STRING
- %token HT_STRUCTUREDBUFFER HT_TBUFFER HT_TECHNIQUE HT_TECHNIQUE10
- %token HT_TECHNIQUE11XZ HT_TEXTURE HT_TEXTURE1D HT_TEXTURE1DARRAY HT_TEXTURE2D
- %token HT_TEXTURE2DARRAY HT_TEXTURE2DMS HT_TEXTURE2DMSARRAY HT_TEXTURE3D
- %token HT_TEXTURECUBE HT_TEXTURECUBEARRAY HT_TRUE HT_TYPEDEF HT_TRIANGLE
- %token HT_TRIANGLEADJ HT_TRIANGLESTREAM HT_UNORM HT_VECTOR
- %token HT_VERTEXFRAGMENT HT_VERTEXSHADER HT_VOLATILE
-
- /*
- * HLSL types
- */
-
- %token HT_BOOL1 HT_BOOL1x1 HT_BOOL2x1 HT_BOOL3x1 HT_BOOL4x1
- %token HT_BOOL2 HT_BOOL1x2 HT_BOOL2x2 HT_BOOL3x2 HT_BOOL4x2
- %token HT_BOOL3 HT_BOOL1x3 HT_BOOL2x3 HT_BOOL3x3 HT_BOOL4x3
- %token HT_BOOL4 HT_BOOL1x4 HT_BOOL2x4 HT_BOOL3x4 HT_BOOL4x4
-
- %token HT_FLOAT1 HT_FLOAT1x1 HT_FLOAT2x1 HT_FLOAT3x1 HT_FLOAT4x1
- %token HT_FLOAT2 HT_FLOAT1x2 HT_FLOAT2x2 HT_FLOAT3x2 HT_FLOAT4x2
- %token HT_FLOAT3 HT_FLOAT1x3 HT_FLOAT2x3 HT_FLOAT3x3 HT_FLOAT4x3
- %token HT_FLOAT4 HT_FLOAT1x4 HT_FLOAT2x4 HT_FLOAT3x4 HT_FLOAT4x4
-
- %token HT_DOUBLE1 HT_DOUBLE1x1 HT_DOUBLE2x1 HT_DOUBLE3x1 HT_DOUBLE4x1
- %token HT_DOUBLE2 HT_DOUBLE1x2 HT_DOUBLE2x2 HT_DOUBLE3x2 HT_DOUBLE4x2
- %token HT_DOUBLE3 HT_DOUBLE1x3 HT_DOUBLE2x3 HT_DOUBLE3x3 HT_DOUBLE4x3
- %token HT_DOUBLE4 HT_DOUBLE1x4 HT_DOUBLE2x4 HT_DOUBLE3x4 HT_DOUBLE4x4
-
- %token HT_DWORD1 HT_DWORD1x1 HT_DWORD2x1 HT_DWORD3x1 HT_DWORD4x1
- %token HT_DWORD2 HT_DWORD1x2 HT_DWORD2x2 HT_DWORD3x2 HT_DWORD4x2
- %token HT_DWORD3 HT_DWORD1x3 HT_DWORD2x3 HT_DWORD3x3 HT_DWORD4x3
- %token HT_DWORD4 HT_DWORD1x4 HT_DWORD2x4 HT_DWORD3x4 HT_DWORD4x4
-
- %token HT_INT1 HT_INT1x1 HT_INT2x1 HT_INT3x1 HT_INT4x1
- %token HT_INT2 HT_INT1x2 HT_INT2x2 HT_INT3x2 HT_INT4x2
- %token HT_INT3 HT_INT1x3 HT_INT2x3 HT_INT3x3 HT_INT4x3
- %token HT_INT4 HT_INT1x4 HT_INT2x4 HT_INT3x4 HT_INT4x4
-
- %token HT_UINT1 HT_UINT1x1 HT_UINT2x1 HT_UINT3x1 HT_UINT4x1
- %token HT_UINT2 HT_UINT1x2 HT_UINT2x2 HT_UINT3x2 HT_UINT4x2
- %token HT_UINT3 HT_UINT1x3 HT_UINT2x3 HT_UINT3x3 HT_UINT4x3
- %token HT_UINT4 HT_UINT1x4 HT_UINT2x4 HT_UINT3x4 HT_UINT4x4
-
- /*
- * HLSL preprocessor directives
- */
-
- %token PREPROCESSOR_DEFINE PREPROCESSOR_ELIF PREPROCESSOR_ELSE
- %token PREPROCESSOR_ENDIF PREPROCESSOR_ERROR PREPROCESSOR_IF
- %token PREPROCESSOR_IFDEF PREPROCESSOR_IFNDEF PREPROCESSOR_INCLUDE
- %token PREPROCESSOR_LINE PREPROCESSOR_PRAGMA PREPROCESSOR_UNDEF
- %token PREPROCESSOR_REGION
-
- /*
- * HLSL reserved keywords
- */
-
- %token HT_AUTO HT_CATCH HT_CHAR HT_CLASS HT_CONST_CAST
- %token HT_DELETE HT_DYNAMIC_CAST HT_ENUM HT_EXPLICIT HT_FRIEND HT_GOTO HT_LONG
- %token HT_MUTABLE HT_NEW HT_OPERATOR HT_PRIVATE HT_PROTECTED HT_PUBLIC
- %token HT_REINTERPRET_CAST HT_SHORT HT_SIGNED HT_SIZEOF HT_STATIC_CAST
- %token HT_TEMPLATE HT_THIS HT_THROW HT_TRY HT_TYPENAME HT_UNION HT_UNSIGNED
- %token HT_USING HT_VIRTUAL
-
- /*
- * Language symbols
- */
-
- %token T_INC T_DEC T_LE T_GE T_EQ T_NE T_LEFT T_RIGHT T_AND T_OR T_XOR
- %token T_MULEQ T_DIVEQ T_MODEQ T_ADDEQ T_SUBEQ T_LEFTEQ T_RIGHTEQ T_ANDEQ
- %token T_XOREQ T_OREQ
-
- /*
- * Temporary shit
- */
-
- %token <fval> FLOAT
- %token <sval> STRING NAME
-
- /*
- * Special tokens
- */
-
- %token T_END 0
- %token T_ERROR
-
- /*
- * Our entry point
- */
-
- %start lolfx_file
-
- %{
- #include "gpu/lolfx-compiler.h"
-
- #undef yylex
- #define yylex mc.m_lexer->lex
-
- /* HACK: workaround for Bison who insists on using exceptions */
- #define try if (true)
- #define catch(...) if (false)
- #define throw (void)0
- %}
-
- %%
-
- /*
- * Shortcuts for token groups
- */
-
- group_glsl_keyword:
- GT_SUBROUTINE
- | GT_PATCH
- | GT_SAMPLE
- | GT_FLAT
- | GT_SMOOTH
- | GT_LAYOUT
- | GT_INVARIANT
- | GT_HIGHP
- | GT_MEDIUMP
- | GT_LOWP
- | GT_PRECISION
- | GT_ATTRIBUTE /* deprecated */
- | GT_VARYING /* deprecated */
- ;
-
- group_glsl_type:
- GT_VEC2
- | GT_VEC3
- | GT_VEC4
- | GT_BVEC2
- | GT_BVEC3
- | GT_BVEC4
- | GT_DVEC2
- | GT_DVEC3
- | GT_DVEC4
- | GT_IVEC2
- | GT_IVEC3
- | GT_IVEC4
- | GT_UVEC2
- | GT_UVEC3
- | GT_UVEC4
- | GT_MAT2
- | GT_MAT2X2
- | GT_MAT2X3
- | GT_MAT2X4
- | GT_MAT3
- | GT_MAT3X2
- | GT_MAT3X3
- | GT_MAT3X4
- | GT_MAT4
- | GT_MAT4X2
- | GT_MAT4X3
- | GT_MAT4X4
- | GT_DMAT2
- | GT_DMAT2X2
- | GT_DMAT2X3
- | GT_DMAT2X4
- | GT_DMAT3
- | GT_DMAT3X2
- | GT_DMAT3X3
- | GT_DMAT3X4
- | GT_DMAT4
- | GT_DMAT4X2
- | GT_DMAT4X3
- | GT_DMAT4X4
- | GT_SAMPLER1DSHADOW
- | GT_SAMPLER1DARRAY
- | GT_SAMPLER1DARRAYSHADOW
- | GT_SAMPLER2DSHADOW
- | GT_SAMPLER2DARRAY
- | GT_SAMPLER2DARRAYSHADOW
- | GT_SAMPLER2DRECT
- | GT_SAMPLER2DRECTSHADOW
- | GT_SAMPLER2DMS
- | GT_SAMPLER2DMSARRAY
- | GT_SAMPLERCUBESHADOW
- | GT_SAMPLERCUBEARRAY
- | GT_SAMPLERCUBEARRAYSHADOW
- | GT_SAMPLERBUFFER
- | GT_ISAMPLER1D
- | GT_ISAMPLER1DARRAY
- | GT_ISAMPLER2D
- | GT_ISAMPLER2DARRAY
- | GT_ISAMPLER2DRECT
- | GT_ISAMPLER2DMS
- | GT_ISAMPLER2DMSARRAY
- | GT_ISAMPLER3D
- | GT_ISAMPLERCUBE
- | GT_ISAMPLERCUBEARRAY
- | GT_ISAMPLERBUFFER
- | GT_USAMPLER1D
- | GT_USAMPLER1DARRAY
- | GT_USAMPLER2D
- | GT_USAMPLER2DARRAY
- | GT_USAMPLER2DRECT
- | GT_USAMPLER2DMS
- | GT_USAMPLER2DMSARRAY
- | GT_USAMPLER3D
- | GT_USAMPLERCUBE
- | GT_USAMPLERCUBEARRAY
- | GT_USAMPLERBUFFER
- | HGT_SAMPLER1D
- | HGT_SAMPLER2D
- | HGT_SAMPLER3D
- | HGT_SAMPLERCUBE
- ;
-
- group_glsl_keyword_in_hlsl:
- GHT_BOOL
- | GHT_BREAK
- | GHT_CASE
- | GHT_CENTROID
- | GHT_CONST
- | GHT_CONTINUE
- | GHT_DEFAULT
- | GHT_DISCARD
- | GHT_DO
- | GHT_DOUBLE
- | GHT_ELSE
- | GHT_FLOAT
- | GHT_FOR
- | GHT_IF
- | GHT_IN
- | GHT_INOUT
- | GHT_INT
- | GHT_NOPERSPECTIVE
- | GHT_OUT
- | GHT_RETURN
- | GHT_SAMPLER1D
- | GHT_SAMPLER2D
- | GHT_SAMPLER3D
- | GHT_SAMPLERCUBE
- | GHT_STRUCT
- | GHT_SWITCH
- | GHT_UINT
- | GHT_UNIFORM
- | GHT_VOID
- | GHT_WHILE
- ;
-
- group_hlsl_keyword_in_glsl:
- HGT_BOOL
- | HGT_BREAK
- | HGT_CASE
- | HGT_CENTROID
- | HGT_CONST
- | HGT_CONTINUE
- | HGT_DEFAULT
- | HGT_DISCARD
- | HGT_DO
- | HGT_DOUBLE
- | HGT_ELSE
- | HGT_FLOAT
- | HGT_FOR
- | HGT_IF
- | HGT_IN
- | HGT_INOUT
- | HGT_INT
- | HGT_NOPERSPECTIVE
- | HGT_OUT
- | HGT_RETURN
- | HGT_STRUCT
- | HGT_SWITCH
- | HGT_UINT
- | HGT_UNIFORM
- | HGT_VOID
- | HGT_WHILE
- ;
-
- group_hlsl_keyword:
- HT_APPENDSTRUCTUREDBUFFER
- | HT_ASM
- | HT_ASM_FRAGMENT
- | HT_BLENDSTATE
- | HT_BUFFER
- | HT_BYTEADDRESSBUFFER
- | HT_CBUFFER
- | HT_COLUMN_MAJOR
- | HT_COMPILE
- | HT_COMPILE_FRAGMENT
- | HT_COMPILESHADER
- | HT_COMPUTESHADER
- | HT_CONSUMESTRUCTUREDBUFFER
- | HT_DEPTHSTENCILSTATE
- | HT_DEPTHSTENCILVIEW
- | HT_DOMAINSHADER
- | HT_DWORD
- | HT_EXTERN
- | HT_FALSE
- | HT_FXGROUP
- | HT_GEOMETRYSHADER
- | HT_GROUPSHARED
- | HT_HALF
- | HT_HULLSHADER
- | HT_INLINE
- | HT_INPUTPATCH
- | HT_INTERFACE
- | HT_LINE
- | HT_LINEADJ
- | HT_LINEAR
- | HT_LINESTREAM
- | HT_MATRIX
- | HT_NAMESPACE
- | HT_NOINTERPOLATION
- | HT_NULL
- | HT_OUTPUTPATCH
- | HT_PACKOFFSET
- | HT_PASS
- | HT_PIXELFRAGMENT
- | HT_PIXELSHADER
- | HT_POINT
- | HT_POINTSTREAM
- | HT_PRECISE
- | HT_RASTERIZERSTATE
- | HT_RENDERTARGETVIEW
- | HT_REGISTER
- | HT_ROW_MAJOR
- | HT_RWBUFFER
- | HT_RWBYTEADDRESSBUFFER
- | HT_RWSTRUCTUREDBUFFER
- | HT_RWTEXTURE1D
- | HT_RWTEXTURE1DARRAY
- | HT_RWTEXTURE2D
- | HT_RWTEXTURE2DARRAY
- | HT_RWTEXTURE3D
- | HT_SAMPLER
- | HT_SAMPLER_STATE
- | HT_SAMPLERSTATE
- | HT_SAMPLERCOMPARISONSTATE
- | HT_SHARED
- | HT_SNORM
- | HT_STATEBLOCK
- | HT_STATEBLOCK_STATE
- | HT_STATIC
- | HT_STRING
- | HT_STRUCTUREDBUFFER
- | HT_TBUFFER
- | HT_TECHNIQUE
- | HT_TECHNIQUE10
- | HT_TECHNIQUE11XZ
- | HT_TEXTURE
- | HT_TEXTURE1D
- | HT_TEXTURE1DARRAY
- | HT_TEXTURE2D
- | HT_TEXTURE2DARRAY
- | HT_TEXTURE2DMS
- | HT_TEXTURE2DMSARRAY
- | HT_TEXTURE3D
- | HT_TEXTURECUBE
- | HT_TEXTURECUBEARRAY
- | HT_TRUE
- | HT_TYPEDEF
- | HT_TRIANGLE
- | HT_TRIANGLEADJ
- | HT_TRIANGLESTREAM
- | HT_UNORM
- | HT_VECTOR
- | HT_VERTEXFRAGMENT
- | HT_VERTEXSHADER
- | HT_VOLATILE
- ;
-
- group_hlsl_type:
- HT_BOOL1
- | HT_BOOL1x1
- | HT_BOOL2x1
- | HT_BOOL3x1
- | HT_BOOL4x1
- | HT_BOOL2
- | HT_BOOL1x2
- | HT_BOOL2x2
- | HT_BOOL3x2
- | HT_BOOL4x2
- | HT_BOOL3
- | HT_BOOL1x3
- | HT_BOOL2x3
- | HT_BOOL3x3
- | HT_BOOL4x3
- | HT_BOOL4
- | HT_BOOL1x4
- | HT_BOOL2x4
- | HT_BOOL3x4
- | HT_BOOL4x4
- | HT_FLOAT1
- | HT_FLOAT1x1
- | HT_FLOAT2x1
- | HT_FLOAT3x1
- | HT_FLOAT4x1
- | HT_FLOAT2
- | HT_FLOAT1x2
- | HT_FLOAT2x2
- | HT_FLOAT3x2
- | HT_FLOAT4x2
- | HT_FLOAT3
- | HT_FLOAT1x3
- | HT_FLOAT2x3
- | HT_FLOAT3x3
- | HT_FLOAT4x3
- | HT_FLOAT4
- | HT_FLOAT1x4
- | HT_FLOAT2x4
- | HT_FLOAT3x4
- | HT_FLOAT4x4
- | HT_DOUBLE1
- | HT_DOUBLE1x1
- | HT_DOUBLE2x1
- | HT_DOUBLE3x1
- | HT_DOUBLE4x1
- | HT_DOUBLE2
- | HT_DOUBLE1x2
- | HT_DOUBLE2x2
- | HT_DOUBLE3x2
- | HT_DOUBLE4x2
- | HT_DOUBLE3
- | HT_DOUBLE1x3
- | HT_DOUBLE2x3
- | HT_DOUBLE3x3
- | HT_DOUBLE4x3
- | HT_DOUBLE4
- | HT_DOUBLE1x4
- | HT_DOUBLE2x4
- | HT_DOUBLE3x4
- | HT_DOUBLE4x4
- | HT_DWORD1
- | HT_DWORD1x1
- | HT_DWORD2x1
- | HT_DWORD3x1
- | HT_DWORD4x1
- | HT_DWORD2
- | HT_DWORD1x2
- | HT_DWORD2x2
- | HT_DWORD3x2
- | HT_DWORD4x2
- | HT_DWORD3
- | HT_DWORD1x3
- | HT_DWORD2x3
- | HT_DWORD3x3
- | HT_DWORD4x3
- | HT_DWORD4
- | HT_DWORD1x4
- | HT_DWORD2x4
- | HT_DWORD3x4
- | HT_DWORD4x4
- | HT_INT1
- | HT_INT1x1
- | HT_INT2x1
- | HT_INT3x1
- | HT_INT4x1
- | HT_INT2
- | HT_INT1x2
- | HT_INT2x2
- | HT_INT3x2
- | HT_INT4x2
- | HT_INT3
- | HT_INT1x3
- | HT_INT2x3
- | HT_INT3x3
- | HT_INT4x3
- | HT_INT4
- | HT_INT1x4
- | HT_INT2x4
- | HT_INT3x4
- | HT_INT4x4
- | HT_UINT1
- | HT_UINT1x1
- | HT_UINT2x1
- | HT_UINT3x1
- | HT_UINT4x1
- | HT_UINT2
- | HT_UINT1x2
- | HT_UINT2x2
- | HT_UINT3x2
- | HT_UINT4x2
- | HT_UINT3
- | HT_UINT1x3
- | HT_UINT2x3
- | HT_UINT3x3
- | HT_UINT4x3
- | HT_UINT4
- | HT_UINT1x4
- | HT_UINT2x4
- | HT_UINT3x4
- | HT_UINT4x4
- ;
-
- group_hlsl_preprocessor:
- PREPROCESSOR_DEFINE
- | PREPROCESSOR_ELIF
- | PREPROCESSOR_ELSE
- | PREPROCESSOR_ENDIF
- | PREPROCESSOR_ERROR
- | PREPROCESSOR_IF
- | PREPROCESSOR_IFDEF
- | PREPROCESSOR_IFNDEF
- | PREPROCESSOR_INCLUDE
- | PREPROCESSOR_LINE
- | PREPROCESSOR_PRAGMA
- | PREPROCESSOR_UNDEF
- | PREPROCESSOR_REGION
- ;
-
- group_hlsl_reserved:
- HT_AUTO
- | HT_CATCH
- | HT_CHAR
- | HT_CLASS
- | HT_CONST_CAST
- | HT_DELETE
- | HT_DYNAMIC_CAST
- | HT_ENUM
- | HT_EXPLICIT
- | HT_FRIEND
- | HT_GOTO
- | HT_LONG
- | HT_MUTABLE
- | HT_NEW
- | HT_OPERATOR
- | HT_PRIVATE
- | HT_PROTECTED
- | HT_PUBLIC
- | HT_REINTERPRET_CAST
- | HT_SHORT
- | HT_SIGNED
- | HT_SIZEOF
- | HT_STATIC_CAST
- | HT_TEMPLATE
- | HT_THIS
- | HT_THROW
- | HT_TRY
- | HT_TYPENAME
- | HT_UNION
- | HT_UNSIGNED
- | HT_USING
- | HT_VIRTUAL
- ;
-
- group_language_symbols:
- T_INC
- | T_DEC
- | T_LE
- | T_GE
- | T_EQ
- | T_NE
- | T_LEFT
- | T_RIGHT
- | T_AND
- | T_OR
- | T_XOR
- | T_MULEQ
- | T_DIVEQ
- | T_MODEQ
- | T_ADDEQ
- | T_SUBEQ
- | T_LEFTEQ
- | T_RIGHTEQ
- | T_ANDEQ
- | T_XOREQ
- | T_OREQ
- ;
-
- /*
- * Grammar for LolFx files
- */
-
- lolfx_file:
- lolfx_section_list
- T_END
- ;
-
- lolfx_section_list:
- lolfx_section
- | lolfx_section lolfx_section_list
- ;
-
- lolfx_section:
- lolfx_technique
- | lolfx_shader
- ;
-
- /*
- * Grammar for techniques
- */
-
- lolfx_technique:
- HT_TECHNIQUE lolfx_identifier '{' pass_list '}' { std::cout << "New tech " << std::endl; }
- ;
-
- /*
- * The valid LolFx identifiers
- */
-
- lolfx_identifier:
- IDENTIFIER { std::cout << "New name " << $1 << std::endl; }
- | FIELDSELECTION { std::cout << "New name " << $1 << std::endl; }
- ;
-
- /*
- * Grammar for passes
- */
-
- pass_list:
- pass
- | pass pass_list
- ;
-
- pass:
- HT_PASS lolfx_identifier '{' pass_stmt_list '}' { std::cout << "New pass " << std::endl; }
- ;
-
- pass_stmt_list:
- pass_stmt
- | pass_stmt pass_stmt_list
- ;
-
- /* Shitty shit */
- pass_stmt:
- ';'
- | IDENTIFIER '=' IDENTIFIER ';'
- | IDENTIFIER '=' INTCONSTANT ';'
- | IDENTIFIER '=' BOOLCONSTANT ';'
- | IDENTIFIER '=' HT_FALSE ';'
- | IDENTIFIER '=' HT_TRUE ';'
- | IDENTIFIER '[' INTCONSTANT ']' '=' IDENTIFIER ';'
- | IDENTIFIER '[' INTCONSTANT ']' '=' INTCONSTANT ';'
- | HT_TEXTURE '[' INTCONSTANT ']' '=' IDENTIFIER ';'
- | HT_TEXTURE '[' INTCONSTANT ']' '=' HT_NULL ';'
- | HT_DOMAINSHADER '=' IDENTIFIER ';'
- | HT_GEOMETRYSHADER '=' IDENTIFIER ';'
- | HT_HULLSHADER '=' IDENTIFIER ';'
- | HT_PIXELSHADER '=' IDENTIFIER ';'
- | HT_VERTEXSHADER '=' IDENTIFIER ';'
- ;
-
- /*
- * Grammar for shaders
- */
-
- lolfx_shader:
- lolfx_shader_declaration glsl_translation_unit
- ;
-
- lolfx_shader_declaration:
- '[' lolfx_shader_name_list ']' { std::cout << "new shader" << std::endl; }
- ;
-
- lolfx_shader_name_list:
- lolfx_shader_name '.' lolfx_shader_name_list
- | lolfx_shader_name
- ;
-
- lolfx_shader_name:
- lolfx_identifier
- ;
-
- /*
- * Grammar for GLSL
- */
-
- glsl_variable_identifier:
- lolfx_identifier
- ;
-
- glsl_primary_expression:
- glsl_variable_identifier
- | INTCONSTANT
- | UINTCONSTANT
- | FLOATCONSTANT
- | BOOLCONSTANT
- | '(' glsl_expression ')'
- ;
-
- glsl_postfix_expression:
- glsl_primary_expression
- | glsl_postfix_expression '[' glsl_integer_expression ']'
- | glsl_function_call
- | glsl_postfix_expression '.' FIELDSELECTION
- | glsl_postfix_expression T_INC
- | glsl_postfix_expression T_DEC
- ;
-
- glsl_integer_expression:
- glsl_expression
- ;
-
- glsl_function_call:
- glsl_function_call_or_method
- ;
-
- glsl_function_call_or_method:
- glsl_function_call_generic
- | glsl_postfix_expression '.' glsl_function_call_generic
- ;
-
- glsl_function_call_generic:
- glsl_function_call_header_with_parameters ')'
- | glsl_function_call_header_no_parameters ')'
- ;
-
- glsl_function_call_header_no_parameters:
- glsl_function_call_header GHT_VOID
- | glsl_function_call_header
- ;
-
- glsl_function_call_header_with_parameters:
- glsl_function_call_header glsl_assignment_expression
- | glsl_function_call_header_with_parameters ',' glsl_assignment_expression
- ;
-
- glsl_function_call_header:
- glsl_function_identifier '('
- ;
-
- glsl_function_identifier:
- glsl_type_specifier
- | IDENTIFIER
- | FIELDSELECTION
- ;
-
- glsl_unary_expression:
- glsl_postfix_expression
- | T_INC glsl_unary_expression
- | T_DEC glsl_unary_expression
- | glsl_unary_operator glsl_unary_expression
- ;
-
- glsl_unary_operator:
- '+'
- | '-'
- | '!'
- | '~'
- ;
-
- glsl_multiplicative_expression:
- glsl_unary_expression
- | glsl_multiplicative_expression '*' glsl_unary_expression
- | glsl_multiplicative_expression '/' glsl_unary_expression
- | glsl_multiplicative_expression '%' glsl_unary_expression
- ;
-
- glsl_additive_expression:
- glsl_multiplicative_expression
- | glsl_additive_expression '+' glsl_multiplicative_expression
- | glsl_additive_expression '-' glsl_multiplicative_expression
- ;
-
- glsl_shift_expression:
- glsl_additive_expression
- | glsl_shift_expression T_LEFT glsl_additive_expression
- | glsl_shift_expression T_RIGHT glsl_additive_expression
- ;
-
- glsl_relational_expression:
- glsl_shift_expression
- | glsl_relational_expression '<' glsl_shift_expression
- | glsl_relational_expression '>' glsl_shift_expression
- | glsl_relational_expression T_LE glsl_shift_expression
- | glsl_relational_expression T_GE glsl_shift_expression
- ;
-
- glsl_equality_expression:
- glsl_relational_expression
- | glsl_equality_expression T_EQ glsl_relational_expression
- | glsl_equality_expression T_NE glsl_relational_expression
- ;
-
- glsl_and_expression:
- glsl_equality_expression
- | glsl_and_expression '&' glsl_equality_expression
- ;
-
- glsl_exclusive_or_expression:
- glsl_and_expression
- | glsl_exclusive_or_expression '^' glsl_and_expression
- ;
-
- glsl_inclusive_or_expression:
- glsl_exclusive_or_expression
- | glsl_inclusive_or_expression '|' glsl_exclusive_or_expression
- ;
-
- glsl_logical_and_expression:
- glsl_inclusive_or_expression
- | glsl_logical_and_expression T_AND glsl_inclusive_or_expression
- ;
-
- glsl_logical_xor_expression:
- glsl_logical_and_expression
- | glsl_logical_xor_expression T_XOR glsl_logical_and_expression
- ;
-
- glsl_logical_or_expression:
- glsl_logical_xor_expression
- | glsl_logical_or_expression T_OR glsl_logical_xor_expression
- ;
-
- glsl_conditional_expression:
- glsl_logical_or_expression
- | glsl_logical_or_expression '?' glsl_expression ':' glsl_assignment_expression
- ;
-
- glsl_assignment_expression:
- glsl_conditional_expression
- | glsl_unary_expression glsl_assignment_operator glsl_assignment_expression
- ;
-
- glsl_assignment_operator:
- '='
- | T_MULEQ
- | T_DIVEQ
- | T_MODEQ
- | T_ADDEQ
- | T_SUBEQ
- | T_LEFTEQ
- | T_RIGHTEQ
- | T_ANDEQ
- | T_XOREQ
- | T_OREQ
- ;
-
- glsl_expression:
- glsl_assignment_expression
- | glsl_expression ',' glsl_assignment_expression
- ;
-
- glsl_constant_expression:
- glsl_conditional_expression
- ;
-
- glsl_declaration:
- glsl_function_prototype ';'
- | glsl_init_declarator_list ';'
- | GT_PRECISION glsl_precision_qualifier glsl_type_specifier_no_prec ';'
- | glsl_type_qualifier lolfx_identifier '{' glsl_struct_declaration_list '}' ';'
- | glsl_type_qualifier lolfx_identifier '{' glsl_struct_declaration_list '}' lolfx_identifier ';'
- | glsl_type_qualifier lolfx_identifier '{' glsl_struct_declaration_list '}' lolfx_identifier '[' ']' ';'
- | glsl_type_qualifier lolfx_identifier '{' glsl_struct_declaration_list '}' lolfx_identifier '[' glsl_constant_expression ']' ';'
- | glsl_type_qualifier ';'
- ;
-
- glsl_function_prototype:
- glsl_function_declarator ')'
- ;
-
- glsl_function_declarator:
- glsl_function_header
- | glsl_function_header_with_parameters
- ;
-
- glsl_function_header_with_parameters:
- glsl_function_header lolfx_parameter_declaration
- | glsl_function_header_with_parameters ',' lolfx_parameter_declaration
- ;
-
- glsl_function_header:
- glsl_fully_specified_type lolfx_identifier '('
- ;
-
- glsl_parameter_declarator:
- glsl_type_specifier lolfx_identifier
- | glsl_type_specifier lolfx_identifier '[' glsl_constant_expression ']'
- ;
-
- lolfx_parameter_declaration:
- glsl_parameter_declaration ':' lolfx_identifier /* HLSL only */
- | glsl_parameter_declaration
- ;
-
- glsl_parameter_declaration:
- glsl_parameter_type_qualifier lolfx_parameter_qualifier glsl_parameter_declarator
- | lolfx_parameter_qualifier glsl_parameter_declarator
- | glsl_parameter_type_qualifier lolfx_parameter_qualifier glsl_parameter_type_specifier
- | lolfx_parameter_qualifier glsl_parameter_type_specifier
- ;
-
- lolfx_parameter_qualifier:
- glsl_parameter_qualifier
- | GHT_UNIFORM /* HLSL only */
- ;
-
- glsl_parameter_qualifier:
- /* empty */
- | GHT_IN
- | GHT_OUT
- | GHT_INOUT
- | GT_ATTRIBUTE /* deprecated */
- | GT_VARYING /* deprecated */
- ;
-
- glsl_parameter_type_specifier:
- glsl_type_specifier
- ;
-
- glsl_init_declarator_list:
- glsl_single_declaration
- | glsl_init_declarator_list ',' lolfx_identifier
- | glsl_init_declarator_list ',' lolfx_identifier '[' ']'
- | glsl_init_declarator_list ',' lolfx_identifier '[' glsl_constant_expression ']'
- | glsl_init_declarator_list ',' lolfx_identifier '[' ']' '=' glsl_initializer
- | glsl_init_declarator_list ',' lolfx_identifier '[' glsl_constant_expression ']' '=' glsl_initializer
- | glsl_init_declarator_list ',' lolfx_identifier '=' glsl_initializer
- ;
-
- glsl_single_declaration:
- glsl_fully_specified_type
- | glsl_fully_specified_type lolfx_identifier
- | glsl_fully_specified_type lolfx_identifier '[' ']'
- | glsl_fully_specified_type lolfx_identifier '[' glsl_constant_expression ']'
- | glsl_fully_specified_type lolfx_identifier '[' ']' '=' glsl_initializer
- | glsl_fully_specified_type lolfx_identifier '[' glsl_constant_expression ']' '=' glsl_initializer
- | glsl_fully_specified_type lolfx_identifier '=' glsl_initializer
- | GT_INVARIANT lolfx_identifier
- ;
-
- glsl_fully_specified_type:
- glsl_type_specifier
- | glsl_type_qualifier glsl_type_specifier
- ;
-
- glsl_invariant_qualifier:
- GT_INVARIANT
- ;
-
- glsl_interpolation_qualifier:
- GT_SMOOTH
- | GT_FLAT
- | GHT_NOPERSPECTIVE
- ;
-
- glsl_layout_qualifier:
- GT_LAYOUT '(' glsl_layout_qualifier_id_list ')'
- ;
-
- glsl_layout_qualifier_id_list:
- glsl_layout_qualifier_id
- | glsl_layout_qualifier_id_list ',' glsl_layout_qualifier_id
- ;
-
- glsl_layout_qualifier_id:
- lolfx_identifier
- | lolfx_identifier '=' INTCONSTANT
- ;
-
- glsl_parameter_type_qualifier:
- GHT_CONST
- ;
-
- glsl_type_qualifier:
- glsl_storage_qualifier
- | glsl_layout_qualifier
- | glsl_layout_qualifier glsl_storage_qualifier
- | glsl_interpolation_qualifier glsl_storage_qualifier
- | glsl_interpolation_qualifier
- | glsl_invariant_qualifier glsl_storage_qualifier
- | glsl_invariant_qualifier glsl_interpolation_qualifier glsl_storage_qualifier
- | glsl_invariant_qualifier
- ;
-
- glsl_storage_qualifier:
- GHT_CONST
- | GHT_IN
- | GHT_OUT
- | GHT_CENTROID GHT_IN
- | GHT_CENTROID GHT_OUT
- | GT_PATCH GHT_IN
- | GT_PATCH GHT_OUT
- | GT_SAMPLE GHT_IN
- | GT_SAMPLE GHT_OUT
- | GHT_UNIFORM
- | GT_ATTRIBUTE /* deprecated */
- | GT_VARYING /* deprecated */
- ;
-
- glsl_type_specifier:
- glsl_type_specifier_no_prec
- | glsl_precision_qualifier glsl_type_specifier_no_prec
- ;
-
- glsl_type_specifier_no_prec:
- lolfx_type_specifier_nonarray
- | lolfx_type_specifier_nonarray '[' ']'
- | lolfx_type_specifier_nonarray '[' glsl_constant_expression ']'
-
- lolfx_type_specifier_nonarray:
- glsl_type_specifier_nonarray
- | group_hlsl_type /* HLSL only */
- ;
-
- glsl_type_specifier_nonarray:
- GHT_VOID
- | GHT_FLOAT
- | GHT_DOUBLE
- | GHT_INT
- | GHT_UINT
- | GHT_BOOL
- | group_glsl_type
- | GHT_SAMPLER1D
- | GHT_SAMPLER2D
- | GHT_SAMPLER3D
- | GHT_SAMPLERCUBE
- | glsl_struct_specifier
- | TYPENAME
- ;
-
- glsl_precision_qualifier:
- GT_HIGHP
- | GT_MEDIUMP
- | GT_LOWP
- ;
-
- glsl_struct_specifier:
- GHT_STRUCT lolfx_identifier '{' glsl_struct_declaration_list '}'
- | GHT_STRUCT '{' glsl_struct_declaration_list '}'
- ;
-
- glsl_struct_declaration_list:
- glsl_struct_declaration
- | glsl_struct_declaration_list glsl_struct_declaration
- ;
-
- glsl_struct_declaration:
- glsl_type_specifier glsl_struct_declarator_list ';'
- | glsl_type_qualifier glsl_type_specifier glsl_struct_declarator_list ';'
- ;
-
- glsl_struct_declarator_list:
- glsl_struct_declarator
- | glsl_struct_declarator_list ',' glsl_struct_declarator
- ;
-
- glsl_struct_declarator:
- lolfx_identifier
- | lolfx_identifier '[' ']'
- | lolfx_identifier '[' glsl_constant_expression ']'
- ;
-
- glsl_initializer:
- glsl_assignment_expression
- ;
-
- glsl_declaration_statement:
- glsl_declaration
- ;
-
- glsl_statement:
- glsl_compound_statement
- | glsl_simple_statement
- ;
-
- glsl_simple_statement:
- glsl_declaration_statement
- | glsl_expression_statement
- | glsl_selection_statement
- | glsl_switch_statement
- | glsl_case_label
- | glsl_iteration_statement
- | glsl_jump_statement
- ;
-
- glsl_compound_statement:
- '{' '}'
- | '{' glsl_statement_list '}'
- ;
-
- glsl_statement_no_new_scope:
- glsl_compound_statement_no_new_scope
- | glsl_simple_statement
- ;
-
- glsl_compound_statement_no_new_scope:
- '{' '}'
- | '{' glsl_statement_list '}'
- ;
-
- glsl_statement_list:
- glsl_statement
- | glsl_statement_list glsl_statement
- ;
-
- glsl_expression_statement:
- ';'
- | glsl_expression ';'
- ;
-
- glsl_selection_statement:
- GHT_IF '(' glsl_expression ')' glsl_selection_rest_statement
- ;
-
- glsl_selection_rest_statement:
- glsl_statement GHT_ELSE glsl_statement
- | glsl_statement
- ;
-
- glsl_condition:
- glsl_expression
- | glsl_fully_specified_type lolfx_identifier '=' glsl_initializer
- ;
-
- glsl_switch_statement:
- GHT_SWITCH '(' glsl_expression ')' '{' glsl_switch_statement_list '}'
- ;
-
- glsl_switch_statement_list:
- /* nothing */
- | glsl_statement_list
- ;
-
- glsl_case_label:
- GHT_CASE glsl_expression ':'
- | GHT_DEFAULT ':'
- ;
-
- glsl_iteration_statement:
- GHT_WHILE '(' glsl_condition ')' glsl_statement_no_new_scope
- | GHT_DO glsl_statement GHT_WHILE '(' glsl_expression ')' ';'
- | GHT_FOR '(' glsl_for_init_statement glsl_for_rest_statement ')' glsl_statement_no_new_scope
- ;
-
- glsl_for_init_statement:
- glsl_expression_statement
- | glsl_declaration_statement
- ;
-
- glsl_conditionopt:
- glsl_condition
- | /* empty */
- ;
-
- glsl_for_rest_statement:
- glsl_conditionopt ';'
- | glsl_conditionopt ';' glsl_expression
- ;
-
- glsl_jump_statement:
- GHT_CONTINUE ';'
- | GHT_BREAK ';'
- | GHT_RETURN ';'
- | GHT_RETURN glsl_expression ';'
- | GHT_DISCARD ';'
- ;
-
- glsl_translation_unit:
- glsl_external_declaration
- | glsl_translation_unit glsl_external_declaration
- ;
-
- glsl_external_declaration:
- glsl_function_definition
- | glsl_declaration
- ;
-
- glsl_function_definition:
- glsl_function_prototype glsl_compound_statement_no_new_scope
- ;
-
- %%
-
- void lol::LolFxParser::error(const LolFxParser::location_type& l,
- const std::string& m)
- {
- mc.Error(l, m);
- }
-
|