diff options
Diffstat (limited to 'lexlua/glsl.lua')
-rw-r--r-- | lexlua/glsl.lua | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/lexlua/glsl.lua b/lexlua/glsl.lua new file mode 100644 index 000000000..497d81636 --- /dev/null +++ b/lexlua/glsl.lua @@ -0,0 +1,109 @@ +-- Copyright 2006-2018 Mitchell mitchell.att.foicica.com. See License.txt. +-- GLSL LPeg lexer. + +local lexer = require('lexer') +local token, word_match = lexer.token, lexer.word_match +local P, R, S = lpeg.P, lpeg.R, lpeg.S + +local lex = lexer.new('glsl', {inherit = lexer.load('cpp')}) + +-- Whitespace. +lex:modify_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1)) + +-- Keywords. +lex:modify_rule('keyword', token(lexer.KEYWORD, word_match[[ + attribute const in inout out uniform varying invariant centroid flat smooth + noperspective layout patch sample subroutine lowp mediump highp precision + -- Macros. + __VERSION__ __LINE__ __FILE__ +]]) + lex:get_rule('keyword')) + +-- Types. +lex:modify_rule('type', + token(lexer.TYPE, + S('bdiu')^-1 * 'vec' * R('24') + + P('d')^-1 * 'mat' * R('24') * ('x' * R('24')^-1) + + S('iu')^-1 * 'sampler' * R('13') * 'D' + + 'sampler' * R('12') * 'D' * P('Array')^-1 * 'Shadow' + + S('iu')^-1 * 'sampler' * (R('12') * 'DArray' + + word_match[[ + Cube 2DRect Buffer 2DMS 2DMSArray 2DMSCubeArray + ]]) + + word_match[[ + samplerCubeShadow sampler2DRectShadow + samplerCubeArrayShadow + ]]) + + lex:get_rule('type') + + +-- Functions. +token(lexer.FUNCTION, word_match[[ + radians degrees sin cos tan asin acos atan sinh cosh tanh asinh acosh atanh + pow exp log exp2 log2 sqrt inversesqrt abs sign floor trunc round roundEven + ceil fract mod modf min max clamp mix step smoothstep isnan isinf + floatBitsToInt floatBitsToUint intBitsToFloat uintBitsToFloat fma frexp ldexp + packUnorm2x16 packUnorm4x8 packSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 + unpackSnorm4x8 packDouble2x32 unpackDouble2x32 length distance dot cross + normalize ftransform faceforward reflect refract matrixCompMult outerProduct + transpose determinant inverse lessThan lessThanEqual greaterThan + greaterThanEqual equal notEqual any all not uaddCarry usubBorrow umulExtended + imulExtended bitfieldExtract bitfildInsert bitfieldReverse bitCount findLSB + findMSB textureSize textureQueryLOD texture textureProj textureLod + textureOffset texelFetch texelFetchOffset textureProjOffset textureLodOffset + textureProjLod textureProjLodOffset textureGrad textureGradOffset + textureProjGrad textureProjGradOffset textureGather textureGatherOffset + texture1D texture2D texture3D texture1DProj texture2DProj texture3DProj + texture1DLod texture2DLod texture3DLod texture1DProjLod texture2DProjLod + texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj + shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy + fwidth interpolateAtCentroid interpolateAtSample interpolateAtOffset noise1 + noise2 noise3 noise4 EmitStreamVertex EndStreamPrimitive EmitVertex + EndPrimitive barrier +]]) + + +-- Variables. +token(lexer.VARIABLE, word_match[[ + gl_VertexID gl_InstanceID gl_Position gl_PointSize gl_ClipDistance + gl_PrimitiveIDIn gl_InvocationID gl_PrimitiveID gl_Layer gl_PatchVerticesIn + gl_TessLevelOuter gl_TessLevelInner gl_TessCoord gl_FragCoord gl_FrontFacing + gl_PointCoord gl_SampleID gl_SamplePosition gl_FragColor gl_FragData + gl_FragDepth gl_SampleMask gl_ClipVertex gl_FrontColor gl_BackColor + gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord + gl_Color gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 + gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 + gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord +]]) + + +-- Constants. +token(lexer.CONSTANT, word_match[[ + gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats + gl_MaxVaryingComponents gl_MaxVertexOutputComponents + gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents + gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits + gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits + gl_MaxFragmentUniformComponents gl_MaxDrawBuffers gl_MaxClipDistances + gl_MaxGeometryTextureImageUnits gl_MaxGeometryOutputVertices + gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents + gl_MaxGeometryVaryingComponents gl_MaxTessControlInputComponents + gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits + gl_MaxTessControlUniformComponents gl_MaxTessControlTotalOutputComponents + gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents + gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents + gl_MaxTessPatchComponents gl_MaxPatchVertices gl_MaxTessGenLevel + gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxClipPlanes + + gl_DepthRange gl_ModelViewMatrix gl_ProjectionMatrix + gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix + gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse + gl_ModelViewProjectionMatrixInverse gl_TextureMatrixInverse + gl_ModelViewMatrixTranspose gl_ProjectionMatrixTranspose + gl_ModelViewProjectionMatrixTranspose gl_TextureMatrixTranspose + gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose + gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose + gl_NormalScale gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial + gl_LightSource gl_LightModel gl_FrontLightModelProduct + gl_BackLightModelProduct gl_FrontLightProduct gl_BackLightProduct + gl_TextureEnvColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ + gl_ObjectPlaneS gl_ObjectPlaneT gl_ObjectPlaneR gl_ObjectPlaneQ gl_Fog +]])) + +return lex |