您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

1306 行
28 KiB

  1. %{
  2. //
  3. // Lol Engine
  4. //
  5. // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net>
  6. // This program is free software; you can redistribute it and/or
  7. // modify it under the terms of the Do What The Fuck You Want To
  8. // Public License, Version 2, as published by Sam Hocevar. See
  9. // http://www.wtfpl.net/ for more details.
  10. //
  11. #if defined HAVE_CONFIG_H
  12. # include "config.h"
  13. #endif
  14. #include "core.h"
  15. #include <string>
  16. %}
  17. %require "2.3"
  18. %debug
  19. %defines
  20. %skeleton "lalr1.cc"
  21. %name-prefix="lol"
  22. %define parser_class_name "LolFxParser"
  23. %locations
  24. %parse-param { class LolFxCompiler& mc }
  25. %error-verbose
  26. /* The classic Bison union trick */
  27. %union
  28. {
  29. int ival;
  30. unsigned uval;
  31. float fval;
  32. char *sval;
  33. }
  34. /* %type <sval> lolfx_shader_name */
  35. /*
  36. * GLSL and HLSL generic tokens
  37. */
  38. %token <ival> BOOLCONSTANT
  39. %token <ival> INTCONSTANT
  40. %token <uval> UINTCONSTANT
  41. %token <fval> FLOATCONSTANT
  42. %token <sval> FIELDSELECTION
  43. %token <sval> IDENTIFIER
  44. %token <sval> TYPENAME
  45. /*
  46. * GLSL keywords
  47. * FIXME: unsorted
  48. */
  49. %token GT_SUBROUTINE GT_PATCH GT_SAMPLE GT_FLAT GT_SMOOTH GT_LAYOUT
  50. %token GT_INVARIANT GT_HIGHP GT_MEDIUMP GT_LOWP GT_PRECISION
  51. /*
  52. * Deprecated GLSL keywords
  53. */
  54. %token GT_ATTRIBUTE GT_VARYING
  55. /*
  56. * GLSL types
  57. */
  58. %token GT_VEC2 GT_VEC3 GT_VEC4
  59. %token GT_BVEC2 GT_BVEC3 GT_BVEC4
  60. %token GT_DVEC2 GT_DVEC3 GT_DVEC4
  61. %token GT_IVEC2 GT_IVEC3 GT_IVEC4
  62. %token GT_UVEC2 GT_UVEC3 GT_UVEC4
  63. %token GT_MAT2 GT_MAT2X2 GT_MAT2X3 GT_MAT2X4
  64. %token GT_MAT3 GT_MAT3X2 GT_MAT3X3 GT_MAT3X4
  65. %token GT_MAT4 GT_MAT4X2 GT_MAT4X3 GT_MAT4X4
  66. %token GT_DMAT2 GT_DMAT2X2 GT_DMAT2X3 GT_DMAT2X4
  67. %token GT_DMAT3 GT_DMAT3X2 GT_DMAT3X3 GT_DMAT3X4
  68. %token GT_DMAT4 GT_DMAT4X2 GT_DMAT4X3 GT_DMAT4X4
  69. %token GT_SAMPLER1DSHADOW GT_SAMPLER1DARRAY GT_SAMPLER1DARRAYSHADOW
  70. %token GT_SAMPLER2DSHADOW GT_SAMPLER2DARRAY GT_SAMPLER2DARRAYSHADOW
  71. %token GT_SAMPLER2DRECT GT_SAMPLER2DRECTSHADOW
  72. %token GT_SAMPLER2DMS GT_SAMPLER2DMSARRAY
  73. %token GT_SAMPLERCUBESHADOW GT_SAMPLERCUBEARRAY GT_SAMPLERCUBEARRAYSHADOW
  74. %token GT_SAMPLERBUFFER
  75. %token GT_ISAMPLER1D GT_ISAMPLER1DARRAY
  76. %token GT_ISAMPLER2D GT_ISAMPLER2DARRAY
  77. %token GT_ISAMPLER2DRECT
  78. %token GT_ISAMPLER2DMS GT_ISAMPLER2DMSARRAY
  79. %token GT_ISAMPLER3D
  80. %token GT_ISAMPLERCUBE GT_ISAMPLERCUBEARRAY
  81. %token GT_ISAMPLERBUFFER
  82. %token GT_USAMPLER1D GT_USAMPLER1DARRAY
  83. %token GT_USAMPLER2D GT_USAMPLER2DARRAY
  84. %token GT_USAMPLER2DRECT
  85. %token GT_USAMPLER2DMS GT_USAMPLER2DMSARRAY
  86. %token GT_USAMPLER3D
  87. %token GT_USAMPLERCUBE GT_USAMPLERCUBEARRAY
  88. %token GT_USAMPLERBUFFER
  89. /*
  90. * GLSL keywords that are also in HLSL
  91. */
  92. %token GHT_BOOL GHT_BREAK GHT_CASE GHT_CENTROID GHT_CONST GHT_CONTINUE
  93. %token GHT_DEFAULT GHT_DISCARD GHT_DO GHT_DOUBLE GHT_ELSE GHT_FLOAT GHT_FOR
  94. %token GHT_IF GHT_IN GHT_INOUT GHT_INT GHT_NOPERSPECTIVE GHT_OUT GHT_RETURN
  95. %token GHT_SAMPLER1D GHT_SAMPLER2D GHT_SAMPLER3D GHT_SAMPLERCUBE GHT_STRUCT
  96. %token GHT_SWITCH GHT_UINT GHT_UNIFORM GHT_VOID GHT_WHILE
  97. /*
  98. * HLSL keywords that are also in GLSL
  99. */
  100. %token HGT_BOOL HGT_BREAK HGT_CASE HGT_CENTROID HGT_CONST HGT_CONTINUE
  101. %token HGT_DEFAULT HGT_DISCARD HGT_DO HGT_DOUBLE HGT_ELSE HGT_FLOAT HGT_FOR
  102. %token HGT_IF HGT_IN HGT_INOUT HGT_INT HGT_NOPERSPECTIVE HGT_OUT HGT_RETURN
  103. %token HGT_SAMPLER1D HGT_SAMPLER2D HGT_SAMPLER3D HGT_SAMPLERCUBE HGT_STRUCT
  104. %token HGT_SWITCH HGT_UINT HGT_UNIFORM HGT_VOID HGT_WHILE
  105. /*
  106. * HLSL keywords
  107. */
  108. %token HT_APPENDSTRUCTUREDBUFFER HT_ASM HT_ASM_FRAGMENT HT_BLENDSTATE
  109. %token HT_BUFFER HT_BYTEADDRESSBUFFER HT_CBUFFER
  110. %token HT_COLUMN_MAJOR HT_COMPILE HT_COMPILE_FRAGMENT HT_COMPILESHADER
  111. %token HT_COMPUTESHADER HT_CONSUMESTRUCTUREDBUFFER
  112. %token HT_DEPTHSTENCILSTATE HT_DEPTHSTENCILVIEW
  113. %token HT_DOMAINSHADER HT_DWORD HT_EXTERN HT_FALSE
  114. %token HT_FXGROUP HT_GEOMETRYSHADER HT_GROUPSHARED HT_HALF HT_HULLSHADER
  115. %token HT_INLINE HT_INPUTPATCH HT_INTERFACE HT_LINE
  116. %token HT_LINEADJ HT_LINEAR HT_LINESTREAM HT_MATRIX HT_NAMESPACE
  117. %token HT_NOINTERPOLATION HT_NULL HT_OUTPUTPATCH
  118. %token HT_PACKOFFSET HT_PASS HT_PIXELFRAGMENT HT_PIXELSHADER HT_POINT
  119. %token HT_POINTSTREAM HT_PRECISE HT_RASTERIZERSTATE HT_RENDERTARGETVIEW
  120. %token HT_REGISTER HT_ROW_MAJOR HT_RWBUFFER HT_RWBYTEADDRESSBUFFER
  121. %token HT_RWSTRUCTUREDBUFFER HT_RWTEXTURE1D HT_RWTEXTURE1DARRAY HT_RWTEXTURE2D
  122. %token HT_RWTEXTURE2DARRAY HT_RWTEXTURE3D HT_SAMPLER
  123. %token HT_SAMPLER_STATE HT_SAMPLERSTATE
  124. %token HT_SAMPLERCOMPARISONSTATE HT_SHARED HT_SNORM HT_STATEBLOCK
  125. %token HT_STATEBLOCK_STATE HT_STATIC HT_STRING
  126. %token HT_STRUCTUREDBUFFER HT_TBUFFER HT_TECHNIQUE HT_TECHNIQUE10
  127. %token HT_TECHNIQUE11XZ HT_TEXTURE HT_TEXTURE1D HT_TEXTURE1DARRAY HT_TEXTURE2D
  128. %token HT_TEXTURE2DARRAY HT_TEXTURE2DMS HT_TEXTURE2DMSARRAY HT_TEXTURE3D
  129. %token HT_TEXTURECUBE HT_TEXTURECUBEARRAY HT_TRUE HT_TYPEDEF HT_TRIANGLE
  130. %token HT_TRIANGLEADJ HT_TRIANGLESTREAM HT_UNORM HT_VECTOR
  131. %token HT_VERTEXFRAGMENT HT_VERTEXSHADER HT_VOLATILE
  132. /*
  133. * HLSL types
  134. */
  135. %token HT_BOOL1 HT_BOOL1x1 HT_BOOL2x1 HT_BOOL3x1 HT_BOOL4x1
  136. %token HT_BOOL2 HT_BOOL1x2 HT_BOOL2x2 HT_BOOL3x2 HT_BOOL4x2
  137. %token HT_BOOL3 HT_BOOL1x3 HT_BOOL2x3 HT_BOOL3x3 HT_BOOL4x3
  138. %token HT_BOOL4 HT_BOOL1x4 HT_BOOL2x4 HT_BOOL3x4 HT_BOOL4x4
  139. %token HT_FLOAT1 HT_FLOAT1x1 HT_FLOAT2x1 HT_FLOAT3x1 HT_FLOAT4x1
  140. %token HT_FLOAT2 HT_FLOAT1x2 HT_FLOAT2x2 HT_FLOAT3x2 HT_FLOAT4x2
  141. %token HT_FLOAT3 HT_FLOAT1x3 HT_FLOAT2x3 HT_FLOAT3x3 HT_FLOAT4x3
  142. %token HT_FLOAT4 HT_FLOAT1x4 HT_FLOAT2x4 HT_FLOAT3x4 HT_FLOAT4x4
  143. %token HT_DOUBLE1 HT_DOUBLE1x1 HT_DOUBLE2x1 HT_DOUBLE3x1 HT_DOUBLE4x1
  144. %token HT_DOUBLE2 HT_DOUBLE1x2 HT_DOUBLE2x2 HT_DOUBLE3x2 HT_DOUBLE4x2
  145. %token HT_DOUBLE3 HT_DOUBLE1x3 HT_DOUBLE2x3 HT_DOUBLE3x3 HT_DOUBLE4x3
  146. %token HT_DOUBLE4 HT_DOUBLE1x4 HT_DOUBLE2x4 HT_DOUBLE3x4 HT_DOUBLE4x4
  147. %token HT_DWORD1 HT_DWORD1x1 HT_DWORD2x1 HT_DWORD3x1 HT_DWORD4x1
  148. %token HT_DWORD2 HT_DWORD1x2 HT_DWORD2x2 HT_DWORD3x2 HT_DWORD4x2
  149. %token HT_DWORD3 HT_DWORD1x3 HT_DWORD2x3 HT_DWORD3x3 HT_DWORD4x3
  150. %token HT_DWORD4 HT_DWORD1x4 HT_DWORD2x4 HT_DWORD3x4 HT_DWORD4x4
  151. %token HT_INT1 HT_INT1x1 HT_INT2x1 HT_INT3x1 HT_INT4x1
  152. %token HT_INT2 HT_INT1x2 HT_INT2x2 HT_INT3x2 HT_INT4x2
  153. %token HT_INT3 HT_INT1x3 HT_INT2x3 HT_INT3x3 HT_INT4x3
  154. %token HT_INT4 HT_INT1x4 HT_INT2x4 HT_INT3x4 HT_INT4x4
  155. %token HT_UINT1 HT_UINT1x1 HT_UINT2x1 HT_UINT3x1 HT_UINT4x1
  156. %token HT_UINT2 HT_UINT1x2 HT_UINT2x2 HT_UINT3x2 HT_UINT4x2
  157. %token HT_UINT3 HT_UINT1x3 HT_UINT2x3 HT_UINT3x3 HT_UINT4x3
  158. %token HT_UINT4 HT_UINT1x4 HT_UINT2x4 HT_UINT3x4 HT_UINT4x4
  159. /*
  160. * HLSL preprocessor directives
  161. */
  162. %token PREPROCESSOR_DEFINE PREPROCESSOR_ELIF PREPROCESSOR_ELSE
  163. %token PREPROCESSOR_ENDIF PREPROCESSOR_ERROR PREPROCESSOR_IF
  164. %token PREPROCESSOR_IFDEF PREPROCESSOR_IFNDEF PREPROCESSOR_INCLUDE
  165. %token PREPROCESSOR_LINE PREPROCESSOR_PRAGMA PREPROCESSOR_UNDEF
  166. %token PREPROCESSOR_REGION
  167. /*
  168. * HLSL reserved keywords
  169. */
  170. %token HT_AUTO HT_CATCH HT_CHAR HT_CLASS HT_CONST_CAST
  171. %token HT_DELETE HT_DYNAMIC_CAST HT_ENUM HT_EXPLICIT HT_FRIEND HT_GOTO HT_LONG
  172. %token HT_MUTABLE HT_NEW HT_OPERATOR HT_PRIVATE HT_PROTECTED HT_PUBLIC
  173. %token HT_REINTERPRET_CAST HT_SHORT HT_SIGNED HT_SIZEOF HT_STATIC_CAST
  174. %token HT_TEMPLATE HT_THIS HT_THROW HT_TRY HT_TYPENAME HT_UNION HT_UNSIGNED
  175. %token HT_USING HT_VIRTUAL
  176. /*
  177. * Language symbols
  178. */
  179. %token T_INC T_DEC T_LE T_GE T_EQ T_NE T_LEFT T_RIGHT T_AND T_OR T_XOR
  180. %token T_MULEQ T_DIVEQ T_MODEQ T_ADDEQ T_SUBEQ T_LEFTEQ T_RIGHTEQ T_ANDEQ
  181. %token T_XOREQ T_OREQ
  182. /*
  183. * Temporary shit
  184. */
  185. %token <fval> FLOAT
  186. %token <sval> STRING NAME
  187. /*
  188. * Special tokens
  189. */
  190. %token T_END 0
  191. %token T_ERROR
  192. /*
  193. * Our entry point
  194. */
  195. %start lolfx_file
  196. %{
  197. #include "gpu/lolfx-compiler.h"
  198. #undef yylex
  199. #define yylex mc.m_lexer->lex
  200. %}
  201. %%
  202. /*
  203. * Shortcuts for token groups
  204. */
  205. group_glsl_keyword:
  206. GT_SUBROUTINE
  207. | GT_PATCH
  208. | GT_SAMPLE
  209. | GT_FLAT
  210. | GT_SMOOTH
  211. | GT_LAYOUT
  212. | GT_INVARIANT
  213. | GT_HIGHP
  214. | GT_MEDIUMP
  215. | GT_LOWP
  216. | GT_PRECISION
  217. | GT_ATTRIBUTE /* deprecated */
  218. | GT_VARYING /* deprecated */
  219. ;
  220. group_glsl_type:
  221. GT_VEC2
  222. | GT_VEC3
  223. | GT_VEC4
  224. | GT_BVEC2
  225. | GT_BVEC3
  226. | GT_BVEC4
  227. | GT_DVEC2
  228. | GT_DVEC3
  229. | GT_DVEC4
  230. | GT_IVEC2
  231. | GT_IVEC3
  232. | GT_IVEC4
  233. | GT_UVEC2
  234. | GT_UVEC3
  235. | GT_UVEC4
  236. | GT_MAT2
  237. | GT_MAT2X2
  238. | GT_MAT2X3
  239. | GT_MAT2X4
  240. | GT_MAT3
  241. | GT_MAT3X2
  242. | GT_MAT3X3
  243. | GT_MAT3X4
  244. | GT_MAT4
  245. | GT_MAT4X2
  246. | GT_MAT4X3
  247. | GT_MAT4X4
  248. | GT_DMAT2
  249. | GT_DMAT2X2
  250. | GT_DMAT2X3
  251. | GT_DMAT2X4
  252. | GT_DMAT3
  253. | GT_DMAT3X2
  254. | GT_DMAT3X3
  255. | GT_DMAT3X4
  256. | GT_DMAT4
  257. | GT_DMAT4X2
  258. | GT_DMAT4X3
  259. | GT_DMAT4X4
  260. | GT_SAMPLER1DSHADOW
  261. | GT_SAMPLER1DARRAY
  262. | GT_SAMPLER1DARRAYSHADOW
  263. | GT_SAMPLER2DSHADOW
  264. | GT_SAMPLER2DARRAY
  265. | GT_SAMPLER2DARRAYSHADOW
  266. | GT_SAMPLER2DRECT
  267. | GT_SAMPLER2DRECTSHADOW
  268. | GT_SAMPLER2DMS
  269. | GT_SAMPLER2DMSARRAY
  270. | GT_SAMPLERCUBESHADOW
  271. | GT_SAMPLERCUBEARRAY
  272. | GT_SAMPLERCUBEARRAYSHADOW
  273. | GT_SAMPLERBUFFER
  274. | GT_ISAMPLER1D
  275. | GT_ISAMPLER1DARRAY
  276. | GT_ISAMPLER2D
  277. | GT_ISAMPLER2DARRAY
  278. | GT_ISAMPLER2DRECT
  279. | GT_ISAMPLER2DMS
  280. | GT_ISAMPLER2DMSARRAY
  281. | GT_ISAMPLER3D
  282. | GT_ISAMPLERCUBE
  283. | GT_ISAMPLERCUBEARRAY
  284. | GT_ISAMPLERBUFFER
  285. | GT_USAMPLER1D
  286. | GT_USAMPLER1DARRAY
  287. | GT_USAMPLER2D
  288. | GT_USAMPLER2DARRAY
  289. | GT_USAMPLER2DRECT
  290. | GT_USAMPLER2DMS
  291. | GT_USAMPLER2DMSARRAY
  292. | GT_USAMPLER3D
  293. | GT_USAMPLERCUBE
  294. | GT_USAMPLERCUBEARRAY
  295. | GT_USAMPLERBUFFER
  296. ;
  297. group_glsl_keyword_in_hlsl:
  298. GHT_BOOL
  299. | GHT_BREAK
  300. | GHT_CASE
  301. | GHT_CENTROID
  302. | GHT_CONST
  303. | GHT_CONTINUE
  304. | GHT_DEFAULT
  305. | GHT_DISCARD
  306. | GHT_DO
  307. | GHT_DOUBLE
  308. | GHT_ELSE
  309. | GHT_FLOAT
  310. | GHT_FOR
  311. | GHT_IF
  312. | GHT_IN
  313. | GHT_INOUT
  314. | GHT_INT
  315. | GHT_NOPERSPECTIVE
  316. | GHT_OUT
  317. | GHT_RETURN
  318. | GHT_SAMPLER1D
  319. | GHT_SAMPLER2D
  320. | GHT_SAMPLER3D
  321. | GHT_SAMPLERCUBE
  322. | GHT_STRUCT
  323. | GHT_SWITCH
  324. | GHT_UINT
  325. | GHT_UNIFORM
  326. | GHT_VOID
  327. | GHT_WHILE
  328. ;
  329. group_hlsl_keyword_in_glsl:
  330. HGT_BOOL
  331. | HGT_BREAK
  332. | HGT_CASE
  333. | HGT_CENTROID
  334. | HGT_CONST
  335. | HGT_CONTINUE
  336. | HGT_DEFAULT
  337. | HGT_DISCARD
  338. | HGT_DO
  339. | HGT_DOUBLE
  340. | HGT_ELSE
  341. | HGT_FLOAT
  342. | HGT_FOR
  343. | HGT_IF
  344. | HGT_IN
  345. | HGT_INOUT
  346. | HGT_INT
  347. | HGT_NOPERSPECTIVE
  348. | HGT_OUT
  349. | HGT_RETURN
  350. | HGT_SAMPLER1D
  351. | HGT_SAMPLER2D
  352. | HGT_SAMPLER3D
  353. | HGT_SAMPLERCUBE
  354. | HGT_STRUCT
  355. | HGT_SWITCH
  356. | HGT_UINT
  357. | HGT_UNIFORM
  358. | HGT_VOID
  359. | HGT_WHILE
  360. ;
  361. group_hlsl_keyword:
  362. HT_APPENDSTRUCTUREDBUFFER
  363. | HT_ASM
  364. | HT_ASM_FRAGMENT
  365. | HT_BLENDSTATE
  366. | HT_BUFFER
  367. | HT_BYTEADDRESSBUFFER
  368. | HT_CBUFFER
  369. | HT_COLUMN_MAJOR
  370. | HT_COMPILE
  371. | HT_COMPILE_FRAGMENT
  372. | HT_COMPILESHADER
  373. | HT_COMPUTESHADER
  374. | HT_CONSUMESTRUCTUREDBUFFER
  375. | HT_DEPTHSTENCILSTATE
  376. | HT_DEPTHSTENCILVIEW
  377. | HT_DOMAINSHADER
  378. | HT_DWORD
  379. | HT_EXTERN
  380. | HT_FALSE
  381. | HT_FXGROUP
  382. | HT_GEOMETRYSHADER
  383. | HT_GROUPSHARED
  384. | HT_HALF
  385. | HT_HULLSHADER
  386. | HT_INLINE
  387. | HT_INPUTPATCH
  388. | HT_INTERFACE
  389. | HT_LINE
  390. | HT_LINEADJ
  391. | HT_LINEAR
  392. | HT_LINESTREAM
  393. | HT_MATRIX
  394. | HT_NAMESPACE
  395. | HT_NOINTERPOLATION
  396. | HT_NULL
  397. | HT_OUTPUTPATCH
  398. | HT_PACKOFFSET
  399. | HT_PASS
  400. | HT_PIXELFRAGMENT
  401. | HT_PIXELSHADER
  402. | HT_POINT
  403. | HT_POINTSTREAM
  404. | HT_PRECISE
  405. | HT_RASTERIZERSTATE
  406. | HT_RENDERTARGETVIEW
  407. | HT_REGISTER
  408. | HT_ROW_MAJOR
  409. | HT_RWBUFFER
  410. | HT_RWBYTEADDRESSBUFFER
  411. | HT_RWSTRUCTUREDBUFFER
  412. | HT_RWTEXTURE1D
  413. | HT_RWTEXTURE1DARRAY
  414. | HT_RWTEXTURE2D
  415. | HT_RWTEXTURE2DARRAY
  416. | HT_RWTEXTURE3D
  417. | HT_SAMPLER
  418. | HT_SAMPLER_STATE
  419. | HT_SAMPLERSTATE
  420. | HT_SAMPLERCOMPARISONSTATE
  421. | HT_SHARED
  422. | HT_SNORM
  423. | HT_STATEBLOCK
  424. | HT_STATEBLOCK_STATE
  425. | HT_STATIC
  426. | HT_STRING
  427. | HT_STRUCTUREDBUFFER
  428. | HT_TBUFFER
  429. | HT_TECHNIQUE
  430. | HT_TECHNIQUE10
  431. | HT_TECHNIQUE11XZ
  432. | HT_TEXTURE
  433. | HT_TEXTURE1D
  434. | HT_TEXTURE1DARRAY
  435. | HT_TEXTURE2D
  436. | HT_TEXTURE2DARRAY
  437. | HT_TEXTURE2DMS
  438. | HT_TEXTURE2DMSARRAY
  439. | HT_TEXTURE3D
  440. | HT_TEXTURECUBE
  441. | HT_TEXTURECUBEARRAY
  442. | HT_TRUE
  443. | HT_TYPEDEF
  444. | HT_TRIANGLE
  445. | HT_TRIANGLEADJ
  446. | HT_TRIANGLESTREAM
  447. | HT_UNORM
  448. | HT_VECTOR
  449. | HT_VERTEXFRAGMENT
  450. | HT_VERTEXSHADER
  451. | HT_VOLATILE
  452. ;
  453. group_hlsl_type:
  454. HT_BOOL1
  455. | HT_BOOL1x1
  456. | HT_BOOL2x1
  457. | HT_BOOL3x1
  458. | HT_BOOL4x1
  459. | HT_BOOL2
  460. | HT_BOOL1x2
  461. | HT_BOOL2x2
  462. | HT_BOOL3x2
  463. | HT_BOOL4x2
  464. | HT_BOOL3
  465. | HT_BOOL1x3
  466. | HT_BOOL2x3
  467. | HT_BOOL3x3
  468. | HT_BOOL4x3
  469. | HT_BOOL4
  470. | HT_BOOL1x4
  471. | HT_BOOL2x4
  472. | HT_BOOL3x4
  473. | HT_BOOL4x4
  474. | HT_FLOAT1
  475. | HT_FLOAT1x1
  476. | HT_FLOAT2x1
  477. | HT_FLOAT3x1
  478. | HT_FLOAT4x1
  479. | HT_FLOAT2
  480. | HT_FLOAT1x2
  481. | HT_FLOAT2x2
  482. | HT_FLOAT3x2
  483. | HT_FLOAT4x2
  484. | HT_FLOAT3
  485. | HT_FLOAT1x3
  486. | HT_FLOAT2x3
  487. | HT_FLOAT3x3
  488. | HT_FLOAT4x3
  489. | HT_FLOAT4
  490. | HT_FLOAT1x4
  491. | HT_FLOAT2x4
  492. | HT_FLOAT3x4
  493. | HT_FLOAT4x4
  494. | HT_DOUBLE1
  495. | HT_DOUBLE1x1
  496. | HT_DOUBLE2x1
  497. | HT_DOUBLE3x1
  498. | HT_DOUBLE4x1
  499. | HT_DOUBLE2
  500. | HT_DOUBLE1x2
  501. | HT_DOUBLE2x2
  502. | HT_DOUBLE3x2
  503. | HT_DOUBLE4x2
  504. | HT_DOUBLE3
  505. | HT_DOUBLE1x3
  506. | HT_DOUBLE2x3
  507. | HT_DOUBLE3x3
  508. | HT_DOUBLE4x3
  509. | HT_DOUBLE4
  510. | HT_DOUBLE1x4
  511. | HT_DOUBLE2x4
  512. | HT_DOUBLE3x4
  513. | HT_DOUBLE4x4
  514. | HT_DWORD1
  515. | HT_DWORD1x1
  516. | HT_DWORD2x1
  517. | HT_DWORD3x1
  518. | HT_DWORD4x1
  519. | HT_DWORD2
  520. | HT_DWORD1x2
  521. | HT_DWORD2x2
  522. | HT_DWORD3x2
  523. | HT_DWORD4x2
  524. | HT_DWORD3
  525. | HT_DWORD1x3
  526. | HT_DWORD2x3
  527. | HT_DWORD3x3
  528. | HT_DWORD4x3
  529. | HT_DWORD4
  530. | HT_DWORD1x4
  531. | HT_DWORD2x4
  532. | HT_DWORD3x4
  533. | HT_DWORD4x4
  534. | HT_INT1
  535. | HT_INT1x1
  536. | HT_INT2x1
  537. | HT_INT3x1
  538. | HT_INT4x1
  539. | HT_INT2
  540. | HT_INT1x2
  541. | HT_INT2x2
  542. | HT_INT3x2
  543. | HT_INT4x2
  544. | HT_INT3
  545. | HT_INT1x3
  546. | HT_INT2x3
  547. | HT_INT3x3
  548. | HT_INT4x3
  549. | HT_INT4
  550. | HT_INT1x4
  551. | HT_INT2x4
  552. | HT_INT3x4
  553. | HT_INT4x4
  554. | HT_UINT1
  555. | HT_UINT1x1
  556. | HT_UINT2x1
  557. | HT_UINT3x1
  558. | HT_UINT4x1
  559. | HT_UINT2
  560. | HT_UINT1x2
  561. | HT_UINT2x2
  562. | HT_UINT3x2
  563. | HT_UINT4x2
  564. | HT_UINT3
  565. | HT_UINT1x3
  566. | HT_UINT2x3
  567. | HT_UINT3x3
  568. | HT_UINT4x3
  569. | HT_UINT4
  570. | HT_UINT1x4
  571. | HT_UINT2x4
  572. | HT_UINT3x4
  573. | HT_UINT4x4
  574. ;
  575. group_hlsl_preprocessor:
  576. PREPROCESSOR_DEFINE
  577. | PREPROCESSOR_ELIF
  578. | PREPROCESSOR_ELSE
  579. | PREPROCESSOR_ENDIF
  580. | PREPROCESSOR_ERROR
  581. | PREPROCESSOR_IF
  582. | PREPROCESSOR_IFDEF
  583. | PREPROCESSOR_IFNDEF
  584. | PREPROCESSOR_INCLUDE
  585. | PREPROCESSOR_LINE
  586. | PREPROCESSOR_PRAGMA
  587. | PREPROCESSOR_UNDEF
  588. | PREPROCESSOR_REGION
  589. ;
  590. group_hlsl_reserved:
  591. HT_AUTO
  592. | HT_CATCH
  593. | HT_CHAR
  594. | HT_CLASS
  595. | HT_CONST_CAST
  596. | HT_DELETE
  597. | HT_DYNAMIC_CAST
  598. | HT_ENUM
  599. | HT_EXPLICIT
  600. | HT_FRIEND
  601. | HT_GOTO
  602. | HT_LONG
  603. | HT_MUTABLE
  604. | HT_NEW
  605. | HT_OPERATOR
  606. | HT_PRIVATE
  607. | HT_PROTECTED
  608. | HT_PUBLIC
  609. | HT_REINTERPRET_CAST
  610. | HT_SHORT
  611. | HT_SIGNED
  612. | HT_SIZEOF
  613. | HT_STATIC_CAST
  614. | HT_TEMPLATE
  615. | HT_THIS
  616. | HT_THROW
  617. | HT_TRY
  618. | HT_TYPENAME
  619. | HT_UNION
  620. | HT_UNSIGNED
  621. | HT_USING
  622. | HT_VIRTUAL
  623. ;
  624. group_language_symbols:
  625. T_INC
  626. | T_DEC
  627. | T_LE
  628. | T_GE
  629. | T_EQ
  630. | T_NE
  631. | T_LEFT
  632. | T_RIGHT
  633. | T_AND
  634. | T_OR
  635. | T_XOR
  636. | T_MULEQ
  637. | T_DIVEQ
  638. | T_MODEQ
  639. | T_ADDEQ
  640. | T_SUBEQ
  641. | T_LEFTEQ
  642. | T_RIGHTEQ
  643. | T_ANDEQ
  644. | T_XOREQ
  645. | T_OREQ
  646. ;
  647. /*
  648. * Grammar for LolFx files
  649. */
  650. lolfx_file:
  651. lolfx_section_list
  652. ;
  653. lolfx_section_list:
  654. lolfx_section
  655. | lolfx_section lolfx_section_list
  656. ;
  657. lolfx_section:
  658. lolfx_technique
  659. | lolfx_shader
  660. ;
  661. /*
  662. * Grammar for techniques
  663. */
  664. lolfx_technique:
  665. HT_TECHNIQUE lolfx_identifier '{' pass_list '}' { std::cout << "New tech " << std::endl; }
  666. ;
  667. /*
  668. * The valid LolFx identifiers
  669. */
  670. lolfx_identifier:
  671. IDENTIFIER { std::cout << "New name " << $1 << std::endl; }
  672. | FIELDSELECTION { std::cout << "New name " << $1 << std::endl; }
  673. ;
  674. /*
  675. * Grammar for passes
  676. */
  677. pass_list:
  678. pass
  679. | pass pass_list
  680. ;
  681. pass:
  682. HT_PASS lolfx_identifier '{' pass_stmt_list '}' { std::cout << "New pass " << std::endl; }
  683. ;
  684. pass_stmt_list:
  685. pass_stmt
  686. | pass_stmt pass_stmt_list
  687. ;
  688. /* Shitty shit */
  689. pass_stmt:
  690. ';'
  691. | IDENTIFIER '=' IDENTIFIER ';'
  692. | IDENTIFIER '=' INTCONSTANT ';'
  693. | IDENTIFIER '=' BOOLCONSTANT ';'
  694. | IDENTIFIER '=' HT_FALSE ';'
  695. | IDENTIFIER '=' HT_TRUE ';'
  696. | IDENTIFIER '[' INTCONSTANT ']' '=' IDENTIFIER ';'
  697. | IDENTIFIER '[' INTCONSTANT ']' '=' INTCONSTANT ';'
  698. | HT_TEXTURE '[' INTCONSTANT ']' '=' IDENTIFIER ';'
  699. | HT_TEXTURE '[' INTCONSTANT ']' '=' HT_NULL ';'
  700. | HT_DOMAINSHADER '=' IDENTIFIER ';'
  701. | HT_GEOMETRYSHADER '=' IDENTIFIER ';'
  702. | HT_HULLSHADER '=' IDENTIFIER ';'
  703. | HT_PIXELSHADER '=' IDENTIFIER ';'
  704. | HT_VERTEXSHADER '=' IDENTIFIER ';'
  705. ;
  706. /*
  707. * Grammar for shaders
  708. */
  709. lolfx_shader:
  710. lolfx_shader_declaration glsl_translation_unit
  711. ;
  712. lolfx_shader_declaration:
  713. '[' lolfx_shader_name_list ']' { std::cout << "new shader" << std::endl; }
  714. ;
  715. lolfx_shader_name_list:
  716. lolfx_shader_name '.' lolfx_shader_name_list
  717. | lolfx_shader_name
  718. ;
  719. lolfx_shader_name:
  720. lolfx_identifier
  721. ;
  722. /*
  723. * Grammar for GLSL
  724. */
  725. glsl_variable_identifier:
  726. lolfx_identifier
  727. ;
  728. glsl_primary_expression:
  729. glsl_variable_identifier
  730. | INTCONSTANT
  731. | UINTCONSTANT
  732. | FLOATCONSTANT
  733. | BOOLCONSTANT
  734. | '(' glsl_expression ')'
  735. ;
  736. glsl_postfix_expression:
  737. glsl_primary_expression
  738. | glsl_postfix_expression '[' glsl_integer_expression ']'
  739. | glsl_function_call
  740. | glsl_postfix_expression '.' FIELDSELECTION
  741. | glsl_postfix_expression T_INC
  742. | glsl_postfix_expression T_DEC
  743. ;
  744. glsl_integer_expression:
  745. glsl_expression
  746. ;
  747. glsl_function_call:
  748. glsl_function_call_or_method
  749. ;
  750. glsl_function_call_or_method:
  751. glsl_function_call_generic
  752. | glsl_postfix_expression '.' glsl_function_call_generic
  753. ;
  754. glsl_function_call_generic:
  755. glsl_function_call_header_with_parameters ')'
  756. | glsl_function_call_header_no_parameters ')'
  757. ;
  758. glsl_function_call_header_no_parameters:
  759. glsl_function_call_header GHT_VOID
  760. | glsl_function_call_header
  761. ;
  762. glsl_function_call_header_with_parameters:
  763. glsl_function_call_header glsl_assignment_expression
  764. | glsl_function_call_header_with_parameters ',' glsl_assignment_expression
  765. ;
  766. glsl_function_call_header:
  767. glsl_function_identifier '('
  768. ;
  769. glsl_function_identifier:
  770. glsl_type_specifier
  771. | IDENTIFIER
  772. | FIELDSELECTION
  773. ;
  774. glsl_unary_expression:
  775. glsl_postfix_expression
  776. | T_INC glsl_unary_expression
  777. | T_DEC glsl_unary_expression
  778. | glsl_unary_operator glsl_unary_expression
  779. ;
  780. glsl_unary_operator:
  781. '+'
  782. | '-'
  783. | '!'
  784. | '~'
  785. ;
  786. glsl_multiplicative_expression:
  787. glsl_unary_expression
  788. | glsl_multiplicative_expression '*' glsl_unary_expression
  789. | glsl_multiplicative_expression '/' glsl_unary_expression
  790. | glsl_multiplicative_expression '%' glsl_unary_expression
  791. ;
  792. glsl_additive_expression:
  793. glsl_multiplicative_expression
  794. | glsl_additive_expression '+' glsl_multiplicative_expression
  795. | glsl_additive_expression '-' glsl_multiplicative_expression
  796. ;
  797. glsl_shift_expression:
  798. glsl_additive_expression
  799. | glsl_shift_expression T_LEFT glsl_additive_expression
  800. | glsl_shift_expression T_RIGHT glsl_additive_expression
  801. ;
  802. glsl_relational_expression:
  803. glsl_shift_expression
  804. | glsl_relational_expression '<' glsl_shift_expression
  805. | glsl_relational_expression '>' glsl_shift_expression
  806. | glsl_relational_expression T_LE glsl_shift_expression
  807. | glsl_relational_expression T_GE glsl_shift_expression
  808. ;
  809. glsl_equality_expression:
  810. glsl_relational_expression
  811. | glsl_equality_expression T_EQ glsl_relational_expression
  812. | glsl_equality_expression T_NE glsl_relational_expression
  813. ;
  814. glsl_and_expression:
  815. glsl_equality_expression
  816. | glsl_and_expression '&' glsl_equality_expression
  817. ;
  818. glsl_exclusive_or_expression:
  819. glsl_and_expression
  820. | glsl_exclusive_or_expression '^' glsl_and_expression
  821. ;
  822. glsl_inclusive_or_expression:
  823. glsl_exclusive_or_expression
  824. | glsl_inclusive_or_expression '|' glsl_exclusive_or_expression
  825. ;
  826. glsl_logical_and_expression:
  827. glsl_inclusive_or_expression
  828. | glsl_logical_and_expression T_AND glsl_inclusive_or_expression
  829. ;
  830. glsl_logical_xor_expression:
  831. glsl_logical_and_expression
  832. | glsl_logical_xor_expression T_XOR glsl_logical_and_expression
  833. ;
  834. glsl_logical_or_expression:
  835. glsl_logical_xor_expression
  836. | glsl_logical_or_expression T_OR glsl_logical_xor_expression
  837. ;
  838. glsl_conditional_expression:
  839. glsl_logical_or_expression
  840. | glsl_logical_or_expression '?' glsl_expression ':' glsl_assignment_expression
  841. ;
  842. glsl_assignment_expression:
  843. glsl_conditional_expression
  844. | glsl_unary_expression glsl_assignment_operator glsl_assignment_expression
  845. ;
  846. glsl_assignment_operator:
  847. '='
  848. | T_MULEQ
  849. | T_DIVEQ
  850. | T_MODEQ
  851. | T_ADDEQ
  852. | T_SUBEQ
  853. | T_LEFTEQ
  854. | T_RIGHTEQ
  855. | T_ANDEQ
  856. | T_XOREQ
  857. | T_OREQ
  858. ;
  859. glsl_expression:
  860. glsl_assignment_expression
  861. | glsl_expression ',' glsl_assignment_expression
  862. ;
  863. glsl_constant_expression:
  864. glsl_conditional_expression
  865. ;
  866. glsl_declaration:
  867. glsl_function_prototype ';'
  868. | glsl_init_declarator_list ';'
  869. | GT_PRECISION glsl_precision_qualifier glsl_type_specifier_no_prec ';'
  870. | glsl_type_qualifier lolfx_identifier '{' glsl_struct_declaration_list '}' ';'
  871. | glsl_type_qualifier lolfx_identifier '{' glsl_struct_declaration_list '}' lolfx_identifier ';'
  872. | glsl_type_qualifier lolfx_identifier '{' glsl_struct_declaration_list '}' lolfx_identifier '[' ']' ';'
  873. | glsl_type_qualifier lolfx_identifier '{' glsl_struct_declaration_list '}' lolfx_identifier '[' glsl_constant_expression ']' ';'
  874. | glsl_type_qualifier ';'
  875. ;
  876. glsl_function_prototype:
  877. glsl_function_declarator ')'
  878. ;
  879. glsl_function_declarator:
  880. glsl_function_header
  881. | glsl_function_header_with_parameters
  882. ;
  883. glsl_function_header_with_parameters:
  884. glsl_function_header lolfx_parameter_declaration
  885. | glsl_function_header_with_parameters ',' lolfx_parameter_declaration
  886. ;
  887. glsl_function_header:
  888. glsl_fully_specified_type lolfx_identifier '('
  889. ;
  890. glsl_parameter_declarator:
  891. glsl_type_specifier lolfx_identifier
  892. | glsl_type_specifier lolfx_identifier '[' glsl_constant_expression ']'
  893. ;
  894. lolfx_parameter_declaration:
  895. glsl_parameter_declaration ':' lolfx_identifier /* HLSL only */
  896. | glsl_parameter_declaration
  897. ;
  898. glsl_parameter_declaration:
  899. glsl_parameter_type_qualifier lolfx_parameter_qualifier glsl_parameter_declarator
  900. | lolfx_parameter_qualifier glsl_parameter_declarator
  901. | glsl_parameter_type_qualifier lolfx_parameter_qualifier glsl_parameter_type_specifier
  902. | lolfx_parameter_qualifier glsl_parameter_type_specifier
  903. ;
  904. lolfx_parameter_qualifier:
  905. glsl_parameter_qualifier
  906. | GHT_UNIFORM /* HLSL only */
  907. ;
  908. glsl_parameter_qualifier:
  909. /* empty */
  910. | GHT_IN
  911. | GHT_OUT
  912. | GHT_INOUT
  913. | GT_ATTRIBUTE /* deprecated */
  914. | GT_VARYING /* deprecated */
  915. ;
  916. glsl_parameter_type_specifier:
  917. glsl_type_specifier
  918. ;
  919. glsl_init_declarator_list:
  920. glsl_single_declaration
  921. | glsl_init_declarator_list ',' lolfx_identifier
  922. | glsl_init_declarator_list ',' lolfx_identifier '[' ']'
  923. | glsl_init_declarator_list ',' lolfx_identifier '[' glsl_constant_expression ']'
  924. | glsl_init_declarator_list ',' lolfx_identifier '[' ']' '=' glsl_initializer
  925. | glsl_init_declarator_list ',' lolfx_identifier '[' glsl_constant_expression ']' '=' glsl_initializer
  926. | glsl_init_declarator_list ',' lolfx_identifier '=' glsl_initializer
  927. ;
  928. glsl_single_declaration:
  929. glsl_fully_specified_type
  930. | glsl_fully_specified_type lolfx_identifier
  931. | glsl_fully_specified_type lolfx_identifier '[' ']'
  932. | glsl_fully_specified_type lolfx_identifier '[' glsl_constant_expression ']'
  933. | glsl_fully_specified_type lolfx_identifier '[' ']' '=' glsl_initializer
  934. | glsl_fully_specified_type lolfx_identifier '[' glsl_constant_expression ']' '=' glsl_initializer
  935. | glsl_fully_specified_type lolfx_identifier '=' glsl_initializer
  936. | GT_INVARIANT lolfx_identifier
  937. ;
  938. glsl_fully_specified_type:
  939. glsl_type_specifier
  940. | glsl_type_qualifier glsl_type_specifier
  941. ;
  942. glsl_invariant_qualifier:
  943. GT_INVARIANT
  944. ;
  945. glsl_interpolation_qualifier:
  946. GT_SMOOTH
  947. | GT_FLAT
  948. | GHT_NOPERSPECTIVE
  949. ;
  950. glsl_layout_qualifier:
  951. GT_LAYOUT '(' glsl_layout_qualifier_id_list ')'
  952. ;
  953. glsl_layout_qualifier_id_list:
  954. glsl_layout_qualifier_id
  955. | glsl_layout_qualifier_id_list ',' glsl_layout_qualifier_id
  956. ;
  957. glsl_layout_qualifier_id:
  958. lolfx_identifier
  959. | lolfx_identifier '=' INTCONSTANT
  960. ;
  961. glsl_parameter_type_qualifier:
  962. GHT_CONST
  963. ;
  964. glsl_type_qualifier:
  965. glsl_storage_qualifier
  966. | glsl_layout_qualifier
  967. | glsl_layout_qualifier glsl_storage_qualifier
  968. | glsl_interpolation_qualifier glsl_storage_qualifier
  969. | glsl_interpolation_qualifier
  970. | glsl_invariant_qualifier glsl_storage_qualifier
  971. | glsl_invariant_qualifier glsl_interpolation_qualifier glsl_storage_qualifier
  972. | glsl_invariant_qualifier
  973. ;
  974. glsl_storage_qualifier:
  975. GHT_CONST
  976. | GHT_IN
  977. | GHT_OUT
  978. | GHT_CENTROID GHT_IN
  979. | GHT_CENTROID GHT_OUT
  980. | GT_PATCH GHT_IN
  981. | GT_PATCH GHT_OUT
  982. | GT_SAMPLE GHT_IN
  983. | GT_SAMPLE GHT_OUT
  984. | GHT_UNIFORM
  985. | GT_ATTRIBUTE /* deprecated */
  986. | GT_VARYING /* deprecated */
  987. ;
  988. glsl_type_specifier:
  989. glsl_type_specifier_no_prec
  990. | glsl_precision_qualifier glsl_type_specifier_no_prec
  991. ;
  992. glsl_type_specifier_no_prec:
  993. lolfx_type_specifier_nonarray
  994. | lolfx_type_specifier_nonarray '[' ']'
  995. | lolfx_type_specifier_nonarray '[' glsl_constant_expression ']'
  996. lolfx_type_specifier_nonarray:
  997. glsl_type_specifier_nonarray
  998. | group_hlsl_type /* HLSL only */
  999. ;
  1000. glsl_type_specifier_nonarray:
  1001. GHT_VOID
  1002. | GHT_FLOAT
  1003. | GHT_DOUBLE
  1004. | GHT_INT
  1005. | GHT_UINT
  1006. | GHT_BOOL
  1007. | group_glsl_type
  1008. | GHT_SAMPLER1D
  1009. | GHT_SAMPLER2D
  1010. | GHT_SAMPLER3D
  1011. | GHT_SAMPLERCUBE
  1012. | glsl_struct_specifier
  1013. | TYPENAME
  1014. ;
  1015. glsl_precision_qualifier:
  1016. GT_HIGHP
  1017. | GT_MEDIUMP
  1018. | GT_LOWP
  1019. ;
  1020. glsl_struct_specifier:
  1021. GHT_STRUCT lolfx_identifier '{' glsl_struct_declaration_list '}'
  1022. | GHT_STRUCT '{' glsl_struct_declaration_list '}'
  1023. ;
  1024. glsl_struct_declaration_list:
  1025. glsl_struct_declaration
  1026. | glsl_struct_declaration_list glsl_struct_declaration
  1027. ;
  1028. glsl_struct_declaration:
  1029. glsl_type_specifier glsl_struct_declarator_list ';'
  1030. | glsl_type_qualifier glsl_type_specifier glsl_struct_declarator_list ';'
  1031. ;
  1032. glsl_struct_declarator_list:
  1033. glsl_struct_declarator
  1034. | glsl_struct_declarator_list ',' glsl_struct_declarator
  1035. ;
  1036. glsl_struct_declarator:
  1037. lolfx_identifier
  1038. | lolfx_identifier '[' ']'
  1039. | lolfx_identifier '[' glsl_constant_expression ']'
  1040. ;
  1041. glsl_initializer:
  1042. glsl_assignment_expression
  1043. ;
  1044. glsl_declaration_statement:
  1045. glsl_declaration
  1046. ;
  1047. glsl_statement:
  1048. glsl_compound_statement
  1049. | glsl_simple_statement
  1050. ;
  1051. glsl_simple_statement:
  1052. glsl_declaration_statement
  1053. | glsl_expression_statement
  1054. | glsl_selection_statement
  1055. | glsl_switch_statement
  1056. | glsl_case_label
  1057. | glsl_iteration_statement
  1058. | glsl_jump_statement
  1059. ;
  1060. glsl_compound_statement:
  1061. '{' '}'
  1062. | '{' glsl_statement_list '}'
  1063. ;
  1064. glsl_statement_no_new_scope:
  1065. glsl_compound_statement_no_new_scope
  1066. | glsl_simple_statement
  1067. ;
  1068. glsl_compound_statement_no_new_scope:
  1069. '{' '}'
  1070. | '{' glsl_statement_list '}'
  1071. ;
  1072. glsl_statement_list:
  1073. glsl_statement
  1074. | glsl_statement_list glsl_statement
  1075. ;
  1076. glsl_expression_statement:
  1077. ';'
  1078. | glsl_expression ';'
  1079. ;
  1080. glsl_selection_statement:
  1081. GHT_IF '(' glsl_expression ')' glsl_selection_rest_statement
  1082. ;
  1083. glsl_selection_rest_statement:
  1084. glsl_statement GHT_ELSE glsl_statement
  1085. | glsl_statement
  1086. ;
  1087. glsl_condition:
  1088. glsl_expression
  1089. | glsl_fully_specified_type lolfx_identifier '=' glsl_initializer
  1090. ;
  1091. glsl_switch_statement:
  1092. GHT_SWITCH '(' glsl_expression ')' '{' glsl_switch_statement_list '}'
  1093. ;
  1094. glsl_switch_statement_list:
  1095. /* nothing */
  1096. | glsl_statement_list
  1097. ;
  1098. glsl_case_label:
  1099. GHT_CASE glsl_expression ':'
  1100. | GHT_DEFAULT ':'
  1101. ;
  1102. glsl_iteration_statement:
  1103. GHT_WHILE '(' glsl_condition ')' glsl_statement_no_new_scope
  1104. | GHT_DO glsl_statement GHT_WHILE '(' glsl_expression ')' ';'
  1105. | GHT_FOR '(' glsl_for_init_statement glsl_for_rest_statement ')' glsl_statement_no_new_scope
  1106. ;
  1107. glsl_for_init_statement:
  1108. glsl_expression_statement
  1109. | glsl_declaration_statement
  1110. ;
  1111. glsl_conditionopt:
  1112. glsl_condition
  1113. | /* empty */
  1114. ;
  1115. glsl_for_rest_statement:
  1116. glsl_conditionopt ';'
  1117. | glsl_conditionopt ';' glsl_expression
  1118. ;
  1119. glsl_jump_statement:
  1120. GHT_CONTINUE ';'
  1121. | GHT_BREAK ';'
  1122. | GHT_RETURN ';'
  1123. | GHT_RETURN glsl_expression ';'
  1124. | GHT_DISCARD ';'
  1125. ;
  1126. glsl_translation_unit:
  1127. glsl_external_declaration
  1128. | glsl_translation_unit glsl_external_declaration
  1129. ;
  1130. glsl_external_declaration:
  1131. glsl_function_definition
  1132. | glsl_declaration
  1133. ;
  1134. glsl_function_definition:
  1135. glsl_function_prototype glsl_compound_statement_no_new_scope
  1136. ;
  1137. %%
  1138. void lol::LolFxParser::error(const LolFxParser::location_type& l,
  1139. const std::string& m)
  1140. {
  1141. mc.Error(l, m);
  1142. }